您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python Pytest装饰器@pytest.mark.parametrize详解

51自学网 2021-10-30 22:18:57
  python
这篇教程Python Pytest装饰器@pytest.mark.parametrize详解写得很实用,希望能帮到您。

Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT
如:@pytest.mark.parametrize('请求方式,接口地址,传参,预期结果',[('get','www.baidu.com','{"page":1}','{"code":0,"msg":"成功"})',('post','www.baidu.com','{"page":2}','{"code":0,"msg":"成功"}')])

1、第一个参数是字符串,多个参数中间用逗号隔开

2、第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

3、传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化

4、传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化

import pytest#单参数单值@pytest.mark.parametrize("user",["18221124104"])def test(user):    print(user)    assert user=="18221124104" "C:/Program Files/Python35/python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py============================= test session starts =============================platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0rootdir: C:/Users/wangli/PycharmProjects/Test/testcollected 1 item test03.py 18221124104. ============================== 1 passed in 0.15s ============================== Process finished with exit code 0 #单参数多值@pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])def test(user):    print(user)    assert user=="18221124104"  "C:/Program Files/Python35/python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py============================= test session starts =============================platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0rootdir: C:/Users/wangli/PycharmProjects/Test/testcollected 3 items test03.py 18221124104.18200000000F18200000001F ================================== FAILURES ===================================______________________________ test[18200000000] ______________________________ user = '18200000000'     @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])    def test(user):        print(user)>       assert user=="18221124104"E       AssertionError test03.py:74: AssertionError______________________________ test[18200000001] ______________________________ user = '18200000001'     @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])    def test(user):        print(user)>       assert user=="18221124104"E       AssertionError test03.py:74: AssertionError========================= 2 failed, 1 passed in 0.21s ========================= Process finished with exit code 0#多参数多值@pytest.mark.parametrize("user,pwd",[("18221124104",111111),("18200000000",111111)])def test(user,pwd):    print(user,pwd)  "C:/Program Files/Python35/python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py============================= test session starts =============================platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0rootdir: C:/Users/wangli/PycharmProjects/Test/testcollected 2 items test03.py 18221124104 111111.18200000000 111111. ============================== 2 passed in 0.03s ============================== Process finished with exit code 0 # 使用内置的mark.xfail标记为失败的用例就不运行了,直接跳过显示xfailed@pytest.mark.parametrize("user,pwd",[("18221124104",111111),pytest.param("18200000000",111111,marks=pytest.mark.xfail)])def test(user,pwd):    print(user,pwd)    assert user == "18221124104"    assert pwd== 111111  "C:/Program Files/Python35/python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py============================= test session starts =============================platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0rootdir: C:/Users/wangli/PycharmProjects/Test/testcollected 2 items test03.py 18221124104 111111.18200000000 111111x ======================== 1 passed, 1 xfailed in 0.14s ========================= Process finished with exit code 0 #若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器@pytest.mark.parametrize("x", [0, 1])@pytest.mark.parametrize("y", [2, 3])def test_foo(x, y):    print("测试数据组合:x->%s, y->%s" % (x, y)) if __name__=="__main__":    pytest.main(["-s","test03.py"])  "C:/Program Files/Python35/python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py============================= test session starts =============================platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0rootdir: C:/Users/wangli/PycharmProjects/Test/testcollected 4 items test03.py 测试数据组合:x->0, y->2.测试数据组合:x->1, y->2.测试数据组合:x->0, y->3.测试数据组合:x->1, y->3. ============================== 4 passed in 0.03s ============================== Process finished with exit code 0

到此这篇关于Python Pytest装饰器@pytest.mark.parametrize详解的文章就介绍到这了,更多相关pytest.mark.parametrize内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


pytest接口测试之fixture传参数request的使用
python实现邮箱发送信息
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。