是否可以有条件地跳过参数化测试?
这是一个例子:
@pytest.mark.parametrize("a_date", a_list_of_dates)
@pytest.mark.skipif(a_date > date.today())
def test_something_using_a_date(self, a_date):
assert <some assertion>
当然,我可以在测试方法中执行此操作,但我正在寻找一种使用 pytest
执行此操作的结构化方法。
最佳答案
如果您创建自己的方法,您可以检查测试收集时间中的值并仅运行相关测试
a_list_of_dates = [date.today(), date(2024, 1, 1), date(2022, 1, 1)]
def get_dates():
for d in a_list_of_dates:
if d <= date.today():
yield d
class TestSomething:
@pytest.mark.parametrize("a_date", get_dates())
def test_something_using_a_date(self, a_date):
print(a_date)
输出
TestSomething::test_something_using_a_date[a_date0] PASSED [ 50%] 2022-08-24
TestSomething::test_something_using_a_date[a_date1] PASSED [100%] 2022-01-01
如果你仍然想跳过测试,你可以在相关测试中添加skip
标记
def get_dates():
for d in a_list_of_dates:
markers = []
if d > date.today():
markers.append(pytest.mark.skip(reason=f'{d} is after today'))
yield pytest.param(d, marks=markers)
输出
TestSomething::test_something_using_a_date[a_date0] PASSED [ 33%] 2022-08-24
TestSomething::test_something_using_a_date[a_date1] SKIPPED (2024-01-01 is after today) [ 66%]
Skipped: 2024-01-01 is after today
TestSomething::test_something_using_a_date[a_date2] PASSED [100%] 2022-01-01
关于python - 如何使用pytest跳过参数化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73463001/