Python Pytest装饰器@pytest.mark.parametrize详解

转自: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])]) 进行参数化

  1 import pytest
  2 #单参数单值
  3 @pytest.mark.parametrize("user",["18221124104"])
  4 def test(user):
  5     print(user)
  6     assert user=="18221124104"
  7  
  8  
  9 "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
 10 ============================= test session starts =============================
 11 platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
 12 rootdir: C:\Users\wangli\PycharmProjects\Test\test
 13 collected 1 item
 14  
 15 test03.py 18221124104
 16 .
 17  
 18 ============================== 1 passed in 0.15s ==============================
 19  
 20 Process finished with exit code 0
 21  
 22  
 23  
 24 #单参数多值
 25 @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])
 26 def test(user):
 27     print(user)
 28     assert user=="18221124104"
 29  
 30  
 31 "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
 32 ============================= test session starts =============================
 33 platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
 34 rootdir: C:\Users\wangli\PycharmProjects\Test\test
 35 collected 3 items
 36  
 37 test03.py 18221124104
 38 .18200000000
 39 F18200000001
 40 F
 41  
 42 ================================== FAILURES ===================================
 43 ______________________________ test[18200000000] ______________________________
 44  
 45 user = '18200000000'
 46  
 47     @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])
 48     def test(user):
 49         print(user)
 50 >       assert user=="18221124104"
 51 E       AssertionError
 52  
 53 test03.py:74: AssertionError
 54 ______________________________ test[18200000001] ______________________________
 55  
 56 user = '18200000001'
 57  
 58     @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])
 59     def test(user):
 60         print(user)
 61 >       assert user=="18221124104"
 62 E       AssertionError
 63  
 64 test03.py:74: AssertionError
 65 ========================= 2 failed, 1 passed in 0.21s =========================
 66  
 67 Process finished with exit code 0
 68  
 69  
 70  
 71 #多参数多值
 72 @pytest.mark.parametrize("user,pwd",[("18221124104",111111),("18200000000",111111)])
 73 def test(user,pwd):
 74     print(user,pwd)
 75  
 76  
 77 "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
 78 ============================= test session starts =============================
 79 platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
 80 rootdir: C:\Users\wangli\PycharmProjects\Test\test
 81 collected 2 items
 82  
 83 test03.py 18221124104 111111
 84 .18200000000 111111
 85 .
 86  
 87 ============================== 2 passed in 0.03s ==============================
 88  
 89 Process finished with exit code 0
 90  
 91  
 92  
 93 # 使用内置的mark.xfail标记为失败的用例就不运行了,直接跳过显示xfailed
 94 @pytest.mark.parametrize("user,pwd",[("18221124104",111111),pytest.param("18200000000",111111,marks=pytest.mark.xfail)])
 95 def test(user,pwd):
 96     print(user,pwd)
 97     assert user == "18221124104"
 98     assert pwd== 111111
 99  
100  
101  
102 "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
103 ============================= test session starts =============================
104 platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
105 rootdir: C:\Users\wangli\PycharmProjects\Test\test
106 collected 2 items
107  
108 test03.py 18221124104 111111
109 .18200000000 111111
110 x
111  
112 ======================== 1 passed, 1 xfailed in 0.14s =========================
113  
114 Process finished with exit code 0
115  
116  
117  
118  
119 #若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器
120 @pytest.mark.parametrize("x", [0, 1])
121 @pytest.mark.parametrize("y", [2, 3])
122 def test_foo(x, y):
123     print("测试数据组合:x->%s, y->%s" % (x, y))
124  
125 if __name__=="__main__":
126     pytest.main(["-s","test03.py"])
127  
128  
129 "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
130 ============================= test session starts =============================
131 platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
132 rootdir: C:\Users\wangli\PycharmProjects\Test\test
133 collected 4 items
134  
135 test03.py 测试数据组合:x->0, y->2
136 .测试数据组合:x->1, y->2
137 .测试数据组合:x->0, y->3
138 .测试数据组合:x->1, y->3
139 .
140  
141 ============================== 4 passed in 0.03s ==============================
142  
143 Process finished with exit code 0
144 
145 #json传参
146 user = [
147     {
148         "aa": 'aa1',
149         "bb": 'bb1'
150     },
151     {
152         "aa": 'aa2',
153         "bb": 'bb2'
154     }
155 ]
156 @pytest.mark.parametrize("user", user)
157 def test(user):
158     print("aa: %s, bb: %s" % (user['aa'], user['bb']))
159 
160 ===================== test session starts =====================
161 platform darwin -- Python 3.9.2, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
162 rootdir: /Users/admin/PythonProject/audit_auto_test/audit_web_i18n_test
163 collected 2 items                                                                                                                                                                                                                                      
164 
165 tests/test_pytest.py .. 
166 ====================== 2 passed in 0.01s ======================

————————————————
版权声明:本文为CSDN博主「王大力测试进阶之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36502272/article/details/100986069

你可能感兴趣的:(Python Pytest装饰器@pytest.mark.parametrize详解)