### 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败,
数据驱动最常用。