pytest 标记是什么
marker 给用例打标签(smoke、slow、integration 等),用 -m 表达式筛选执行:本地跑冒烟、CI 拆慢用例、按层分任务都靠它。标记要先在配置里注册,拼错的标记才不会悄悄失效;配合 --strict-markers,未注册的标记直接报错。内置的 skip、skipif、xfail 也是标记家族的常用成员。
基本信息
| 注册方式 | pytest.ini / pyproject.toml 的 markers 项声明用途 |
|---|---|
| 筛选语法 | -m '表达式',支持 and、or、not 组合 |
| 常见标签 | smoke 冒烟、slow 慢用例、integration 集成层 |
| 内置标记 | skip 跳过、skipif 条件跳过、xfail 预期失败 |
| 严格模式 | --strict-markers 把未注册标记升级为报错 |
| 与参数化配合 | 标记可挂在个别参数组合上,精确控制执行 |
筛选与注册
筛选与注册
pytest -m "smoke and not slow" # 冒烟里排除慢用例
pytest -m integration --ignore=tests/legacy # 只跑集成层
pytest --strict-markers # 未注册标记直接报错配置
配置
[pytest]
markers =
smoke: 冒烟用例集合
slow: 执行较慢的用例
integration: 集成层用例典型使用场景
- CI 分层执行:合并前跑 smoke,夜间跑全量并含 slow。
- 本地快速自检:开发只跑受影响模块的 smoke 标记用例。
- 环境区分:标记需要真实外部依赖的用例,在无网环境排除。
- 缺陷定位:把可疑区域用例批量打临时标签,聚焦排查。
- 预期失败管理:xfail 记录已知问题,修复后转正。
- 测试计划映射:标签与测试计划条目对应,执行有据可查。
- 并发拆分:按标签把用例分片到多台执行机,压缩全量回归时长。
内置标记也常用:skip、skipif、xfail;--strict-markers 可把未注册标记升级为错误。
标签集合保持精简:十几个含义重叠的标签会让人在筛选时反复试错,先定标准再扩标签。
xfail 要写原因与跟踪链接:没有解除条件的 xfail 会随着时间沉淀成隐性欠账。
筛选表达式统一写在配置文件或脚本里:本地与 CI 用同一套语义,排查「为什么两边跑的数量不一样」时少一个变量。
为标签写清阈值定义,例如 smoke 指十分钟内必须跑完的检查、slow 指单用例超过一分钟:评审新增标记时才有依据可循。