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

如何在GitLab中并行运行E2E测试脚本?

实现Cypress E2E在GitLab CI中并行执行的方案

一、解决同一Stage任务串行的核心问题

你当前配置的test1和test2属于同一stage,理论上GitLab CI默认会并行执行,但实际串行大概率是Runner并发数限制:

  • 检查你的GitLab Runner配置文件(config.toml),确保concurrent参数值大于1,比如设置为concurrent = 2或更高(根据可用资源调整)。这个参数控制Runner能同时执行的最大任务数,若为1则所有任务只能串行。

二、优化配置,减少冗余并高效拆分测试用例

1. 复用Build阶段的依赖,避免重复安装

当前每个test任务都执行npm ci,浪费大量时间,建议用缓存共享依赖:

stages:
  - build
  - test

build:
  stage: build
  image: cypress/browsers:node18.12.0-chrome107
  script:
    - npm ci
  # 缓存node_modules,供test阶段拉取使用
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/

test1:
  image: cypress/browsers:node18.12.0-chrome107
  stage: test
  script:
    # 无需重复安装依赖,直接使用缓存内容
    - npm run test-run1
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
    policy: pull # 仅拉取缓存,不上传

test2:
  image: cypress/browsers:node18.12.0-chrome107
  stage: test
  script:
    - npm run test-run2
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
    policy: pull

2. 合理拆分测试用例到两个任务

确保test-run1和test-run2对应不同的测试用例集,比如按业务模块拆分:

  • 在package.json中配置脚本:
{
  "scripts": {
    "test-run1": "cypress run --spec 'cypress/e2e/order/**/*.cy.js'",
    "test-run2": "cypress run --spec 'cypress/e2e/user/**/*.cy.js'"
  }
}

尽量让两个任务的耗时均衡,最大化并行效率。

三、更灵活的方式:用GitLab CI的parallel关键字

无需手动创建多个test任务,直接用parallel自动生成并行任务,结合Cypress的分片功能自动分配用例(Cypress 10+支持):

stages:
  - build
  - test

build:
  stage: build
  image: cypress/browsers:node18.12.0-chrome107
  script:
    - npm ci
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/

test:
  image: cypress/browsers:node18.12.0-chrome107
  stage: test
  parallel: 2 # 生成2个并行执行的任务实例
  script:
    - npm run test-shard
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
    policy: pull

然后在package.json中配置分片执行脚本,利用GitLab环境变量自动拆分用例:

{
  "scripts": {
    "test-shard": "cypress run --shard=${CI_NODE_INDEX}/${CI_NODE_TOTAL}"
  }
}

Cypress会根据CI_NODE_INDEX(当前任务序号)和CI_NODE_TOTAL(总并行数)自动均匀分配测试用例,无需手动拆分。

四、排查其他可能的串行原因

  • 检查test任务是否配置了needs或dependencies,如果依赖同一stage的其他任务,会强制串行执行。
  • 若使用共享Runner,可能是Runner资源不足,需联系管理员调整并发数或申请专属Runner。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:01:33