亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

pytest參數(shù)化:@pytest.mark.parametrize詳解

 更新時(shí)間:2024年10月16日 08:41:38   作者:流柯`  
pytest.mark.parametrize裝飾器能夠?qū)y(cè)試函數(shù)進(jìn)行參數(shù)化處理,使得一個(gè)測(cè)試函數(shù)可以用多組數(shù)據(jù)執(zhí)行多次,這有助于檢查不同輸入下的期望輸出是否匹配,提高測(cè)試的效率和覆蓋率,裝飾器可以應(yīng)用于函數(shù)、模塊或類,支持多個(gè)裝飾器組合使用,增強(qiáng)測(cè)試的靈活性和綜合性

pytest參數(shù)化:@pytest.mark.parametrize

內(nèi)置的pytest.mark.parametrize裝飾器可以用來對(duì)測(cè)試函數(shù)進(jìn)行參數(shù)化處理。

下面是一個(gè)典型的范例

檢查特定的輸入所期望的輸出是否匹配:

  • 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則會(huì)使用這三組數(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。

注意:

你也可以對(duì)模塊或者class使用參數(shù)化的marker來讓多個(gè)測(cè)試函數(shù)在不同的測(cè)試集下運(yùn)行。

你也可以對(duì)參數(shù)集中的某個(gè)參數(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ù)化的列表是一個(gè)空列表,比如參數(shù)是某個(gè)函數(shù)動(dòng)態(tài)生成的,請(qǐng)參考empty_parameter_set_mark選項(xiàng)。

可以對(duì)一個(gè)函數(shù)使用多個(gè)parametrize的裝飾器,這樣多個(gè)裝飾器的參數(shù)會(huì)組合進(jìn)行調(diào)用:

import pytest
@pytest.mark.parametrize("x", [0, 1])
@pytest.mark.parametrize("y", [2, 3])
def test_foo(x, y):
    pass

這會(huì)窮舉x和y的所有組合并進(jìn)行調(diào)用。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論