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.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test collected 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.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test collected 3 items test03.py 18221124104 .18200000000 F18200000001 F ================================== 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.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test collected 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.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test collected 2 items test03.py 18221124104 111111 .18200000000 111111 x ======================== 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.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test collected 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內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python測試框架pytest介紹
- Python基礎教程之pytest參數化詳解
- pytest fixtures裝飾器的使用和如何控制用例的執行順序
- Python教程之pytest命令行方式運行用例
- 詳解pytest分佈式執行插件 pytest-xdist 的高級用法