如何配置Windows虚拟机上GitHub Actions的Cypress有序并行测试
解决Cypress测试重复执行并实现精准并行分配的配置修改
要在Windows虚拟机环境下实现90个测试的有序并行(22/22/24分配),同时避免重复执行,你需要修改GitHub Actions配置,通过**矩阵策略(matrix strategy)**预先分配测试集到3台虚拟机。以下是修改后的完整配置:
name: UP Automation regression on: push: branches: [ Alex ] pull_request: branches: [ Alex ] jobs: run-automation-regression-tests: runs-on: windows-latest # 定义3个并行任务,分别对应不同的测试集 strategy: matrix: include: # 第一台虚拟机执行22个测试,替换为你的测试文件路径/匹配规则 - specs: "cypress/e2e/test-group-1/**/*.cy.js" # 第二台虚拟机执行22个测试 - specs: "cypress/e2e/test-group-2/**/*.cy.js" # 第三台虚拟机执行24个测试 - specs: "cypress/e2e/test-group-3/**/*.cy.js" # 最多同时启动3台虚拟机 max-parallel: 3 steps: - run: git config --global url."https://TOKEN".insteadOf https://github.com/ - name: Checkout uses: actions/checkout@v4 with: persist-credentials: false - name: Cypress run uses: cypress-io/github-action@v6 with: browser: electron record: true # 启用Cypress并行模式 parallel: true # 执行当前矩阵分配的测试集 spec: ${{ matrix.specs }} env: CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 统一构建ID,确保测试结果在Cypress Dashboard中归为同一批次 CI_BUILD_ID: ${{ github.sha }}-${{ github.run_id }}
关键修改说明
- 矩阵策略分配测试集:通过
matrix.include定义3个独立任务,每个任务绑定预先划分好的测试文件路径。你需要手动将90个测试分成3组(22/22/24),可以:- 按文件夹分组(比如创建
test-group-1/test-group-2/test-group-3文件夹,放入对应数量的测试文件) - 按文件名匹配(比如测试文件按编号命名,用
specs: "cypress/e2e/test-{01..22}.cy.js"这种glob规则匹配)
- 按文件夹分组(比如创建
- 启用并行执行:设置
parallel: true并配合max-parallel: 3,确保GitHub同时启动3台Windows虚拟机执行任务 - 避免重复执行:每个任务只跑指定的测试集,从根源上避免多机重复执行同一测试
- 统一构建跟踪:设置
CI_BUILD_ID,让Cypress Dashboard将3台机器的测试结果归为同一构建批次,方便查看汇总结果
替代方案(自动分片,非精准数量)
如果不需要严格的22/22/24分配,只想自动均分测试避免重复,可以用Cypress的自动分片功能,无需手动分组:
# 仅修改jobs部分 jobs: run-automation-regression-tests: runs-on: windows-latest strategy: # 启动3个并行任务 matrix: node-version: [18] # 分片索引:0/1/2,对应3台机器 shard: [0,1,2] max-parallel: 3 steps: # ... 其他步骤不变 - name: Cypress run uses: cypress-io/github-action@v6 with: browser: electron record: true parallel: true # 指定分片参数:总分片数3,当前分片索引为matrix.shard command: npx cypress run --shard=${{ matrix.shard }}/3 env: CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
内容的提问来源于stack exchange,提问作者Alexandru Cristian
相关产品推荐
相关产品推荐

