* New translations docker.md (German) * New translations docker.md (Italian) * New translations docker.md (Japanese) * New translations docker.md (Polish) * New translations docker.md (Portuguese) * New translations docker.md (Russian) * New translations docker.md (Ukrainian) * New translations docker.md (Chinese Simplified) * New translations docker.md (Persian) * New translations docker.md (Tamil) * New translations docker.md (Hindi) * New translations boilerplateprojects.md (Belarusian) * New translations boilerplateprojects.md (Portuguese) * New translations customreporter.md (Belarusian) * New translations customreporter.md (Portuguese) * New translations proxy.md (French) * New translations configuration.md (Spanish) * New translations proxy.md (Spanish) * New translations proxy.md (Arabic) * New translations cloudservices.md (Belarusian) * New translations configuration.md (Belarusian) * New translations proxy.md (Belarusian) * New translations proxy.md (Bulgarian) * New translations configuration.md (German) * New translations proxy.md (German) * New translations proxy.md (Italian) * New translations proxy.md (Japanese) * New translations proxy.md (Polish) * New translations cloudservices.md (Portuguese) * New translations configuration.md (Portuguese) * New translations proxy.md (Portuguese) * New translations proxy.md (Russian) * New translations proxy.md (Ukrainian) * New translations proxy.md (Chinese Simplified) * New translations proxy.md (Persian) * New translations proxy.md (Tamil) * New translations configuration.md (Hindi) * New translations proxy.md (Hindi) * New translations setuptypes.md (French) * New translations setuptypes.md (Spanish) * New translations setuptypes.md (Arabic) * New translations setuptypes.md (Belarusian) * New translations setuptypes.md (Bulgarian) * New translations setuptypes.md (German) * New translations setuptypes.md (Italian) * New translations setuptypes.md (Japanese) * New translations setuptypes.md (Polish) * New translations setuptypes.md (Portuguese) * New translations setuptypes.md (Russian) * New translations setuptypes.md (Ukrainian) * New translations setuptypes.md (Chinese Simplified) * New translations setuptypes.md (Persian) * New translations setuptypes.md (Tamil) * New translations setuptypes.md (Hindi) * New translations appium.md (French) * New translations appium.md (Belarusian) * New translations appium.md (German) * New translations appium.md (Japanese) * New translations appium.md (Portuguese) * New translations appium.md (Ukrainian) * New translations appium.md (Tamil) * New translations browser.md (French) * New translations browser.md (Spanish) * New translations browser.md (Arabic) * New translations browser.md (Belarusian) * New translations browser.md (Bulgarian) * New translations browser.md (German) * New translations browser.md (Italian) * New translations browser.md (Japanese) * New translations browser.md (Polish) * New translations browser.md (Portuguese) * New translations browser.md (Russian) * New translations browser.md (Ukrainian) * New translations browser.md (Chinese Simplified) * New translations browser.md (Persian) * New translations browser.md (Tamil) * New translations browser.md (Hindi) * New translations protocols.md (French) * New translations vue.md (French) * New translations protocols.md (Spanish) * New translations vue.md (Spanish) * New translations protocols.md (Arabic) * New translations vue.md (Arabic) * New translations frameworks.md (Belarusian) * New translations protocols.md (Belarusian) * New translations vue.md (Belarusian) * New translations protocols.md (Bulgarian) * New translations vue.md (Bulgarian) * New translations protocols.md (German) * New translations vue.md (German) * New translations protocols.md (Italian) * New translations vue.md (Italian) * New translations protocols.md (Japanese) * New translations vue.md (Japanese) * New translations protocols.md (Polish) * New translations vue.md (Polish) * New translations frameworks.md (Portuguese) * New translations protocols.md (Portuguese) * New translations vue.md (Portuguese) * New translations protocols.md (Russian) * New translations vue.md (Russian) * New translations protocols.md (Ukrainian) * New translations vue.md (Ukrainian) * New translations protocols.md (Chinese Simplified) * New translations vue.md (Chinese Simplified) * New translations protocols.md (Persian) * New translations vue.md (Persian) * New translations protocols.md (Tamil) * New translations vue.md (Tamil) * New translations protocols.md (Hindi) * New translations vue.md (Hindi) * New translations customreporter.md (Belarusian) * New translations customreporter.md (Portuguese) * New translations configuration.md (Belarusian) * New translations configuration.md (Portuguese) * New translations sharding.md (French) * New translations sharding.md (Spanish) * New translations sharding.md (Arabic) * New translations vscodeextension.md (Belarusian) * New translations sharding.md (Belarusian) * New translations sharding.md (Bulgarian) * New translations sharding.md (German) * New translations sharding.md (Italian) * New translations sharding.md (Japanese) * New translations sharding.md (Polish) * New translations vscodeextension.md (Portuguese) * New translations sharding.md (Portuguese) * New translations sharding.md (Russian) * New translations sharding.md (Ukrainian) * New translations sharding.md (Chinese Simplified) * New translations sharding.md (Persian) * New translations sharding.md (Tamil) * New translations sharding.md (Hindi) * New translations code.json (Portuguese, Brazilian) * New translations options.json (Portuguese, Brazilian) * New translations current.json (Portuguese, Brazilian) * New translations current.json (Portuguese, Brazilian) * New translations footer.json (Portuguese, Brazilian) * New translations navbar.json (Portuguese, Brazilian) * New translations api.md (Portuguese, Brazilian) * New translations axecore.md (Portuguese, Brazilian) * New translations autowait.md (Portuguese, Brazilian) * New translations autocompletion.md (Portuguese, Brazilian) * New translations automationprotocols.md (Portuguese, Brazilian) * New translations watchfiles.md (Portuguese, Brazilian) * New translations whywebdriverio.md (Portuguese, Brazilian) * New translations browser.md (Portuguese, Brazilian) * New translations createlocalworkerprocess.md (Portuguese, Brazilian) * New translations donate.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations openofficehours.md (Portuguese, Brazilian) * New translations support.md (Portuguese, Brazilian) * New translations team.md (Portuguese, Brazilian) * New translations appium.md (Portuguese, Brazilian) * New translations emulation.md (Portuguese, Brazilian) * New translations visualtesting.md (Portuguese, Brazilian) * New translations method-options.md (Portuguese, Brazilian) * New translations methods.md (Portuguese, Brazilian) * New translations writing-tests.md (Portuguese, Brazilian) * New translations snapshot.md (Portuguese, Brazilian) * New translations filedownloads.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations percy-overview.md (Portuguese, Brazilian) * New translations integrate-with-app-percy.md (Portuguese, Brazilian) * New translations integrate-with-percy.md (Portuguese, Brazilian) * New translations browserstack.md (Portuguese, Brazilian) * New translations clock.md (Portuguese, Brazilian) * New translations argos.md (Portuguese, Brazilian) * New translations seleniumgrid.md (Portuguese, Brazilian) * New translations browserlogs.md (Portuguese, Brazilian) * New translations axecore.md (Portuguese, Brazilian) * New translations donate.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations openofficehours.md (Portuguese, Brazilian) * New translations support.md (Portuguese, Brazilian) * New translations team.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations browserstack.md (Portuguese, Brazilian) * New translations browser.md (Portuguese, Brazilian) * New translations element.md (Portuguese, Brazilian) * New translations environment.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations clock.md (Portuguese, Brazilian) * New translations dialog.md (Portuguese, Brazilian) * New translations globals.md (Portuguese, Brazilian) * New translations axecore.md (Portuguese, Brazilian) * New translations browser.md (Portuguese, Brazilian) * New translations element.md (Portuguese, Brazilian) * New translations globals.md (Portuguese, Brazilian) * New translations mock.md (Portuguese, Brazilian) * New translations modules.md (Portuguese, Brazilian) * New translations protocols.md (Portuguese, Brazilian) * New translations lit.md (Portuguese, Brazilian) * New translations preact.md (Portuguese, Brazilian) * New translations react.md (Portuguese, Brazilian) * New translations solid.md (Portuguese, Brazilian) * New translations svelte.md (Portuguese, Brazilian) * New translations vue.md (Portuguese, Brazilian) * New translations coverage.md (Portuguese, Brazilian) * New translations mocking.md (Portuguese, Brazilian) * New translations donate.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations openofficehours.md (Portuguese, Brazilian) * New translations support.md (Portuguese, Brazilian) * New translations team.md (Portuguese, Brazilian) * New translations stencil.md (Portuguese, Brazilian) * New translations filedownloads.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations browserstack.md (Portuguese, Brazilian) * New translations clock.md (Portuguese, Brazilian) * New translations dialog.md (Portuguese, Brazilian) * New translations mobile.md (Portuguese, Brazilian) * New translations browserlogs.md (Portuguese, Brazilian) * New translations createlocalworkerprocess.md (Portuguese, Brazilian) * New translations highleveloverview.md (Portuguese, Brazilian) * New translations testexecution.md (Portuguese, Brazilian) * New translations wdiocommands.md (Portuguese, Brazilian) * New translations webextension.md (Portuguese, Brazilian) * New translations vscodeextension.md (Portuguese, Brazilian) * New translations electron.md (Portuguese, Brazilian) * New translations macos.md (Portuguese, Brazilian) * New translations windows.md (Portuguese, Brazilian) * New translations cli-wizard.md (Portuguese, Brazilian) * New translations getting-started.md (Portuguese, Brazilian) * New translations more-test-optimization.md (Portuguese, Brazilian) * New translations ocr-click-on-text.md (Portuguese, Brazilian) * New translations ocr-click-on-text.md (Portuguese, Brazilian) * New translations ocr-faq.md (Portuguese, Brazilian) * New translations ocr-get-element-position-by-text.md (Portuguese, Brazilian) * New translations ocr-get-text.md (Portuguese, Brazilian) * New translations ocr-set-value.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations considerations.md (Portuguese, Brazilian) * New translations compare-options.md (Portuguese, Brazilian) * New translations faq.md (Portuguese, Brazilian) * New translations integrate-with-app-percy.md (Portuguese, Brazilian) * New translations ocr-wait-for-text-displayed.md (Portuguese, Brazilian) * New translations what-is-wdio-ocr-service.md (Portuguese, Brazilian) * New translations argos.md (Portuguese, Brazilian) * New translations integrate-with-percy.md (Portuguese, Brazilian) * New translations method-options.md (Portuguese, Brazilian) * New translations whywebdriverio.md (Portuguese, Brazilian) * New translations api.md (Portuguese, Brazilian) * New translations frameworks.md (Portuguese, Brazilian) * New translations gettingstarted.md (Portuguese, Brazilian) * New translations selectors.md (Portuguese, Brazilian) * New translations sponsor.md (Portuguese, Brazilian) * update: translate doc to pt-br (#14388) * New translations configuration.md (Portuguese, Brazilian) * more german translations --------- Co-authored-by: Lucas Barbosa <29305833+lucasbarbosaz@users.noreply.github.com>
3.3 KiB
| id | title |
|---|---|
| sharding | Sharding |
By default, WebdriverIO runs tests in parallel and strives for optimal utilization of CPU cores on your machine. In order to achieve even greater parallelisation, you can further scale WebdriverIO test execution by running tests on multiple machines simultaneously. We call this mode of operation "sharding".
Sharding tests between multiple machines
To shard the test suite, pass --shard=x/y to the command line. For example, to split the suite into four shards, each running one fourth of the tests:
npx wdio run wdio.conf.js --shard=1/4
npx wdio run wdio.conf.js --shard=2/4
npx wdio run wdio.conf.js --shard=3/4
npx wdio run wdio.conf.js --shard=4/4
Now, if you run these shards in parallel on different computers, your test suite completes four times faster.
GitHub Actions example
GitHub Actions supports sharding tests between multiple jobs using the jobs.<job_id>.strategy.matrix option. The matrix option will run a separate job for every possible combination of the provided options.
The following example shows you how to configure a job to run your tests on four machines in parallel. You can find the whole pipeline setup in the Cucumber Boilerplate project.
- First we add a matrix option to our job configuration with the shard option containing the number of shards we want to create.
shard: [1, 2, 3, 4]will create four shards, each with a different shard number. - Then we run our WebdriverIO tests with the
--shard ${{ matrix.shard }}/${{ strategy.job-total }}option. This will be our test command for each shard. - Finally we upload our wdio log report to the GitHub Actions Artifacts. This will make logs available in case the shard fails.
The test pipeline is defined as follows:
name: Test
on: [push, pull_request]
jobs:
lint:
# ...
unit:
# ...
e2e:
name: 🧪 Test (${{ matrix.shard }}/${{ strategy.job-total }})
runs-on: ubuntu-latest
needs: [lint, unit]
strategy:
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/actions/setup
- name: E2E Test
run: npm run test:features -- --shard ${{ matrix.shard }}/${{ strategy.job-total }}
- uses: actions/upload-artifact@v1
if: failure()
with:
name: logs-${{ matrix.shard }}
path: logs
This will run all shards in parallel, reducing executing time for the tests by 4:
See commit 96d444e from the Cucumber Boilerplate project that introduced sharding to its test pipeline which helped reduce the overall execution time from 2:23 min down to 1:30 min, a reduction of 37% 🎉.
