pytest參數(shù)化:@pytest.mark.parametrize詳解
pytest參數(shù)化:@pytest.mark.parametrize
內(nèi)置的pytest.mark.parametrize裝飾器可以用來對測試函數(shù)進(jìn)行參數(shù)化處理。
下面是一個典型的范例
檢查特定的輸入所期望的輸出是否匹配:
- test_expectation.py
import pytest @pytest.mark.parametrize("test_input, expected", [("3+5", 8), ("2+4", 6), ("6*9", 42),]) def test_eval(test_input, expected): assert eval(test_input) == expected
裝飾器@parametrize定義了三組不同的(test_input, expected)數(shù)據(jù),test_eval則會使用這三組數(shù)據(jù)
執(zhí)行三次:
$ pytest
=========================== test session starts ============================
platform linux ‐‐ Python 3.x.y, pytest‐4.x.y, py‐1.x.y, pluggy‐0.x.y
cachedir: $PYTHON_PREFIX/.pytest_cache
rootdir: $REGENDOC_TMPDIR, inifile:
collected 3 items
test_expectation.py ..F [100%]
================================= FAILURES =================================
____________________________ test_eval[6*9‐42] _____________________________
test_input = '6*9', expected = 42
@pytest.mark.parametrize("test_input,expected", [
("3+5", 8),
("2+4", 6),
("6*9", 42),
])
def test_eval(test_input, expected):
> assert eval(test_input) == expected
E AssertionError: assert 54 == 42
E + where 54 = eval('6*9')
test_expectation.py:8: AssertionError
==================== 1 failed, 2 passed in 0.12 seconds ====================
該示例中,只有一組數(shù)據(jù)是失敗的
通常情況下你可以在traceback中看到作為函數(shù)參數(shù)的input和output。
注意:
你也可以對模塊或者class使用參數(shù)化的marker來讓多個測試函數(shù)在不同的測試集下運(yùn)行。
你也可以對參數(shù)集中的某個參數(shù)使用mark,比如下面使用了內(nèi)置的mark.xfail:
- test_exception.py
import pytest @pytest.mark.parametrize("test_input, expected", [("3+5", 8), ("2+4", 6), ("6*9", 42, marks=pytest.mark.xfail),]) def test_eval(test_input, expected): assert eval(test_input) == expected
運(yùn)行結(jié)果如下:
$ pytest
=========================== test session starts ============================
platform linux ‐‐ Python 3.x.y, pytest‐4.x.y, py‐1.x.y, pluggy‐0.x.y
cachedir: $PYTHON_PREFIX/.pytest_cache
rootdir: $REGENDOC_TMPDIR, inifile:
collected 3 items
test_expectation.py ..x [100%]
=================== 2 passed, 1 xfailed in 0.12 seconds ====================
之前結(jié)果是失敗的用例在這里已經(jīng)被標(biāo)記為xfailed了。
如果參數(shù)化的列表是一個空列表,比如參數(shù)是某個函數(shù)動態(tài)生成的,請參考empty_parameter_set_mark選項。
可以對一個函數(shù)使用多個parametrize的裝飾器,這樣多個裝飾器的參數(shù)會組合進(jìn)行調(diào)用:
import pytest @pytest.mark.parametrize("x", [0, 1]) @pytest.mark.parametrize("y", [2, 3]) def test_foo(x, y): pass
這會窮舉x和y的所有組合并進(jìn)行調(diào)用。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- pytest實戰(zhàn)技巧之參數(shù)化基本用法和多種方式
- Python中pytest的參數(shù)化實例解析
- pytest使用@pytest.mark.parametrize()實現(xiàn)參數(shù)化的示例代碼
- pytest?fixtures函數(shù)及測試函數(shù)的參數(shù)化解讀
- pytest使用parametrize將參數(shù)化變量傳遞到fixture
- Python基礎(chǔ)教程之pytest參數(shù)化詳解
- pytest實現(xiàn)測試用例參數(shù)化
- Pytest單元測試框架如何實現(xiàn)參數(shù)化
- Pytest參數(shù)化parametrize使用代碼實例
相關(guān)文章
Python pip通過requirements.txt 文件安裝依賴
requirements.txt是定義項目依賴的python包,可通過工具生成,本文主要介紹了Python pip通過requirements.txt文件安裝依賴,具有一定的參考價值,感興趣的可以了解一下2024-03-03python使用 multiprocessing 多進(jìn)程處理批量數(shù)據(jù)的示例代碼
這篇文章主要介紹了使用 multiprocessing 多進(jìn)程處理批量數(shù)據(jù)的示例代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09機(jī)器學(xué)習(xí)的框架偏向于Python的13個原因
這篇文章主要為大家詳細(xì)介紹了機(jī)器學(xué)習(xí)的框架偏向于Python的13個原因,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12淺談python數(shù)據(jù)類型及類型轉(zhuǎn)換
這篇文章主要介紹了淺談python數(shù)據(jù)類型及類型轉(zhuǎn)換,介紹了python中的數(shù)據(jù)類型,以及數(shù)據(jù)的不可變性,還有字符串,列表等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12Python語法學(xué)習(xí)之進(jìn)程的創(chuàng)建與常用方法詳解
本文我們將學(xué)習(xí)一下在?Python?中去創(chuàng)建并使用多進(jìn)程的方法,可以通過創(chuàng)建多個進(jìn)程來幫助我們提高腳本執(zhí)行的效率,感興趣的可以了解一下2022-04-04Python OpenCV利用筆記本攝像頭實現(xiàn)人臉檢測
這篇文章主要為大家詳細(xì)介紹了Python OpenCV利用筆記本攝像頭實現(xiàn)人臉檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04python email smtplib模塊發(fā)送郵件代碼實例
本篇文章給大家分享了python email smtplib模塊發(fā)送郵件的相關(guān)代碼分享,有需要的朋友參考學(xué)習(xí)下。2018-04-04