需要在不同的设备上运行相同的测试。使用夹具提供设备的 IP 地址,并且所有测试都针对夹具作为请求提供的 IP 运行。但同时,需要在测试名称后附加IP地址,以便快速分析结果。pyTest 结果对所有参数的测试名称都相同,只有在日志或语句中我们才能看到使用的参数,是否有任何方法可以通过根据夹具参数将参数附加到测试名称来更改测试名称?
class TestClass:
def test1():
pass
def test2():
pass
我们需要为每个设备运行整个测试类,为每个设备按顺序运行所有测试方法。我们不能用参数循环运行每个测试,我们需要在一个参数循环中运行整个测试类。我们通过夹具实现实现了这一点,但我们无法重命名测试。
你可以阅读我的答案: 如何自定义 pytest 名称
我可以通过在 conftest.py 文件中创建一个钩子来更改 pytest 名称。 但是,我必须使用 pytest 私有变量,因此当您升级 pytest 时,我的解决方案可能会停止工作
无需更改测试名称。您描述的用例正是参数化夹具的用途。
根据 pytest 文档,下面是示例测试运行的输出。请注意夹具值如何包含在测试名称之后的失败输出中。这使得哪些测试用例失败一目了然。
$ pytest
======= test session starts ========
platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR, inifile:
collected 3 items
test_expectation.py ..F
======= 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 ========