pytest的参数化处理
Posted 永远不要矫情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest的参数化处理相关的知识,希望对你有一定的参考价值。
在pytest中,可以使用参数化测试,即每组参数都独立执行一次测试。使用的是:pytest.mark.parametrize(argnames,argvalues).传入的数据格式可以是:
- 列表
- 元祖
- 字典
1.列表
代码如下:test_01函数会执行两次,因为列表中有两个值。
import pytest
# 列表
data = ['123', '456']
@pytest.mark.parametrize('pwd', data)
def test_01(pwd):
print(pwd)
输出:
============================= test session starts =============================
collecting ... collected 2 items
test_para.py::test_1[123] PASSED [ 50%]123
test_para.py::test_1[456] PASSED [100%]456
============================== 2 passed in 0.02s ==============================
2.元组
代码如下所示,在列表中包含两个元组的值,函数有三个参数,且也会执行两遍。
data2 = [
(1, 2, 3), # 或者[1, 2,3]
(4, 5, 6) # 或者[4, 5,6]
]
@pytest.mark.parametrize('a, b, c', data2)
def test_2(a, b, c):
print(a, b, c)
============================= test session starts =============================
collecting ... collected 2 items
test_para.py::test_2[1-2-3] PASSED [ 50%]1 2 3
test_para.py::test_2[4-5-6] PASSED [100%]4 5 6
============================== 2 passed in 0.02s ==============================
3.字典
# 字典
data3 = (
{
'user': 1,
'pwd': 2
},
{
'user': 3,
'pwd': 4
}
)
@pytest.mark.parametrize('dic', data3)
def test_3(dic):
print(dic)
输出如下:
============================= test session starts =============================
collecting ... collected 2 items
test_para.py::test_3[dic0] PASSED [ 50%]{'user': 1, 'pwd': 2}
test_para.py::test_3[dic1] PASSED [100%]{'user': 3, 'pwd': 4}
============================== 2 passed in 0.02s ==============================
4.参数ids
参数化装饰器有一个额外的参数ids,可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性。
代码如下:
data_1 = [
pytest.param(1, 2, 3, id="(a+b):pass"), # id的值可以自定义, 只要方便理解每个用例是干什么的即可
pytest.param(4, 5, 10, id="(a+b):fail")
]
def add(a, b):
return a + b
class TestParametrize(object):
@pytest.mark.parametrize('a, b, expect', data_1)
def test_parametrize_1(self, a, b, expect):
assert add(a, b) == expect
输出:
============================= test session starts =============================
collecting ... collected 2 items
test_para.py::TestParametrize::test_parametrize_1[(a+b):pass]
test_para.py::TestParametrize::test_parametrize_1[(a+b):fail] PASSED [ 50%]FAILED [100%]
test_para.py:54 (TestParametrize.test_parametrize_1[(a+b):fail])
以上是关于pytest的参数化处理的主要内容,如果未能解决你的问题,请参考以下文章