如何根据fixture param

时间:2017-07-13 00:08:00

标签: pytest

需要在不同的设备上运行相同的测试。使用夹具来提供设备的IP地址,并且所有测试都针对夹具作为请求提供的IP运行。但同时,需要使用IP地址附加测试名称以快速分析结果。 pytest结果的测试名称对于所有参数都是相同的,只有在日志或语句中我们才能看到所使用的参数,无论如何通过将参数附加到基于夹具参数的测试名称来更改测试名称?

class TestClass:

    def test1():
       pass

    def test2():
       pass

我们需要为每个设备运行整个测试类,每个设备按顺序运行所有测试方法。我们不能用参数循环运行每个测试,我们需要在参数循环中运行整个测试类。这是我们通过夹具实现实现的,但我们无法重命名测试。

2 个答案:

答案 0 :(得分:0)

您无需更改测试名称。您正在描述的用例正是参数化设备的用途。

根据pytest docs,这是测试运行示例的输出。请注意夹具值如何包含在测试名称后面的故障输出中。这使得哪些测试用例失败显而易见。

$ 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 ========

答案 1 :(得分:0)

您可以阅读我的回答:How to customize the pytest name

我可以通过在conftest.py文件中创建一个钩子来更改pytest名称。 但是,我不得不使用pytest私有变量,所以当你升级pytest时我的解决方案可能会停止工作