分片
默认情况下,WebdriverIO 会并行运行测试,并努力优化您机器上的 CPU 内核利用率。为了实现更高的并行化,您可以通过在多台机器上同时运行测试来进一步扩展 WebdriverIO 测试执行。我们将此操作模式称为“分片”。
在多台机器之间分片测试
要对测试套件进行分片,请将--shard=x/y
传递到命令行。例如,要将套件分成四个分片,每个分片运行四分之一的测试
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
现在,如果您在不同的计算机上并行运行这些分片,您的测试套件将完成速度提高四倍。
GitHub Actions 示例
GitHub Actions 支持在多个作业之间分片测试,使用jobs.<job_id>.strategy.matrix
选项。matrix 选项将为提供的每个选项的每种可能组合运行一个单独的作业。
以下示例显示了如何配置作业以在四台机器上并行运行测试。您可以在Cucumber Boilerplate项目中找到整个管道设置。
- 首先,我们向作业配置添加一个 matrix 选项,其中 shard 选项包含我们要创建的分片数量。
shard: [1, 2, 3, 4]
将创建四个分片,每个分片都有不同的分片编号。 - 然后,我们使用
--shard ${{ matrix.shard }}/${{ strategy.job-total }}
选项运行 WebdriverIO 测试。这将是每个分片的测试命令。 - 最后,我们将 wdio 日志报告上传到 GitHub Actions 工件。这将在分片失败时使日志可用。
测试管道定义如下
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
这将并行运行所有分片,从而将测试的执行时间缩短 4 倍。
请参阅96d444e
提交,该提交来自Cucumber Boilerplate项目,该项目在其测试管道中引入了分片,这有助于将总执行时间从2:23 分钟
缩短到1:30 分钟
,减少了37% 🎉。