To enable the execution of test suites on BrowserStack, the sidi-cli
requires a properly structured browserstack_config.json
file. This configuration file will be read by the CI/CD pipeline to set up test execution. Below is a detailed explanation of the structure and key components of this configuration file.
Below is an example snippet of a browserstack_config.json
file:
{
"key": "default_config_sample",
"title": "Sample config",
"configuration": {
"path_ios": "lib/baseConfigs/wdio.browserstack.ios.conf.js",
"path_android": "lib/baseConfigs/wdio.browserstack.android.conf.js",
"target_branch": "acceptance",
"wait_for_timeout": 100000,
"connection_retry_timeout": 300000,
"connection_retry_count": 5,
"max_instances": 3,
"reports_webhook_url_teams": "https://xxx.webhook.office.com/webhookb2/xxx@xxx/IncomingWebhook/xxx/xxx/xx",
"reports_webhook_url_slack": "https://hooks.slack.com/services/xxx/xxx/xxx",
"execution": [
{
"report_name": "Report team1",
"report_mapping_key": "*team1*",
"specs": "['**/up.e2e.ts','**/down.e2e.ts']"
},
{
"report_name": "Report team2 - feature A",
"report_mapping_key": "*team2*",
"specs": "['**/left.e2e.ts','**/right.e2e.ts']"
},
{
"report_name": "Report team2 - feature B",
"report_mapping_key": "*team2*",
"specs": "['**/left-two-times.e2e.ts','**/right-two-times.e2e.ts']"
}
]
}
}
- Description: A unique identifier for the configuration.
- Purpose: Used by the CI/CD pipeline to select the desired configuration.
- Example:
"key": "acceptance_p1_rules"
- Description: A human-readable title for the configuration.
- Purpose: Used as a descriptive label for logs and reports.
- Example:
"title": "Acceptance P1"
This section contains the details necessary to execute the test suites, including paths, environment configurations, and test-specific settings.
-
key
andtitle
:- General metadata for the configuration file.
- Example:
"key": "default_config_sample", "title": "Sample config"
-
path_ios
andpath_android
:- Paths to the WebDriverIO (WDIO) configuration files for iOS and Android.
- Example:
"path_ios": "lib/baseConfigs/wdio.browserstack.ios.conf.js", "path_android": "lib/baseConfigs/wdio.browserstack.android.conf.js"
-
target_branch
:- The environment name used to fetch the latest builds (e.g.,
acceptance
). - Example:
"target_branch": "acceptance"
- The environment name used to fetch the latest builds (e.g.,
-
wait_for_timeout
:- Maximum time (in milliseconds) to wait for an element.
- Example:
"wait_for_timeout": 100000
-
connection_retry_timeout
:- Time (in milliseconds) to wait for connection retry.
- Example:
"connection_retry_timeout": 300000
-
connection_retry_count
:- Number of connection retry attempts.
- Example:
"connection_retry_count": 5
-
max_instances
:- Maximum number of parallel instances to execute.
- Example:
"max_instances": 3
-
reports_webhook_url_teams
:- The webhook URL to send reports to Microsoft Teams.
- Example:
"reports_webhook_url_teams": "https://xxx.webhook.office.com/webhookb2/xxx@xxx/IncomingWebhook/xxx/xxx/xx"
-
reports_webhook_url_slack
:- The webhook URL to send reports to Slack.
- Example:
"reports_webhook_url_slack": "https://hooks.slack.com/services/xxx/xxx/xxx"
-
config_backward_compatibility
(optional):- Specifies the version of the app the tests are backward compatible with. This allows the current tests to run on another version of the app.
- If not provided, the tests will only target the latest app version.
- Example:
"config_backward_compatibility": "1.0.0"
-
execution
:- An array of test suite configurations.
- Each entry includes:
report_name
: Title for the test report.report_mapping_key
: A pattern to group test cases.specs
: Paths to the test specs to be executed.
- Example:
[ { "report_name": "Report team1", "report_mapping_key": "*team1*", "specs": "['**/up.e2e.ts','**/down.e2e.ts']" }, { "report_name": "Report team2 - feature A", "report_mapping_key": "*team2*", "specs": "['**/left.e2e.ts','**/right.e2e.ts']" }, { "report_name": "Report team2 - feature B", "report_mapping_key": "*team2*", "specs": "['**/left-two-times.e2e.ts','**/right-two-times.e2e.ts']" } ]
-
Selection by
key
:- CI/CD reads the
browserstack_config.json
file and identifies the requestedkey
.
- CI/CD reads the
-
Extract
title
:- The corresponding
title
is logged for better traceability.
- The corresponding
-
Setup with
configuration
:- Environment Configuration:
- Fetches the AAB/IPA file associated with the specified
target_branch
.
- Fetches the AAB/IPA file associated with the specified
- WDIO Configuration:
- Configures BrowserStack using paths in
path_ios
andpath_android
.
- Configures BrowserStack using paths in
- Specs Execution:
- Executes the test specs listed under the
specs
key in eachexecution
object.
- Executes the test specs listed under the
- Environment Configuration:
The path_ios
and path_android
files define WebDriverIO configurations for BrowserStack. You can create as many configuration files as needed to support different use cases, such as running tests on multiple devices, platforms, or environments simultaneously.
Below is an example of an iOS WDIO configuration file:
const { commonBaseConfig } = require("./wdio.common.conf");
exports.config = {
...commonBaseConfig,
specs: process.env.E2E_SPECS_PATTERN,
capabilities: [
{
"bstack:options": {
projectName: process.env.PROJECT_NAME,
buildName: `${process.env.BUILD_BRANCH} (${process.env.BUILD_NUMBER})`,
appiumVersion: process.env.APPIUM_VERSION,
video: true,
},
platformName: "iOS",
"appium:platformVersion": "16.0",
"appium:deviceName": "iPhone 14 Pro Max",
},
{
"bstack:options": {
projectName: process.env.PROJECT_NAME,
buildName: `${process.env.BUILD_BRANCH} (${process.env.BUILD_NUMBER})`,
appiumVersion: process.env.APPIUM_VERSION,
video: true,
},
platformName: "iOS",
"appium:platformVersion": "15.0",
"appium:deviceName": "iPhone 13",
}
],
};
You can create separate configurations or define multiple capabilities
in a single file for testing on various devices simultaneously. For instance, you may wish to test on:
- Different iOS devices (e.g., iPhone 14 Pro Max, iPhone 13).
- Different Android devices (e.g., Samsung Galaxy S23, Google Pixel 7).
This flexibility allows you to adapt your test execution setup to your project’s requirements effectively.