冒烟测试需用 @pytest.mark.smoke 显式标记函数级用例并注册标记,通过 pytest -m smoke 运行;须满足单例≤2秒、零外部依赖、状态独立,且随业务持续维护标记。

冒烟测试不是 pytest 的内置概念,它只是用 pytest 执行一组轻量、高优先级的测试用例——关键在于怎么选、怎么跑、怎么防漏。
如何标记和筛选冒烟测试用例
pytest 本身不区分“冒烟”或“回归”,靠 @pytest.mark.smoke 这类自定义标记来归类。必须显式标记,否则 pytest 不知道哪些算冒烟项。
- 在测试函数上方加
@pytest.mark.smoke(推荐统一放在conftest.py中注册该标记,避免警告) - 不建议用文件名(如
test_smoke_*.py)做判断——容易误伤,也不利于跨模块组织 - 标记粒度建议到函数级,而非类级;有些方法稳定、有些不稳定,混在一起会降低冒烟有效性
如何只运行冒烟测试
用 -m smoke 是最直接的方式,但要注意默认行为会跳过未标记的测试——哪怕它们逻辑上也该进冒烟集。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 执行命令:
pytest -m smoke - 若想同时运行多个标记(比如 smoke + fast),用
-m "smoke and fast"(注意引号) - 加
--strict-markers可防止拼错标记名(如写成smok)却静默忽略 - 别依赖
pytest.ini里的markers = smoke自动启用——它只做声明,不改变运行逻辑
冒烟测试常被忽略的三个硬约束
冒烟测试失败意味着阻断后续流程,但它本身不能成为质量兜底手段,必须守住边界。
- 单个用例执行时间建议 ≤ 2 秒;超时的应拆出或降级——
--timeout=3可配合pytest-timeout插件强制中断 - 禁止访问外部服务(数据库、HTTP 接口等),一律 mock;否则 CI 环境不稳定会导致冒烟误报
- 不依赖 fixture 的复杂状态链(如
setup_user → setup_order → setup_payment);冒烟用例应尽量独立、可并行
真正难的不是跑起来,而是持续维护哪些算“冒烟”——业务逻辑一变,@pytest.mark.smoke 得同步更新,否则它就只是个装饰。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










