给定一个参数化测试,我如何才能为所有参数打印一次消息?

Given a parametrized test, how can I print a message just once for all the parameters?

假设此示例代码:

@pytest.mark.parametrize('foo', ['foo1', 'foo2', 'foo3'])
def test_foo(foo):
    print('Testing foo')
    data = ['bar1', 'foo1', 'bar2']
    assert foo in data, 'Error: {} is not in data'.format(foo)

当运行pytest时,输出将是:

Testing foo
Testing foo
Error: foo2 is not in data
Testing foo
Error: foo3 is not in data

是否可以对所有参数只显示一次测试消息,以便输出为:

Testing foo
Error: foo2 is not in data
Error: foo3 is not in data

我的实际代码使用了大约 10 个参数,因此将消息重复 10 次会非常烦人,并且会在输出中增加很多噪音。

我才发现这个问题毫无意义。即使只有一个测试,每个参数都会在一个独立的测试实例中转换它,所以每个测试只显示一次消息是没有意义的。

输出是正确的,因为它类似于:

====== test_foo(foo2) ======
Testing foo
Error: foo2 is not in data

====== test_foo(foo3) ======
Testing foo
Error: foo3 is not in data

无论如何,为了回答我的问题,@hoefling 和@BallpointBen 的两种方法都有效。我个人更喜欢@BallpointBen 的方式,因为您不需要将 if 与您有时可能决定删除的参数进行匹配。