Pytest:通过函数创建测试参数:使用 MarkGenerator 触发弃用警告

Pytest: Creating tests parameters via a function: Using MarkGenerator trigger a deprecation warning

所以,为了在多个测试中重复使用测试参数,我有时会这样做:

def parameters():
    from _pytest.mark import MarkGenerator
    generator = MarkGenerator()
    return generator.parametrize("the_argument, the_result", [(1, 2), (2, 4)])

@parameters():
def test_multiplication("the_argument, the_result"):
    pass

Pytest 现在发布 PytestDeprecationWarning: A private pytest class or function was used. 并且文档说 this is going to become an hard error

所以我的问题是,如何以合法的方式做完全相同的事情?

像这样:

import pytest

parameters = pytest.mark.parametrize(
        "the_argument, the_result",
        [(1, 2), (2, 4)],
)

@parameters
def test_multiplication(the_argument, the_result):
    pass

@parameters
def test_multiplication_2(the_argument, the_result):
    pass

简单解释一下,装饰器是对象,就像 python 中的其他所有对象一样,所以没有什么能阻止我们稍后将它们分配给 use/reuse 的变量。