FriendRunner for Tool Vendors
Integrating FriendRunner with 3rd-party load testing tools
Problem
Viral growth and quick scaling are often critical to a Facebook application's success, so load testing the app before deployment would seem like a no brainer.
As enterprise customers embrace Facebook and develop applications on the platform, they expect to fully test their products before deployment. However, the Facebook Platform prevents traditional load testing tools from testing Facebook applications, and so the vendors of these tools miss an opportunity. (Learn more about this problem here.)
Solution
FriendRunner is a cloud-based tool that enables the load testing of Facebook applications. It emulates the Facebook Platform so that a Facebook application can run against it instead of the real Facebook. This removes the barriers to load testing, because it enables a 3rd-party load testing tool to treat the Facebook app like any other web application.This e-mail address is being protected from spambots. You need JavaScript enabled to view it a demonstration to see how easy integration is. Vendors can integrate their tools with FriendRunner using different levels of connectedness depending on their customers' needs:
Tier 1: Simple Integration
FriendRunner enables access to Facebook applications by allowing the Facebook information (such as each virtual user's login credentials) to be specified as parameters in a custom URL according to some simple rules. If the URLs in the test script adhere to these rules, then the load testing tool works with FriendRunner. While this type of integration is not very tight, it is powerful as the two systems can work together without changing any product code.
As a simple enhancement, the tool vendor can build simple macros or functions into the script editor to facilitate URL construction by its customers. This decreases the need for documentation and it lowers support costs.
Tier 2: Test Tool Launches and Controls the FriendRunner Infrastructure
While simple integration is a powerful tool, both systems must be started, configured, and stopped independently, and they do not share information.
A more integrated system enables the test tool to launch the FriendRunner infrastructure with the correct configuration based on the test specifications. This improves the customer experience, as the load test is managed from a single console.
Tier 3: FriendRunner shares information with the Test Tool
The best integration occurs when FriendRunner can share data with the test tool that only it can access. This data can be valuable to the customer, and the test tool's user interface can display this to the customer. FriendRunner can share several types of data:
More meaningful timing metrics
Page load times are a poor metric for Canvas applications, because of all the things happening between the test tool and the application (i.e. proxying by Facebook, calling the application, rendering FBML into HTML, lots of network latency, etc.). As this diagram indicates, the load times calculated by the load test tool contain many actions. This makes it difficult for a customer to isolate and measure the performance of his application.

Alternatively, Application Time is a better metric, because it measures only the time that the application is actually working: the other times are not included. This is available only to FriendRunner, which is the process calling the application. For more information, see here.

API Call Analysis
The customer can view a list of APIs calls, with their parameters, that the application makes into the FriendRunner/Facebook server. This is a useful diagnostic tool to help determine if the application is making unnecessary round trips to the Facebook server and hindering its performance. Furthermore, the customer can see which API calls are either already deprecated or soon to be deprecated, and can view recommended replacement calls.

API Call Timing
The customer can monitor FriendRunner's performance to verify that it is performing consistently and is not introducing any delays to the application's processing during API calls.



