跳至主要内容

分片

默认情况下,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 倍。

GitHub Actions example

请参阅96d444e提交,该提交来自Cucumber Boilerplate项目,该项目在其测试管道中引入了分片,这有助于将总执行时间从2:23 分钟缩短到1:30 分钟,减少了37% 🎉。

欢迎!我如何帮助您?

WebdriverIO AI Copilot