You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab Runner中并行运行Cypress测试(无需Cypress Dashboard)

仅用Cypress + GitLab实现E2E测试并行运行方案

核心思路

借助Cypress的测试分片能力,结合GitLab CI的并行作业机制,将180个测试用例拆分到多个Runner节点同时执行,完全不依赖Cypress Dashboard的配额限制。

具体实现步骤

1. 基于Cypress原生分片的并行配置

在.gitlab-ci.yml中定义并行作业,利用Cypress内置的分片逻辑自动分配测试用例:

e2e-tests:
  stage: test
  image: cypress/browsers:node18.12.0-chrome107-ff106
  parallel: 4  # 根据Runner资源设置并行数,比如4个
  script:
    - npm install
    - npx cypress run --parallel --ci-build-id $CI_PIPELINE_ID
  artifacts:
    paths:
      - cypress/screenshots/
      - cypress/videos/
    when: always
  cache:
    paths:
      - node_modules/

关键参数说明:

  • parallel: 4:让GitLab启动指定数量的并行作业实例
  • --parallel:触发Cypress的分片模式,自动分配测试用例
  • $CI_PIPELINE_ID:用GitLab流水线ID作为唯一标识,确保分片属于同一次测试运行

2. 纯手动分片方案(完全脱离Cypress Dashboard)

如果不想使用Cypress的记录功能,可通过GitLab提供的环境变量手动分配测试文件:

e2e-tests:
  stage: test
  image: cypress/browsers:node18.12.0-chrome107-ff106
  parallel: 4
  script:
    - npm install
    - # 根据作业索引计算要执行的测试文件
    - TEST_FILES=$(node -e "
        const fs = require('fs');
        const testFiles = fs.readdirSync('cypress/e2e').filter(f => f.endsWith('.cy.js'));
        const index = $CI_NODE_INDEX;
        const totalJobs = $CI_NODE_TOTAL;
        const chunkSize = Math.ceil(testFiles.length / totalJobs);
        const start = index * chunkSize;
        const targetFiles = testFiles.slice(start, start + chunkSize).map(f => \`cypress/e2e/\${f}\`);
        console.log(targetFiles.join(' '));
      ")
    - npx cypress run --spec "$TEST_FILES"
  artifacts:
    paths:
      - cypress/screenshots/
      - cypress/videos/
    when: always
  cache:
    paths:
      - node_modules/

这里利用$CI_NODE_INDEX(当前作业的索引,从0开始)和$CI_NODE_TOTAL(总并行作业数),直接将测试文件平均分配到不同作业中,无需任何外部服务。

3. GitLab Runner常见错误排查

针对你遇到的运行错误,优先检查以下几点:

  • Runner资源不足:每个执行E2E测试的Runner至少分配2核CPU、4GB内存,避免因资源耗尽导致崩溃
  • 测试路径错误:确认cypress/e2e下的测试文件后缀、路径符合预期,避免找不到用例
  • 依赖安装失败:通过缓存node_modules提升安装速度,同时检查镜像源是否稳定

4. 优化建议

  • 根据测试耗时调整分片数:如果存在大体积测试用例,先拆分为小用例,再调整并行数保证负载均匀
  • 给Runner打标签:指定性能较好的Runner执行E2E测试,避免与其他轻量任务抢占资源

内容的提问来源于stack exchange,提问作者Tirath Sojitra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:15:31