pytest文档74-参数化parametrize加marks标记(pytest.param)
前言
pytest 使用 parametrize 参数化的时候,有多组测试数据,需要对其中的一些测试数据加标记跳过,可以用pytest.param实现。
pytest.param
先看下 pytest.param 源码,可以传三个参数
- param values :按顺序传参数集值的变量args
- keyword marks : marks关键字参数,要应用于此参数集的单个标记或标记列表。
- keyword str id: id字符串关键字参数,测试用例的id属性
def param(*values, **kw):
"""Specify a parameter in `pytest.mark.parametrize`_ calls or
:ref:`parametrized fixtures <fixture-parametrize-marks>`.
.. code-block:: python
@pytest.mark.parametrize("test_input,expected", [
("3+5", 8),
pytest.param("6*9", 42, marks=pytest.mark.xfail),
])
def test_eval(test_input, expected):
assert eval(test_input) == expected
:param values: variable args of the values of the parameter set, in order.
:keyword marks: a single mark or a list of marks to be applied to this parameter set.
:keyword str id: the id to attribute to this parameter set.
"""
return ParameterSet.param(*values, **kw)
使用示例
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
@pytest.mark.parametrize("test_input,expected", [
("3+5", 8),
pytest.param("6*9", 42, marks=pytest.mark.xfail),
])
def test_eval(test_input, expected):
assert eval(test_input) == expected
运行结果:1 passed, 1 xfailed in 0.08 seconds
skip跳过用例
上面的案例是标记xfail,想标记skip跳过用例也是可以的
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
@pytest.mark.parametrize("user,psw",
[("yoyo1", "123456"),
("yoyo2", "123456"),
pytest.param("yoyo3", "123456", marks=pytest.mark.skip)])
def test_login(user, psw):
print(user + " : " + psw)
assert 1 == 1
运行结果:2 passed, 1 skipped in 0.03 seconds
上面的2个参数也可以用pytest.param格式
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
@pytest.mark.parametrize("user,psw",
[pytest.param("yoyo1", "123456"),
pytest.param("yoyo2", "123456"),
pytest.param("yoyo3", "123456", marks=pytest.mark.skip)])
def test_login1(user, psw):
print(user + " : " + psw)
assert 1 == 1
id参数
id参数是给用例添加标题内容,没加id参数的时候,用例会默认拿请求的参数当用例标题
添加id参数
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
@pytest.mark.parametrize("user,psw",
[pytest.param("yoyo1", "123456", id="test case1: yoyo1"),
pytest.param("yoyo2", "123456", id="test case2: yoyo2"),
pytest.param("yoyo3", "123456", marks=pytest.mark.skip, id="test case3: yoyo3")])
def test_login1(user, psw):
print(user + " : " + psw)
assert 1 == 1
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-01-04 Linux学习8-CentOS部署自己本地的django项目
2019-01-04 关于面试总结12-接口自动化面试题