Features

Filter Espresso Test Cases

By default, TestingBot will execute all tests present in the Espresso .apk.

The Espresso test runner (which is usually AndroidJUnitRunner) provides multiple options to filter test cases for execution.

You might want to use these filter options for specific use cases, such as:

  • Run only specific tests for a bugfix.
  • Only run a subset of tests, for quick smoke testing. Instead of waiting on all your Espresso tests.
  • Run specific tests for specific environments (production, staging, ...)

Below you'll find the different filter options that TestingBot and Espresso provide.

  • class: will run all tests in a specific class
  • notClass: will run all tests except the tests in a particular class
  • size: will run a specific test size annotated with SmallTest, MediumTest or LargeTest
  • package: will run all tests in a specific Java package
  • notPackage: will run all tests except the tests in a specific package
  • annotation: will run all tests with a specific annotation
  • notAnnotation: will run all tests except the tests with a specific annotation
  • numShards: filter test run to a shard of all tests, where numShards is an integer greater than 0 and shardIndex is an integer between 0 (inclusive) and numShards

class Filter

To only run Espresso tests for a specific class, you can use the class option.

You can pass a list of fully qualified Java class names. See the example below.

Copy code
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/espresso/:id/run" \
-d '{ "espressoOptions": { "class": ["com.android.app.one", "com.android.app.two"] }, "capabilities":[{"platform":"ANDROID", "version":12, "deviceName":"Pixel 6", "platformName":"Android"}]}' \
-H "Content-Type: application/json"

This call with start an Espresso test Session on the specific device and only run the Espresso tests for the classNames specified.

notClass Filter

Use the notClass option to run all Espresso tests except for the tests in the classes specified with this option.

You can pass a list of fully qualified Java class names. See the example below.

Copy code
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/espresso/:id/run" \
-d '{ "espressoOptions": { "notClass": ["com.android.app.one", "com.android.app.two"] }, "capabilities":[{"platform":"ANDROID", "version":12, "deviceName":"Pixel 6", "platformName":"Android"}]}' \
-H "Content-Type: application/json"

size Filter

The size option allows you to specify which tests you want to run, depending on the annotated size: SmallTest, MediumTest or LargeTest

You can pass an array of sizes, see below for an example.

Copy code
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/espresso/:id/run" \
-d '{ "espressoOptions": { "size": ["small", "medium"] }, "capabilities":[{"platform":"ANDROID", "version":12, "deviceName":"Pixel 6", "platformName":"Android"}]}' \
-H "Content-Type: application/json"

package Filter

The package filter allows you to specify for which package the Espresso tests should run.

You can pass an array of packages, see below for an example.

Copy code
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/espresso/:id/run" \
-d '{ "espressoOptions": { "package": ["com.android.one", "com.android.two"] }, "capabilities":[{"platform":"ANDROID", "version":12, "deviceName":"Pixel 6", "platformName":"Android"}]}' \
-H "Content-Type: application/json"

notPackage Filter

The notPackage filter allows you to indicate that Espresso tests should run for everything except for the packages defined.

You can pass an array of packages, see below for an example.

Copy code
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/espresso/:id/run" \
-d '{ "espressoOptions": { "notPackage": ["com.android.one", "com.android.two"] }, "capabilities":[{"platform":"ANDROID", "version":12, "deviceName":"Pixel 6", "platformName":"Android"}]}' \
-H "Content-Type: application/json"

annotation Filter

The annotation filter will run tests annotated with the field (or fields) you specified.

You can pass an array of annotations, see below for an example.

Copy code
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/espresso/:id/run" \
-d '{ "espressoOptions": { "annotation": ["com.android.foo.MyAnnotation", "com.android.foo.MyAnnotationTwo"] }, "capabilities":[{"platform":"ANDROID", "version":12, "deviceName":"Pixel 6", "platformName":"Android"}]}' \
-H "Content-Type: application/json"

notAnnotation Filter

The notAnnotation filter will run all tests except those annotated with the field (or fields) you specified.

You can pass an array of notAnnotations, see below for an example.

Copy code
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/espresso/:id/run" \
-d '{ "espressoOptions": { "notAnnotation": ["com.android.foo.MyAnnotation", "com.android.foo.MyAnnotationTwo"] }, "capabilities":[{"platform":"ANDROID", "version":12, "deviceName":"Pixel 6", "platformName":"Android"}]}' \
-H "Content-Type: application/json"