AppDynamics integration for BrowserStack Load Testing
Learn how to send BrowserStack Load Testing metrics and a dashboard to Splunk AppDynamics so you can correlate load-test traffic with application performance.
Use this guide to connect BrowserStack Load Testing with Splunk AppDynamics. You can then correlate test activity with backend performance, infrastructure health, and user experience in one place.
BrowserStack publishes metrics to AppDynamics Analytics, creates a custom dashboard you can open from your test results, and posts lifecycle events as overlays on that dashboard.
Prerequisites
Before you enable the AppDynamics integration, make sure you have:
-
Splunk AppDynamics SaaS tenant: A SaaS Controller, such as
https://yourco.saas.appdynamics.com. The on-premises Controller is not supported. - API client access: Permission to create an API client under Administration in your Controller.
- Analytics API key access: Permission to create an Analytics API key with the Manage Schema and Publish Custom Events permissions.
- An application: An application already configured in your AppDynamics tenant that you want to correlate the load test against.
-
Your AppDynamics region: The region your Analytics tenant runs in, such as
USorFRA. - BrowserStack Load Testing account: Access to BrowserStack Load Testing with admin access to at least one project.
AppDynamics requires two separate credentials. The API client (name and secret) gives BrowserStack access to the Controller to create the dashboard, and the Analytics API key lets BrowserStack publish metrics and events. The Analytics API key is not the same as the API client secret. Make sure the Analytics API key has the Manage Schema and Publish Custom Events permissions.
Integration overview
BrowserStack Load Testing streams metrics and events to your AppDynamics tenant so you can analyze how your systems behave under load.
For an overview of all APM options, see Application Performance Monitoring integration.
Core capabilities:
- Metric streaming: BrowserStack aggregates performance data into 10-second buckets and publishes it to AppDynamics Analytics.
- Virtual user metrics: Track how many virtual users (VUs) are active, how long tests run, and how many requests they generate.
- Error and latency metrics: Monitor error rates and response-time percentiles to identify performance regressions.
- Browser metrics: For browser-based load tests, capture core web vitals such as LCP, FCP, CLS, and INP.
- Dimensions: Each metric carries dimensions, such as load test name, region, and executor, so that you can filter results inside AppDynamics.
- Native dashboard: BrowserStack creates a preconfigured dashboard in your Controller on the first run and returns a deep link to it from the load-test report.
Get your AppDynamics credentials
AppDynamics uses two separate credentials: an API client for the Controller and an Analytics API key for publishing metrics and events. Follow these steps in your AppDynamics tenant to collect the values you paste into BrowserStack.
Get your Controller URL and application name
Collect the Controller URL and application name that BrowserStack uses to connect to your AppDynamics tenant:
- Sign in to your AppDynamics Controller, typically at
https://<account>.saas.appdynamics.com. - Copy the full Controller URL from your browser’s address bar, including the
https://prefix. - In the top-left application picker, copy the exact name (case-sensitive) of the application you want to correlate the load test against.
Create an API client
Create an API client in your Controller to authenticate BrowserStack against the AppDynamics API:
- In the Controller, select the gear icon in the top-right and open Administration.
- Open the API Clients tab and select Create.
- Enter a name such as
browserstack-load-testing. This becomes your API client name. In BrowserStack, enter only the name, without any@accountsuffix. - Assign the Account Owner role. A custom role also works if it can create and update custom dashboards and read the target application.
- Select Save, then select Generate Secret and copy the secret immediately. AppDynamics shows it only once. For details, see the Splunk AppDynamics API clients documentation.
Create an Analytics API key
- In the Controller, open Analytics from the top navigation.
- Select the gear icon in the top-right, open Configuration, then open the API Keys tab.
- Select Add and enter a name such as
browserstack-load-testing-analytics. - Under Custom Analytics Events Permissions, select Can Manage Schema and Can Publish all Custom Analytics Events. Leave Can Query all Custom Analytics Events unselected.
- Select Create and copy the API key value immediately. AppDynamics shows it only once. For details, see the Splunk AppDynamics Analytics security documentation.
After you generate the credentials, store them securely. You can reference them in your BrowserStack Load Testing configuration through environment variables.
Select your AppDynamics region
AppDynamics SaaS runs Analytics on a different endpoint in each region, and every Controller URL uses the same <account>.saas.appdynamics.com format regardless of region. BrowserStack cannot infer the region from the Controller URL, so you select it explicitly when you configure the integration.
Choose the region code that matches your Analytics tenant:
| Region code | Region | Analytics endpoint |
|---|---|---|
US |
United States (default) | analytics.api.appdynamics.com |
FRA |
Frankfurt, EU | fra-ana-api.saas.appdynamics.com |
LON |
London, UK | lon-ana-api.saas.appdynamics.com |
BOM |
Mumbai, India | bom-ana-api.saas.appdynamics.com |
SIN |
Singapore | sin-ana-api.saas.appdynamics.com |
SYD |
Sydney, Australia | syd-ana-api.saas.appdynamics.com |
Supported metrics
BrowserStack Load Testing publishes the following metrics to the browserstackLoadTestMetrics2026V2 schema in AppDynamics Analytics. All metrics are sent automatically when AppDynamics is connected.
| Category | Metric name | Description |
|---|---|---|
| Load | vuMax |
Maximum virtual users in the window |
| Load | vuCount |
Virtual users started in the window |
| Load | vuEnded |
Virtual users ended in the window |
| Load | testDuration |
Elapsed test time |
| Requests | requestsTotal |
Total requests in the window |
| Requests | requestsRateAvg |
Average requests per second |
| Errors | errorsPercentage |
Error rate as a percentage |
| Response | responseTimeAvg |
Mean response time, in milliseconds |
| Response | responseTimeP90 |
90th percentile response time |
| Response | responseTimeP95 |
95th percentile response time |
| Response | responseTimeP99 |
99th percentile response time |
| Response | responseTimeMax |
Maximum response time |
| Response | responseTimeMin |
Minimum response time |
| Browser | browserLcp |
Largest Contentful Paint |
| Browser | browserInp |
Interaction to Next Paint |
| Browser | browserTtfb |
Time to First Byte |
| Browser | browserCls |
Cumulative Layout Shift |
| Browser | browserFcp |
First Contentful Paint |
| Browser | browserPlt |
Page Load Time |
| Browser | browserNetworkCallsTotal |
Browser network call count |
| System | systemCpuUsage |
Engine CPU usage percentage |
| System | systemMemoryUsage |
Engine memory usage percentage |
Every metric carries the testRunId, loadTestName, region, and executerName dimensions so that you can filter and group results. The executerName dimension uses this exact spelling in the schema, so match it in any query.
Lifecycle events
BrowserStack Load Testing posts lifecycle events to the same schema, so you can align spikes or drops in performance with changes in test state. Use these events as overlays on your AppDynamics dashboard to understand what was happening during a particular time range.
The following lifecycle events are supported:
| Event | When it fires |
|---|---|
lifecycle_queued |
The test is created and waiting to run. |
lifecycle_ready |
Test resources are provisioned and the test is about to start. |
lifecycle_running |
The test transitions from queued to running. |
lifecycle_rampup_started |
The ramp-up phase begins, for ramping load profiles. |
lifecycle_rampdown_started |
The ramp-down phase begins. |
lifecycle_iteration_started |
An iteration begins, for iteration-based load profiles. |
lifecycle_iteration_ended |
An iteration completes. |
lifecycle_completed |
The test reaches a terminal success state. |
lifecycle_passed |
The test passes all configured thresholds. |
lifecycle_failed |
The test reaches a terminal failure state. |
lifecycle_error |
The test errors during execution. |
lifecycle_stopped |
You manually stop the test. |
lifecycle_timedout |
The test exceeds its configured duration. |
Configure AppDynamics from the BrowserStack UI
This is the most common path. Collect the six values from your AppDynamics Controller, then paste them into the BrowserStack Connect form.
- In BrowserStack, go to Load Testing > Projects > Settings > Integrations.
- Under Application Performance Monitoring, find the AppDynamics tile and select Connect.
- Enter your Controller URL, Application Name, API Client Name, API Client Secret, Analytics API Key, and AppDynamics Region.
- Select Save. BrowserStack runs a short health check and shows a green Connected badge when all six values are valid. If a field is wrong, BrowserStack shows an inline error so that you can correct it.
Configure AppDynamics from the CLI
You configure the AppDynamics integration in the browserstack-load.yml file. The following example enables AppDynamics and sends metrics and events to your Controller.
This configuration lives under the top-level integrations block in browserstack-load.yml alongside any other APM tools you configure.
Configuration reference
Each field under the connection block maps to a value you collected from your AppDynamics Controller:
- connection.controllerUrl
- The URL of your AppDynamics SaaS Controller, for example
https://yourco.saas.appdynamics.com. - connection.applicationName
- The name of the application in your AppDynamics tenant that you want to correlate the load test against. The name must match exactly, including case.
- connection.apiClientName
- The name of the API client you created in the Controller. Enter the name only, without the
@accountsuffix. Store this in an environment variable, such asAPPDYNAMICS_CLIENT_NAME. - connection.apiClientSecret
- The secret generated when you created the API client. Store this securely in an environment variable, such as
APPDYNAMICS_CLIENT_SECRET. - connection.analyticsApiKey
- The Analytics API key used to publish metrics and events. Store this securely in an environment variable, such as
APPDYNAMICS_ANALYTICS_API_KEY. - connection.region
- The region your Analytics tenant runs in. Valid values are
US,FRA,LON,BOM,SIN, andSYD. - metrics
- Specifies which metrics to send. Use
metrics: allto send every metric, or list specific metric names underselectand assigntagsto each group. - events
- Specifies which lifecycle events to send. Use
events: allto send every event, or list specific event names underselect.
Best practices:
- Store the API client secret and Analytics API key in environment variables instead of hard-coding them in the YAML file.
- Verify that your Analytics API key has the Manage Schema and Publish Custom Events permissions.
- Match the region to the AppDynamics tenant where you want to receive load-test data.
Verify the integration
After your next test run completes:
- In BrowserStack, open the test run’s detail page.
- Select APM Tools in the side panel.
- In the AppDynamics card, select Open in AppDynamics.
- Your AppDynamics dashboard for this load test opens in a new tab, populated with metrics and events from the run.
Troubleshooting
If the integration fails to save or no data appears in AppDynamics, use the following table to resolve common issues:
| Symptom | Likely cause | Fix |
|---|---|---|
| Save fails with OAuth token exchange failed | The API client name or secret is wrong, or the client was deleted. | Recheck the API client in Administration > API Clients, recreate it if needed, and regenerate the secret. |
| Save fails with API Client lacks dashboard permissions | The API client role cannot create or update dashboards. | Assign the Account Owner role, or a custom role with dashboard create and update permission. |
| Save fails with Application not found | The application name does not match an application in your tenant. | Copy the name exactly from the application picker, including case, and paste it as-is. |
| Save fails with Analytics API key invalid | The Analytics API key is wrong or missing required permissions. | Confirm the key exists and has the Can Manage Schema and Can Publish all Custom Analytics Events permissions. |
| Save fails with Analytics endpoint unreachable from this region | The selected region does not match your Analytics tenant. | Select the region that matches your tenant. If you are unsure, contact your AppDynamics administrator. |
| No metrics appear after a test run | The Analytics API key lacks the Can Manage Schema permission, so the schema was not created. | Enable Can Manage Schema on the key and run the test again. |
| The dashboard is empty | The dashboard was created before metric data arrived. | Refresh the dashboard once. Later runs render automatically. |
Where your credentials are stored
BrowserStack stores your credentials encrypted at rest. The Load Testing service never sees the raw API client secret or Analytics API key, and credentials are sent to AppDynamics only. To revoke access, select Disconnect on the AppDynamics tile in Integrations. BrowserStack stops publishing immediately. The dashboard and previously published metrics remain in your AWS account.
Limitations
- BrowserStack supports Splunk AppDynamics SaaS only. The on-premises Controller is not supported. Contact BrowserStack Support if you need on-premises integration.
- The region is a required field. BrowserStack cannot derive it from the Controller URL, so you must select it explicitly.
- Trace correlation with the W3C
traceparentandtracestateheaders is not supported. Dashboard metrics and lifecycle events are unaffected.
Next steps
After you save your changes, run your load test from the CLI or dashboard. When the test completes, open AppDynamics and search for the configured metric names to validate that data is flowing correctly. Then build dashboards and alerts based on the metrics that matter most to your team.
We're sorry to hear that. Please share your feedback so we can do better
Contact our Support team for immediate help while we work on improving our docs.
We're continuously improving our docs. We'd love to know what you liked
We're sorry to hear that. Please share your feedback so we can do better
Contact our Support team for immediate help while we work on improving our docs.
We're continuously improving our docs. We'd love to know what you liked
Thank you for your valuable feedback!