Run Tests Concurrently

TestCafe can execute tests concurrently to cut test suite execution time. In concurrent mode, TestCafe invokes multiple instances of each browser, and divides the test workload between these instances.

Enable Concurrency

CLI

The -c (--concurrency) command line option enables concurrent test execution.

The concurrency factor applies to each of the browsers in your browser list.

The following command invokes three Chrome instances and three Firefox instances (six browser instances in total):

testcafe chrome, firefox test.js  --concurrency 3

Runner

The runner.concurrency API method enables concurrent test execution.

The concurrency factor applies to each of the browsers in your browser list.

The following command invokes three Chrome instances and three Firefox instances (six browser instances in total):

var testRunPromise = runner
    .src('tests/test.js')
    .browsers('chrome, firefox')
    .concurrency(3)
    .run();

Configuration file

You can enable concurrent test execution with the concurrency configuration file property.

Limitations

  • Microsoft Edge Legacy does not support concurrent test execution.

  • TestCafe opens the specified number of browser instances regardless of the number of tests in the test suite. Idle browser instances remain open. For example, if you specify the --concurrency 3 CLI flag for a fixture with 2 tests, TestCafe launches three browsers. Two browser instances run two tests. The third instance remains open in standby mode.

  • If an uncaught error or unhandled promise rejection occurs during test execution, all concurrently running tests fail.

Concurrency and Hooks

TestCafe executes before fixture hooks and run hooks before the beginning of the first test. The after fixture and run hooks are executed after the final test in that fixture (or run) ends.

TestCafe does not start a new fixture until after it completes the last after hook.

Use Concurrency on Remote Devices

If you run tests on remote devices, create browser connections for each instance of each browser you test against. The total number of instances is c*n, where c is the concurrency factor and n is the number of browsers.

In the command line interface, specify the number of browser instances after the remote: keyword. For example, use -c 2 remote:6 to run tests in Chrome, Firefox, and Edge, with two instances of each browser. If you use the API, create a browser connection for each instance in code.

Launch all the required browser instances manually on a remote device. The total number of instances should be divisible by the concurrency factor c. Otherwise, an exception is thrown.

testcafe -c 2 remote:4 tests/test.js

If you test against multiple remote browsers, open and connect all instances of one browser before you connect the next browser.