首页/开发/软件测试速查/pytest 标记(markers)筛选执行
自动化测试66 条

pytest 标记(markers)筛选执行

marker 给用例打标签(smoke、slow、integration 等),用 -m 表达式筛选执行;注册 marker 可避免拼写错误被掩盖,让 CI 按标签拆分任务。

软件测试速查开发更新于 2026-10-13

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 指单用例超过一分钟:评审新增标记时才有依据可循。

易错点

  • 标记拼写错误且未开启严格模式:筛选结果与预期不符却无任何告警。
  • 同名标签在不同仓库含义不同:跨仓库聚合执行结果时口径混乱。
  • xfail 滥用:稳定失败的用例挂着预期失败标记,真实回归信号被稀释。
  • smoke 标签随意扩大:重要检查淹没在长队列里,快速自检名存实亡。
  • 标记替代目录结构:所有分层都堆在标签上,找不到用例所在层级的物理划分。

数据来源与参考

  • pytest 官方文档:How to mark test functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌