test

Synopsis

Run integration tests.

patrol test

To see all available options and flags, run patrol test --help.

Description

This command is the one use you'll be using most often.

patrol test does the following things:

  1. Builds the app under test (AUT) and the instrumentation app
  2. Installs the AUT and the instrumentation on the selected device
  3. Runs the tests natively, and reports results back in native format.

Under the hood, it calls Gradle (when testing on Android) and xcodebuild (when testing on iOS).

Discussion

By default, patrol test runs all integration tests (files ending with _test.dart located in the integration_test directory).

To run a single test, use --target:

patrol test --target integration_test/login_test.dart

You can use --target more than once to run multiple tests:

patrol test \
  --target integration_test/login_test.dart \
  --target integration_test/app_test.dart

Or alternatively:

patrol test --targets integration_test/login_test.dart,integration_test/app_test.dart

Test files must end with _test.dart. Otherwise the file is not considered a test and is not run.

There's no difference between --target and --targets.

To delay app uninstallation for 5 seconds after the test finishes:

patrol test --target integration_test/app_test.dart --wait 5

Tags

You can use tags to run only tests with specific tags.

First specify tags in your patrol tests:

  patrol(
    'example test with tag',
    tags: ['android'],
    ($) async {
      await createApp($);

      await $(FloatingActionButton).tap();
      expect($(#counterText).text, '1');
    },
  );

  patrol(
    'example test with two tags',
    tags: ['android', 'ios'],
    ($) async {
      await createApp($);

      await $(FloatingActionButton).tap();
      expect($(#counterText).text, '1');
    },
  );

Then you can run tests with the tags you specified:

patrol test --tags android
patrol test --tags=android
patrol test --tags='android||ios'
patrol test --tags='(android || ios)'
patrol test --tags='(android && tablet)'

You can also use --exclude-tags to exclude tests with specific tags:

patrol test --exclude-tags android
patrol test --exclude-tags='(android||ios)'

Under the hood

patrol test basically calls patrol build and then runs the built app binaries. For more info, read docs of patrol build.