我开始使用pytest将单元测试添加到可以分析不同类型数据集的软件中。
我写了一组测试函数,我想将它们应用于不同的数据集。一个复杂因素是数据集非常大,所以我想这样做:
等等。
现在我可以使用一个灯具来使用一个数据集:
@pytest.fixture(scope="module")
def data():
return load_dataset1()
然后将data
传递给每个测试函数。
我知道我可以将params
关键字传递给pytest.fixture
。但是,如何实现不同数据集的顺序加载(不同时将所有数据集加载到RAM中)?
答案 0 :(得分:4)
如上所述使用params
:
@pytest.fixture(scope='module', params=[load_dataset1, load_dataset2])
def data(request):
loader = request.param
dataset = loader()
return dataset
如果您想进行特定于灯具的定型,请使用fixture finalization
:
@pytest.fixture(scope='module', params=[load_dataset1, load_dataset2])
def data(request):
loader = request.param
dataset = loader()
def fin():
# finalize dataset-related resource
pass
request.addfinalizer(fin)
return dataset
答案 1 :(得分:2)
Falsetru的答案非常好,但由于这是一个难题,我想使用@pytest.mark.parametrize
分享一个略有不同的解决方案。
@pytest.fixture(scope="module")
def data1():
return get_dataset1()
@pytest.fixture(scope="module")
def data2():
return get_dataset2()
@pytest.mark.parametrize('data_fixture',
['data1','data2'])
def test_datafoo_is_bar(data_fixture, request):
data = request.getfixturevalue(data_fixture)
assert data[foo] == bar