【问题标题】:Override a pytest parameterized functions name覆盖 pytest 参数化函数名称
【发布时间】:2016-10-01 05:40:27
【问题描述】:

我的参数决定了我的参数化 pytest 的名称。我将为这些测试使用一些随机参数。为了不让 junit 中的报告名称混乱,我想为每个参数化测试创建一个静态名称。

有可能吗?

JUnit好像有个参数:Changing names of parameterized tests

class TestMe:
    @pytest.mark.parametrize(
        ("testname", "op", "value"),
        [
            ("testA", "plus", "3"),
            ("testB", "minus", "1"),
        ]
    )
    def test_ops(self, testname, op, value):

我尝试覆盖request.node.name,但是我只能在测试执行期间重命名它。

我几乎可以肯定我需要编写插件或夹具。您认为解决此问题的最佳方法是什么?

【问题讨论】:

    标签: python rename pytest fixtures parameterized


    【解决方案1】:

    您正在寻找 pytest.mark.parametrizeids 参数:

    字符串 id 列表,或可调用的。如果是字符串,每个都是对应的 到 argvalues,使它们成为测试 id 的一部分。如果可调用,它 应该接受一个参数(单个 argvalue)并返回一个字符串或 返回

    你的代码看起来像

    @pytest.mark.parametrize(
        ("testname", "op", "value"),
        [
            ("testA", "plus", "3"),
            ("testB", "minus", "1"),
        ],
        ids=['testA id', 'testB id']
    )
    def test_industry(self, testname, op, value):
    

    【讨论】:

    • 我将如何解决单个测试用例 pytest -k test_industry[testA id] 不起作用...
    • 或者使用lambda函数生成一些ID ids=lambda t: str(t).lstrip()[0:8],
    【解决方案2】:

    您还可以使用来自:https://github.com/singular-labs/parametrization 或 pypi 的 pytest 参数化包装器

    pip install pytest-parametrization
    

    您的代码如下所示:

    from parametrization import Parametrization
    
    class TestMe:
        @Parametrization.autodetect_parameters()
        @Parametrization.case(name="testA", op='plus', value=3)
        @Parametrization.case(name="testB", op='minus', value=1)
        def test_ops(self, op, value):
            ...
    

    等于:

    class TestMe:
        @pytest.mark.parametrize(
            ("op", "value"),
            [
                ("plus", "3"),
                ("minus", "1"),
            ],
            ids=['testA', 'testB']
        )
        def test_ops(self, op, value):
            ...
    

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 2020-05-16
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      相关资源
      最近更新 更多