A powerful tool to run Cypress tests in parallel, optimizing test execution time.
DIR="cypress/e2e" COMMAND="npx run cypress" yarn cy-parallel
-
DIR
: Directory of tests (default:cypress/e2e
). -
COMMAND
: Cypress command (default:npx cypress run
). -
WORKERS
: Number of workers (default:CPU cores
). -
POLL
: Set to true for Polling Mode; otherwise, Weighted Bucketing is used. -
WEIGHT_PER_TEST
: Weight assigned to each test (default:1
). (Only for Weighted Bucketing) -
BASE_WEIGHT
: Base weight value (default:1
). (Only for Weighted Bucketing) -
VERBOSE
: Enable logging forcy-parallel
(default:true
). -
CYPRESS_LOG
: Enable Cypress-specific logging (default:true
).
Feel free to experiment and measure which option is faster in your case. You can use time <your_command>
to measure run durations.
- Weighted Bucketing (default)
(POLL=false)
: Distributes tests evenly on workers. - Polling
(POLL=true)
: Start workers, worker get tests from a test file queue.
- Merging report can be done with mochawesome
- Install dependencies
yarn add -D mochawesome mochawesome-merge mochawesome-report-generator
Example:
- Setup mochawesome in cypress config
import { defineConfig } from 'cypress';
export default defineConfig({
e2e: {
setupNodeEvents(on, config) {
// implement node event listeners here
},
reporter: 'mochawesome',
video: true,
reporterOptions: {
reportDir: 'cypress/reports',
overwrite: false,
json: true,
reportFilename: '[name]-[datetime]',
},
},
});
-
Merge reports
mochawesome-merge cypress/reports/*.json > cypress/reports/merged-report.json
-
generate html report
npx mochawesome-report-generator cypress/reports/merged-report.json -o cypress/reports/merged-html-report
CYPRESS_LOG=false WORKERS=2 POLL=true yarn cy-parallel
- Don't log Cypress logs to stdout
- Only 2 parallel processes (Workers)
- Use POLL mode. 2 workers pulling tests from a queue