Skip to main content

Parallel Testing with App Automate

Parallel Testing is a BrowserStack feature that allows you to run same test or different tests simultaneously across different device and OS version combinations. It will help you to reduce the run time of your test suite, resulting in faster build times and releases.

For example, execution time of a test suite which takes 30 minutes running sequentially can be brought down to as low as 3 minutes by running 10 parallel tests (with the assumption that all your test cases take approximately the same time).

Note: Your App Automate plan needs to have sufficient licenses to be able to run parallel tests. If you trigger more tests than what you subscribed for, they will either be queued or discarded.

In this guide, you will learn how to :

  1. Setup your environment
  2. Upload your app
  3. Configure and run parallel tests
  4. View test execution results
Note: If you have already gone through our Run your first test guide, you can skip to the Configure and run parallel tests section.

1. Setup your environment

  • You will need a BrowserStack username and access_key. If you haven’t created an account yet, sign up for a free trial or purchase a paid plan. After signup, you can obtain your access credentials from account settings
  • Ensure you have Ruby installed on your system. You can download updated Ruby versions from ruby-lang.org
  • Ensure you have Bundler installed on your system. To install Bundler, follow steps outlined in the bundler installation guide
  • You will need access to your Android app (.apk or .aab file) or iOS app (.ipa file)
Note: If you do not have an .apk or .ipa file and are looking to simply try App Automate, you can download and test using our sample Android app or sample iOS app.

2. Upload your app

Upload your Android app (.apk or .aab file) or iOS app (.ipa file) to BrowserStack servers using our REST API. Here is an example cURL request to upload app on App Automate :

curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" \
-X POST "https://api-cloud.browserstack.com/app-automate/upload" \
-F "file=@/path/to/apk/file"
curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" ^
-X POST "https://api-cloud.browserstack.com/app-automate/upload" ^
-F "file=@/path/to/apk/file"

Ensure that @ symbol is prepended to the file path in the above request. A sample response for the above request is shown below:

{
    "app_url" : "bs://j3c874f21852ba57957a3fdc33f47514288c4ba4"
}

Please note the app_url value returned in the API response (bs://j3c874..... in the above example). We will use this value to set the application under test while configuring the test later on.

Note:
  1. App upload will take a few seconds to about a minute depending on the size of your app. Do not interrupt the cURL command until you get the response back.
  2. If you upload an iOS app, we will re-sign the app with our own provisioning profile to be able to install your app on our devices during test execution.

3. Configure and run parallel tests

Setup your project

Clone the Cucumber sample integration code from our GitHub repository :

git clone https://github.com/browserstack/cucumber-ruby-appium-app-browserstack.git

Next, execute the following commands in project’s base directory to install the required dependencies:

# Test an android app
cd android/examples
bundle install

# Test an iOS app
cd ios/examples
bundle install

This will install requisite dependencies including Appium’s Ruby client :

source 'https://rubygems.org'

gem 'appium_lib'
gem 'cucumber'
gem 'rspec'
gem 'rake'
gem 'browserstack-local'
gem 'parallel_tests'
gem 'selenium-cucumber'
gem 'selenium-webdriver'

Configure Appium’s desired capabilities

Desired capabilities are a series of key-value pairs that allow you to configure your Appium tests on BrowserStack. The following capabilities are required :

  • browserstack.user capability : Its used to specify your Browserstack username credential
  • browserstack.key capability : Its used to specify your Browserstack access_key credential
  • app capability : Its used to specify your uploaded app that will be installed on device during test execution. Use the app_url obtained in Upload your App section to set its value.
  • device capability : Its used to specify the BrowserStack device you want to run the test on.

In the Cucumber sample integration code, Appium’s desired capabilities are defined in the parallel.config.yml file located in the examples/run-parallel-tests/config directory. Note the multiple devices listed in browser_caps key to specify the list of devices for parallel test execution.

server: "hub-cloud.browserstack.com"

common_caps:
  "browserstack.user": "YOUR_USERNAME"
  "browserstack.key": "YOUR_ACCESS_KEY"
  "project": "First Cucumber Android Project"
  "build": "Cucumber Android"
  "browserstack.debug": true
  "app" : "bs://<app-id>"

browser_caps:
  -
    "device": "Google Pixel 3"
    "os_version": "9.0"
    "name": "parallel_test_1"
  -
    "device": "Samsung Galaxy S10e"
    "os_version": "9.0"
    "name": "parallel_test_2"
server: "hub-cloud.browserstack.com"

common_caps:
  "browserstack.user": "YOUR_USERNAME"
  "browserstack.key": "YOUR_ACCESS_KEY"
  "project": "First Cucumber iOS Project"
  "build": "Cucumber iOS"
  "browserstack.debug": true
  "app": "bs://<app-id>"

browser_caps:
  -
    "device": "iPhone 11 Pro"
    "os_version": "13"
    "name": "parallel_test_1"
  -
    "device": "iPhone 11 Pro Max"
    "os_version": "13"
    "name": "parallel_test_2"
Note:

Create remote Webdriver

Once you have configured desired capabilities, you can initialize an Appium webdriver to test remotely on BrowserStack. In order to do so, you need to use a remote BrowserStack URL along with your BrowserStack access credentials.

In the Cucumber sample integration code, the remote Webdriver is initialised in the env.rb file located in the examples/run-parallel-tests/features/support directory as shown below :

#...

desired_caps = {
  caps: caps,
  appium_lib: {
    server_url: "https://hub-cloud.browserstack.com/wd/hub"
  }
}

begin
  $appium_driver = Appium::Driver.new(desired_caps, true)
  $driver = $appium_driver.start_driver
rescue Exception => e
  puts e.message
  Process.exit(0)
end

#...

Setup your test-case

This step will help you setup your first test case with Cucumber framework. In the Cucumber sample integration code, we have provided a sample test-case in examples/run-parallel-tests/features directory for BrowserStack’s sample apps. If you are testing your own app, please modify the test case accordingly.

If you are using your own app, modify the following code as per your test case:

Feature: Search in Wikipedia App

Background:
  Given I try to search using Wikipedia App

Scenario: Search for a term
  When I type in "BrowserStack"
  Then I should see results

If you are using your own app, modify the following code as per your test case:

Feature: Verify if displayed text matches entered text

Background:
  Given I try to find Text Button in Sample App

Scenario: Type a term
  When I type in "hello@browserstack.com" in the Text Input field
  Then I should get the entered text in the Text Output field

Run the test

You are ready to run your first Cucumber test on BrowserStack. In the Cucumber sample integration code, switch to examples/ directory, and run the test using command :

# Run using Rake
bundle exec rake parallel

4. View test execution results

You can access the test execution results, and debugging information such as video recording, network and device logs on App Automate dashboard or using our REST APIs.

Need some help?

If you have any queries, please get in touch with us.

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

Is this page helping you?

Yes
No

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!

Talk to an Expert
Talk to an Expert