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

如何在GitLab CI作业中仅重跑失败的自动化测试?

在GitLab CI中重试时仅运行失败的测试用例

当然可以实现,核心思路是在首次测试失败时捕获失败用例清单,重试时读取清单只执行这些失败的测试,结合GitLab CI的作业变量和artifacts特性就能搞定,具体步骤如下:

1. 捕获失败的测试用例清单

首先需要让你的测试框架或脚本在运行失败后,把失败的测试用例标识符(比如测试类名、方法名、测试文件路径)导出到一个文本文件里。不同测试框架的实现方式略有不同:

  • pytest:可以用--last-failed参数自动记录失败用例,也可以自定义脚本提取失败列表,比如:
    # 运行完整测试后,提取失败用例到文件
    pytest --alluredir=reports || pytest --collect-only --tb=no -q --last-failed > failed-tests.txt
    
  • JUnit/TestNG:解析生成的XML测试报告,用脚本提取失败的测试节点,比如用Python或jq工具提取测试名到文件。
  • Cypress:借助cypress-failed-log插件生成失败测试的路径列表,再导出到文件。

2. 配置GitLab CI作业

利用GitLab CI的CI_JOB_RETRY变量(重试作业时该变量值为true),结合artifacts保存失败用例文件,实现重试时只跑失败测试:

regression-tests:
  stage: test
  script:
    - |
      # 判断是否是重试作业,且存在失败用例文件
      if [ "$CI_JOB_RETRY" = "true" ] && [ -f failed-tests.txt ]; then
        # 仅运行失败的测试用例
        ./your-test-runner.sh --run-only failed-tests.txt
      else
        # 首次运行完整测试套件,并导出失败用例到文件
        ./your-test-runner.sh --run-all --export-failed failed-tests.txt
      fi
  artifacts:
    paths:
      - failed-tests.txt
    when: on_failure  # 仅在测试失败时保存该文件
    expire_in: 1h  # 设置过期时间,避免存储冗余

注意事项

  • 确保failed-tests.txt的格式和测试运行脚本的--run-only参数兼容,比如每行一个测试用例的唯一标识符。
  • 如果重试后仍有测试失败,新的失败用例清单会覆盖旧文件,后续重试会自动执行最新的失败用例。
  • 部分测试框架(比如pytest)自带--failed-first参数,可以简化流程,但自定义导出清单的方式更灵活,适配更多场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:37:37