pytest——Mark标记

### pytest Mark 标记

  • [@TOC(pytest Mark 标记)](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [一、Mark 是什么?](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [二、最核心:3 步学会使用 Mark](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [1. 注册标记(必须做,否则报警告)](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [2. 给用例打标记](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [3. 命令行选择运行](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [三、pytest 内置 4 个超级常用 Mark](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [1. @pytest.mark.skip ------ 跳过不跑](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [2. @pytest.mark.skipif ------ 满足条件才跳过](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [3. @pytest.mark.xfail ------ 预期失败](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [4. @pytest.mark.parametrize ------ 数据驱动](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [四、企业真实用法](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [1)按测试类型标记](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [2)按优先级标记](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [3)按模块标记](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [运行示例](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [五、类上面打标记(批量标记)](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [六、常见警告解决(必看)](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))
  • [七、最精简总结(记忆口诀)](#pytest Mark 标记 @[TOC](pytest Mark 标记) 一、Mark 是什么? 二、最核心:3 步学会使用 Mark 1. 注册标记(必须做,否则报警告) 2. 给用例打标记 3. 命令行选择运行 三、pytest 内置 4 个超级常用 Mark 1. @pytest.mark.skip —— 跳过不跑 2. @pytest.mark.skipif —— 满足条件才跳过 3. @pytest.mark.xfail —— 预期失败 4. @pytest.mark.parametrize —— 数据驱动 四、企业真实用法 1)按测试类型标记 2)按优先级标记 3)按模块标记 运行示例 五、类上面打标记(批量标记) 六、常见警告解决(必看) 七、最精简总结(记忆口诀))

一、Mark 是什么?

一句话:
给测试用例打"标签/分组",想跑哪个就跑哪个,灵活控制用例执行。

作用:

  • 分组:冒烟、回归、接口、UI、登录、订单...
  • 跳过:某些用例不想跑
  • 预期失败:知道会错,标记一下
  • 分级:P0、P1、P2 用例

二、最核心:3 步学会使用 Mark

1. 注册标记(必须做,否则报警告)

在项目根目录创建 pytest.ini

ini 复制代码
[pytest]
markers =
    smoke: 冒烟测试
    regression: 回归测试
    interface: 接口测试
    ui: UI测试
    p0: 核心用例
    p1: 重要用例

2. 给用例打标记

python 复制代码
import pytest

# 冒烟用例
@pytest.mark.smoke
def test_login():
    assert 1 == 1

# 回归用例
@pytest.mark.regression
def test_logout():
    assert 1 == 1

# 多个标记同时打
@pytest.mark.smoke
@pytest.mark.p0
def test_pay():
    assert 1 == 1

3. 命令行选择运行

bash 复制代码
# 只跑冒烟
pytest -m smoke

# 跑回归
pytest -m regression

# 跑 冒烟 AND P0
pytest -m "smoke and p0"

# 跑 非冒烟
pytest -m "not smoke"

# 跑 冒烟或回归
pytest -m "smoke or regression"

三、pytest 内置 4 个超级常用 Mark

1. @pytest.mark.skip ------ 跳过不跑

python 复制代码
@pytest.mark.skip(reason="功能未开发完")
def test_add():
    assert 1 + 1 == 2

2. @pytest.mark.skipif ------ 满足条件才跳过

python 复制代码
@pytest.mark.skipif(1==1, reason="条件成立,跳过")
def test_skip_if():
    pass

3. @pytest.mark.xfail ------ 预期失败

知道会失败,但不想让它报错,标记为 XFAIL

python 复制代码
@pytest.mark.xfail(reason="已知bug")
def test_expect_fail():
    assert 1 == 2

4. @pytest.mark.parametrize ------ 数据驱动

python 复制代码
@pytest.mark.parametrize("a,b,expect", [(1,2,3), (2,3,5)])
def test_add(a,b,expect):
    assert a+b == expect

四、企业真实用法

1)按测试类型标记

  • @pytest.mark.interface
  • @pytest.mark.ui
  • @pytest.mark.performance

2)按优先级标记

  • @pytest.mark.p0(核心)
  • @pytest.mark.p1(高频)
  • @pytest.mark.p2(一般)

3)按模块标记

  • @pytest.mark.user
  • @pytest.mark.order
  • @pytest.mark.pay

运行示例

bash 复制代码
# 只跑核心P0用例
pytest -m p0 -v

# 跑接口+冒烟
pytest -m "interface and smoke" -v

# 跑除了UI以外所有用例
pytest -m "not ui" -v

五、类上面打标记(批量标记)

给整个类的所有用例统一打标记

python 复制代码
@pytest.mark.smoke
class TestLogin:
    def test_a(self): pass
    def test_b(self): pass
    def test_c(self): pass

六、常见警告解决(必看)

如果运行出现 PytestUnknownMarkWarning

→ 去 pytest.ini 把标记注册一下即可。


七、最精简总结(记忆口诀)

复制代码
mark就是打标签,
ini文件先注册,
用例加上@标记,
-m 参数选择跑,
skip跳过xfail败,
数据驱动最常用。
相关推荐
蜗牛一步步往上爬12 分钟前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
羲云网络2 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
张张123y2 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
冻柠檬飞冰走茶5 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing035 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
橙橙笔记5 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
雪落漂泊5 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
小小张说故事6 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
波力海苔夹心脆6757 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩7 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常