亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

pytest 中的參數化測試對于不同的測試函數具有不同的標記

pytest 中的參數化測試對于不同的測試函數具有不同的標記

牛魔王的故事 2023-06-27 13:25:35
我目前正在嘗試在以下上下文中使用 pytest 的參數化功能:我有多個功能,應該使用一組通用的測試用例進行測試。根據測試的功能,相同的測試用例應該通過或失敗。我想出了一個愚蠢的例子來說明這一點:import pytest# Functions to testdef sum_int(a, b):    assert isinstance(a, int)    assert isinstance(b, int)    return a + bdef sum_any(a, b):    return a + b# Universal test casesTESTCASES = [    "a,b,result", [        (1, 1, 2),        ("a", "a", "aa")        ]    ]class Tests:    @pytest.mark.parametrize(*TESTCASES, ids=["int_pass", "str_fail"])    def test_sum_int(self, a, b, result):        assert sum_int(a, b) == result    @pytest.mark.parametrize(*TESTCASES, ids=["int_pass", "str_pass"])    def test_sum_any(self, a, b, result):        assert sum_any(a, b) == result不幸的是,似乎不可能只通過額外的分數(就像pytest.mark.xfail(reason=AssertionError)可以parametrize()用 ID 來完成一樣。# Does not [email protected](*TESTCASES,                         ids=["int_pass", "str_fail"],                         marks=[None, pytest.mark.xfail(reason=AssertionError)])def test_sum_int(self, a, b, result):    assert sum_int(a, b) == result實現這一目標的好方法是什么?
查看完整描述

2 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

我不得不發現我的問題的答案相對簡單。該pytest.param機制允許為特定測試用例指定標記:


@pytest.mark.parametrize(

    TESTCASES[0],

    [

        pytest.param(*args, marks=marks)

        for args, marks

        in zip(TESTCASES[1], [[], [pytest.mark.xfail(reason=AssertionError)]])

    ],

    ids=["int_pass", "str_fail"],

    )

def test_sum_int(self, a, b, result):

    assert sum_int(a, b) == result


查看完整回答
反對 回復 2023-06-27
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

如果您試圖僅標記字符串測試的總和,您可以這樣做:


# Universal test cases

TESTCASES = [

? ? "a,b,result", [

? ? ? ? (1, 1, 2),

? ? ? ? pytest.mark.xfail(("a", "a", "aa"))

? ? ? ? ]

? ? ]

查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號