学习笔记

什么是冒烟测试

当我在借助AI开发小程序的时候,AI会自动帮我进行冒烟测试,但我对测试领域并不是很了解,以及有哪些测试,各种测试是怎样工作的,有哪些功能。

“冒烟测试”这个名字其实很容易让人困惑。后来真正放到软件开发流程里理解,就会发现它并不复杂:冒烟测试就是在开始完整测试之前,先快速检查系统最核心的功能是否还能正常工作。

它解决的不是“系统有没有 Bug”这个大问题,而是先判断一个更基础的问题:

这个版本是否已经具备继续测试的条件?

“冒烟测试”来自英文 Smoke Testing。这个说法最早和硬件测试有关,设备组装完成后先通电,如果直接冒烟,显然就没有必要继续做后面的详细测试。软件测试借用了这个概念:新版本部署完成后,先检查几个最重要的功能,如果这些基础功能都无法运行,就先停止后续测试,让开发人员处理问题。

比如一个电商系统,新版本发布到测试环境之后,可以先检查:

1
2
3
4
5
6
7
8
9
网站能够正常打开
↓
用户能够正常登录
↓
商品详情能够正常访问
↓
商品能够加入购物车
↓
订单能够正常提交

如果用户连登录都无法完成,那么继续测试优惠券、订单搜索、退款流程这些功能,其实意义已经不大。先把登录问题解决,再继续完整测试,会节省很多时间。

冒烟测试关注的是核心流程

刚开始学习时,比较容易把冒烟测试理解成“简单测试几个功能”,后来才发现重点其实不在“简单”,而在“核心”。

例如登录功能完整测试时,可能需要检查正确密码、错误密码、空密码、验证码、账号锁定、权限、异常请求等很多情况。但在冒烟测试中,可能只需要确认最基本的正常流程能够跑通:

1
2
3
4
5
正常账号 + 正确密码
↓
点击登录
↓
成功进入系统

如果这条最基本的流程失败,就已经足以说明当前版本存在严重问题。至于错误密码提示是否正确、验证码边界情况是否正常,可以放到后续更加完整的功能测试中继续验证。

因此,冒烟测试通常有几个比较明显的特点:用例数量少、执行速度快、覆盖核心业务流程,而且结果比较明确。 它不会检查每一个细节,更不会代替完整测试。

冒烟测试和完整测试的区别

这一点也是刚开始比较容易混淆的地方。冒烟测试通过,并不代表软件已经没有问题,只能说明最基本的功能暂时没有出现明显故障。

例如支付功能能够正常完成一笔订单,只能证明正常支付主流程可以工作,但网络中断、重复支付、余额不足、支付超时、退款等情况仍然需要后续测试。

整个过程可以简单理解为:

1
2
3
4
5
6
7
8
9
开发完成新版本
↓
部署测试环境
↓
执行冒烟测试
↙ ↘
失败 通过
↓ ↓
返回修复 继续完整测试

这里最大的价值其实是效率。如果一轮完整回归测试需要几个小时,而版本部署后五分钟就能发现登录接口已经不可用,那么提前执行冒烟测试就可以避免大量无效工作。

冒烟测试也很适合自动化

后来接触 CI/CD 流程之后,会发现冒烟测试还有一个很实际的使用场景:自动化检查。

代码合并或者版本部署完成后,可以自动运行一组关键测试,例如:

1
2
3
4
服务能否正常启动
登录接口是否返回成功
核心页面是否可以访问
关键业务流程是否能够完成

这些检查全部通过,再进入后续发布或测试流程;只要核心检查失败,就直接阻止流程继续执行。

这也是冒烟测试非常适合自动化的原因:测试数量不需要很多,但会被频繁执行,而且每次都希望尽快得到结果。

学习到这里之后,对冒烟测试的理解就比较清楚了。它并不是为了尽可能多地发现问题,而是为了尽早发现那些会让整个版本无法继续测试的严重问题。

如果把完整测试看成一次详细体检,那么冒烟测试更像是先检查几个最基本的生命体征。最核心的功能都无法正常工作时,后面的细节暂时没有检查的必要。

所以,冒烟测试可以简单记成一句话:

在投入大量时间做完整测试之前,先快速确认当前版本最核心的功能能够正常运行。

概念本身很简单,但放到实际开发流程里,它可以很早发现严重问题,也能减少不少无效的测试成本。