小编ins*_*ant的帖子

Pytest:使用不同的输入数据多次运行测试

我想为每次运行运行具有不同装置的一组测试函数。通常,Stack Overflow、文档和博客文章中建议的解决方案分为两类。一种是通过参数化夹具:

@pytest.fixture(params=list_of_cases)
def some_case(request):
    return request.param
Run Code Online (Sandbox Code Playgroud)

另一种是通过调用 metafunc.parametrize 来生成多个测试:

def pytest_generate_tests(metafunc):
    metafunc.parametrize('some_case', list_of_cases)
Run Code Online (Sandbox Code Playgroud)

这两种方法的问题在于案例运行的顺序。基本上它使用每个参数运行每个测试函数,而不是遍历给定参数的所有测试函数,然后继续下一个参数。当我的一些装置是相对昂贵的数据库调用时,这是一个问题。

为了说明这一点,假设 dataframe_x 是另一个属于 case_x 的夹具。Pytest 这样做

test_01(dataframe_1)
test_01(dataframe_2)
...
test_50(dataframe_1)
test_50(dataframe_2)
Run Code Online (Sandbox Code Playgroud)

代替

test_01(dataframe_1)
...
test_50(dataframe_1)

test_01(dataframe_2)
...
test_50(dataframe_2)
Run Code Online (Sandbox Code Playgroud)

结果是我将从 DB 中获取每个数据集 50 次而不是一次。由于我只能将夹具范围定义为“会话”、“模块”或“函数”,因此我无法弄清楚如何将我的测试分组为它们一起运行。

有没有办法构建我的测试,以便我可以为每个数据集按顺序运行所有测试函数?

python pytest

5
推荐指数
1
解决办法
4250
查看次数

标签 统计

pytest ×1

python ×1