给定一个参数化测试,我如何才能为所有参数打印一次消息?
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
与您有时可能决定删除的参数进行匹配。
假设此示例代码:
@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
与您有时可能决定删除的参数进行匹配。