首页/开发/CI/CD 与发布速查/测试通过门禁与失败策略
质量门禁与回滚51 条

测试通过门禁与失败策略

测试阶段作为发布前置条件:单元与集成测试通过才进入构建与部署;对已知的辅助类作业单独标记允许失败,避免掩盖真实回归。

CI/CD 与发布速查开发更新于 2026-10-13

测试门禁是什么

测试阶段作为发布前置条件:单元与集成测试全部通过,才允许进入构建与部署。对格式检查、可选集成等辅助类作业单独标记「允许失败」,既不阻断主流程,也避免用注释掉断言的方式让流水线假绿。门禁的粒度同样重要:核心用例集必须全绿,长期随机失败的用例要隔离修复,而不是默认放行。

基本信息

阻断规则测试失败即停止后续阶段
允许失败GitLab allow_failure、GitHub continue-on-error,仅用于非阻断项
超时为作业设置 timeout,防止挂起占用并发
重试仅对基础设施类失败配置有限次重试
报告JUnit 格式报告接入平台展示失败用例

典型使用场景

  • 合并前门禁:MR 或 PR 必须测试通过才允许合并。
  • 发布前回归:完整集成测试通过后才触发部署。
  • 分级阻断:核心套件阻断,辅助检查仅提示。
  • 失败定位:JUnit 报告在合并请求里列出失败用例与日志。
  • 超时保护:给测试作业设 timeout 与重试上限。
  • 本地预检:常用套件提交前本地先跑,减少无效流水线轮次。

GitLab:测试门禁与允许失败

GitLab:测试门禁与允许失败
unit-test:
  stage: test
  script: pytest -q
  timeout: 20m

lint-report:
  stage: test
  script: flake8 src || true
  allow_failure: true   # 仅提示:报告问题但不阻断

门禁设计要素

要素建议原因
阻断范围核心测试必须阻断辅助检查允许失败以减少噪声
重试仅限外部依赖失败重试真实回归会掩盖缺陷
超时按历史耗时上浮设置挂起作业拖住并发额度
对测试作业配置自动重试会掩盖真实回归:重试只应用于网络下载、镜像拉取等外部依赖。
门禁结果要可见:失败用例名与日志链接应出现在合并请求页面,供修复时直接定位。
分支保护要把该检查设为必需状态,否则检查失败也拦不住合并。

易错点

  • 全量作业都加允许失败:流水线长期全绿,缺陷进入生产。
  • 测试挂起无超时:占用 Runner 并发直到被人工取消。
  • 重试成功即视为通过:真实缺陷被掩盖,重试次数与原因要可见。
  • 分支保护没把检查设为必需状态:检查失败也能合并,门禁失去约束力。
  • 把用例注释或跳过当修复:门禁形同虚设,覆盖缺口长期扩大。

数据来源与参考

  • GitLab Docs《CI/CD YAML syntax reference》(allow_failure)
  • GitHub Docs《Workflow syntax》(continue-on-error)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌