2
我想运行一组测试函数,每次运行使用不同的灯具。通常,堆栈溢出,文档和博客文章中提出的解决方案分为两类。其一是通过参数化夹具:由以产生多个测试呼叫metafunc.parametrizePytest:使用不同的输入数据多次运行测试
@pytest.fixture(params=list_of_cases)
def some_case(request):
return request.param
另一种是:
def pytest_generate_tests(metafunc):
metafunc.parametrize('some_case', list_of_cases)
用这两种方法的问题是在这情况下的运行顺序。基本上它使用每个参数运行每个测试函数,而不是通过给定参数的所有测试函数,然后继续下一个参数。这是一个问题,当我的一些设备是比较昂贵的数据库调用。
为了说明这一点,假定dataframe_x是属于case_x的另一个灯具。 Pytest做到这一点
test_01(dataframe_1)
test_01(dataframe_2)
...
test_50(dataframe_1)
test_50(dataframe_2)
,而不是
test_01(dataframe_1)
...
test_50(dataframe_1)
test_01(dataframe_2)
...
test_50(dataframe_2)
的结果是,我会从DB 50倍,而不是只取一次,每个数据集。由于我只能将灯具范围定义为'会话','模块'或'功能',所以我无法弄清楚如何将我的测试分组到一起,以块为单位。
有没有一种方法来组织我的测试,以便我可以顺序运行每个数据集的所有测试函数?
为什么你想让你的测试在块中执行?您的测试是否需要按顺序运行?如果是这样,我认为这并不理想,因为每个测试应该能够独立运行。 – Cedric
它们是独立的,但想象每个数据帧都非常大:我想加载一个,执行所有测试,将它扔掉,加载下一个,等等。这对我来说更直观,而不是加载它几次或者在整个测试过程中将所有数据保存在内存中。 – instant