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

如何在GitLab中通过多Job并行运行Vitest测试

GitLab CI 实现 Vitest 并行测试与 Cobertura 覆盖率报告

核心方案

利用GitLab CI的并行Job特性,结合Vitest内置的测试分片功能,将800+测试用例拆分到多个并行Job中执行,最后合并各Job生成的覆盖率文件,输出符合GitLab要求的Cobertura格式报告。

具体实现步骤

1. 配置并行测试Job

在GitLab CI配置中,通过parallel关键字指定并行执行的Job数量(比如4个,可根据测试耗时调整)。每个并行Job会自动获得CI_NODE_INDEX(当前Job序号,从1开始)和CI_NODE_TOTAL(总并行数)两个环境变量,用这两个变量给Vitest指定分片参数。

每个Job执行时,不仅要跑对应分片的测试,还要单独生成该分片的Cobertura覆盖率文件,避免互相覆盖。

2. 合并覆盖率报告

新增一个依赖所有并行测试Job的后续Job,使用cobertura-merge工具将多个分片的覆盖率文件合并成一个完整的报告,最后上传给GitLab展示。

完整的.gitlab-ci.yml示例

stages:
  - test
  - coverage

# 缓存依赖,减少每次Job的安装时间
cache:
  paths:
    - node_modules/

vitest-parallel-tests:
  stage: test
  parallel: 4  # 可根据测试用例规模调整并行数,比如800个用例用4-8个都可以
  script:
    - npm install
    - npx vitest run --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL --coverage --coverage.reporter=cobertura --coverage.reportOnFailure --coverage.outputFile=./coverage/cobertura-${CI_NODE_INDEX}.xml
  artifacts:
    paths:
      - ./coverage/cobertura-${CI_NODE_INDEX}.xml
    expire_in: 1 week  # 临时保存分片覆盖率文件,过期自动清理

merge-coverage-report:
  stage: coverage
  needs: ["vitest-parallel-tests"]  # 等待所有并行测试Job完成
  script:
    - npm install cobertura-merge
    # 自动查找所有分片覆盖率文件并合并
    - npx cobertura-merge -o ./coverage/cobertura-merged.xml $(ls ./coverage/cobertura-*.xml | xargs echo)
  artifacts:
    reports:
      cobertura: ./coverage/cobertura-merged.xml  # 上传合并后的报告给GitLab
    expire_in: 1 month

优化建议

  • 测试分片均匀性:如果发现部分Job耗时明显更长,可给Vitest添加--split-by=filesize参数,按测试文件大小更均匀地拆分用例,命令调整为:npx vitest run --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL --split-by=filesize --coverage ...
  • 并行数调整:建议先从4个并行开始测试,观察各Job耗时,再逐步调整到最优数量,避免并行过多导致GitLab调度开销增加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:31:17