使用 Pytest 的参数化添加测试功能的描述

Rod*_*ing 2 python pytest

当其中一个测试失败时,可以在测试正在测试的内容的参数化中添加描述,快速了解测试失败的原因。

有时您不知道测试失败的原因(您必须查看代码)。通过每个测试的描述,您就可以知道。

例如。

@pytest.mark.parametrize( "num1, num2, expect", [
    (2, 2, 4), # This test verifies that 2+2 = 4.
])
def test_sum(num1, num2, expect):

    calc = Calc()
    response = calc.sum(num1, num2)
    assert expect == response
Run Code Online (Sandbox Code Playgroud)

如果测试失败,错误消息将显示:

src_test/calc.py::test_sum[19999997-200] FAILED
    assert vo_result.code == expected_code
E   AssertionError: assert 4 == 3
    **The test checks if the numbers add up well.** Message invented

Run Code Online (Sandbox Code Playgroud)

Sil*_*Guy 7

您可以在参数化中定义每个测试的 id。Id 附加到测试名称后。默认情况下,参数化id是参数的组合。

@pytest.mark.parametrize( "num1, num2, expect", [
(2, 2, 4)], ids = ["2+2=4"])
def test_sum(num1, num2, expect):
    calc = Calc()
    response = calc.sum(num1, num2)
    assert expect == response
Run Code Online (Sandbox Code Playgroud)

当测试运行时,测试名称将为test_sum[2+2=4]。当测试失败时,您可以查看测试名称并查找哪组参数导致测试失败。

要使单个测试失败,您可以使用 pytest.params。例如:

@pytest.mark.parametrize( "num1, num2, expect", [
(2, 2, 4)], ids = ["2+2=4"])
def test_sum(num1, num2, expect):
    calc = Calc()
    response = calc.sum(num1, num2)
    assert expect == response
Run Code Online (Sandbox Code Playgroud)

有关 pytest 参考文档中的参数化 id 的更多信息: https: //docs.pytest.org/en/latest/reference.html#pytest-mark-parametrize