首页/开发/CI/CD 与发布速查/冒烟验证作为发布门禁
发布策略60 条

冒烟验证作为发布门禁

发布后对关键路径做最小验证:登录、下单、支付等主干流程的自动化断言通过才继续放量;失败即停止并进入回退流程。

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

冒烟验证是什么

冒烟验证是发布门禁里的最小验证集:发布完成后对关键路径(登录、下单、支付等 3-5 条主干流程)跑一组自动断言,全部通过才继续放量或宣布发布成功,失败立即停止并进入回退判断。它与健康检查的区别:健康检查只说明进程与端口活着,冒烟走真实业务路径,能发现「服务活着但业务坏了」;它与回归测试的区别:范围刻意压小、只求快速稳定,不追求功能覆盖。用例要稳定、快速、可重复,结果附到发布记录里作为审计与复盘材料。

基本信息

范围少量关键路径(3-5 条)
执行CI 作业或发布脚本自动运行
判据断言失败即发布失败
记录结果附到发布记录
时点发布后、放量前与切换后

典型使用场景

  • 蓝绿切换后验证新环境:切流量前先在新环境跑冒烟,通过再切。
  • 金丝雀第一批发量后校验:小流量阶段发现问题成本最低。
  • 回滚后反向验证:确认旧版本恢复可用,避免二次事故。
  • 外部拨测:从用户视角定期拨测主干路径,补充内部观测盲区。
  • 多区域发布:逐个区域跑冒烟,未通过的区域停止推进。
  • 发布审计:结果留档记录谁、何时、什么版本、是否通过。

冒烟命令

冒烟命令
set -e  # 任何一步失败即退出
curl -fsS https://web.example.com/healthz  # 进程健康
curl -fsS -X POST https://web.example.com/api/login \
  -d '{"u":"smoke"}' | grep -q token  # 登录主干
curl -fsS https://web.example.com/api/orders/smoke | grep -q ok  # 关键读路径

验证层次对比

层次回答的问题失败动作
健康检查进程活着吗摘流量或重启
冒烟验证主干业务可用吗停止放量、评估回退
回归测试功能都正常吗发布前阻断合入
冒烟用例宁少勿滥:每次发布都跑,超过几分钟就没人愿意等;主干之外的场景交给回归测试。
用例要幂等且自给数据:依赖人工预置数据的冒烟会在夜间与节假日误报,把团队耐心消耗光。
不稳定的冒烟比没有更糟:假警报会训练团队忽视结果;不稳定用例先修复再上岗。

易错点

  • 只查 curl 退出码不看内容:200 也可能是错误页;断言关键字段存在。
  • 冒烟失败不阻断:记录后继续放量,门禁形同虚设;失败必须停止并进入回退判断。
  • 用例依赖顺序与手工数据:换个人或隔天跑就失败;自建数据并保证幂等。
  • 范围膨胀成回归:跑半小时没人等结果;压到主干几条路径内。
  • 冒烟产生真实副作用:误下订单、误发消息污染生产数据;用只读路径或专用标记数据。

数据来源与参考

  • Humble & Farley《Continuous Delivery》(冒烟测试)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌