python - 如何使用pytest跳过参数化测试

标签 python pytest parametrized-testing

是否可以有条件地跳过参数化测试?
这是一个例子:

@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/

相关文章:

java - 使用 JUnit 5 的 @ParametrizedTest 与 @TestFactory Stream<DynamicTest> 之间的区别/优点是什么?

python - django类型错误无法连接str和延迟属性对象

python - Saltstack 变量

python - pytest收集了0个项目

python - 使用 pytest 测试 pyqt 应用程序

python - 如何将函数作为 pytest 参数化装置传递?

c++ - GTest 参数化测试从数组或类似文件中解压值参数

python - 在python中对相似值进行分组和求和

python - 原始 SQL 到 SQLAlchemy

python - 无法让 pytest 理解设置中的命令行参数