Sharding
Som standard kör WebdriverIO tester parallellt och strävar efter optimal användning av CPU-kärnor på din maskin. För att uppnå ännu större parallellisering kan du ytterligare skala WebdriverIO-testkörning genom att köra tester på flera maskiner samtidigt. Vi kallar detta driftsläge för "sharding".
Sharding av tester mellan flera maskiner
För att dela upp test-sviten, skicka med --shard=x/y
till kommandoraden. Till exempel, för att dela upp sviten i fyra delar, där varje del kör en fjärdedel av testerna:
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
Om du kör dessa delar parallellt på olika datorer, slutförs din test-svit fyra gånger snabbare.
GitHub Actions exempel
GitHub Actions stöder sharding av tester mellan flera jobb med alternativet jobs.<job_id>.strategy.matrix
. Matrix-alternativet kommer att köra ett separat jobb för varje möjlig kombination av de angivna alternativen.
Följande exempel visar hur du konfigurerar ett jobb för att köra dina tester på fyra maskiner parallellt. Du kan hitta hela pipeline-konfigurationen i projektet Cucumber Boilerplate.
- Först lägger vi till ett matrix-alternativ i vår jobbkonfiguration med shard-alternativet som innehåller antalet delar vi vill skapa.
shard: [1, 2, 3, 4]
kommer att skapa fyra delar, var och en med ett annat shard-nummer. - Sedan kör vi våra WebdriverIO-tester med alternativet
--shard ${{ matrix.shard }}/${{ strategy.job-total }}
. Detta blir vårt testkommando för varje del. - Slutligen laddar vi upp vår wdio-loggrapport till GitHub Actions Artifacts. Detta gör loggar tillgängliga om en del misslyckas.
Testpipelinen definieras enligt följande:
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
Detta kommer att köra alla delar parallellt, vilket minskar körtiden för testerna med 4:
Se commit 96d444e
från projektet Cucumber Boilerplate som introducerade sharding till sin testpipeline, vilket hjälpte till att minska den totala körtiden från 2:23 min
till 1:30 min
, en minskning med 37% 🎉.