生成多个pytest夹具
问题描述:
我正在测试一些工程方程,其中有几个参数返回浮点数组。为了测试所有的情况,我想使用一些固定装置。我目前将测试用例存储在一个简单的文件中,加载它们,然后返回感兴趣的测试用例。有一个更好的方法吗?生成多个pytest夹具
@pytest.fixture(params=[0, 1, 2])
def test_case(request):
fpath = pathlib.Path(__file__).parent
fpath /= 'test_data'/'test_cases.json'
test_cases = json.load(fpath.open())
return test_cases[request.param]
def test_function(test_case):
# Run the test
答
您可以使用pytest_generate_tests。
def pytest_generate_tests(metafunc):
if 'test_case' in metafunc.fixturenames:
fpath = pathlib.Path(__file__).parent
fpath /= 'test_data'/'test_cases.json'
test_cases = json.load(fpath.open())
metafunc.fixturenames.append('test_case')
metafunc.parametrize(
'test_case',
test_cases)
+0
但事实上它不会改善任何事情.. 你能否澄清为什么你想要'更好的方式',你的方法有什么问题? – MasterAndrey
+0
我只是在寻找方法来改善我的方法/风格。我找不到任何关于像我这样生成多个测试的文档,所以我想我可能会错误地考虑这个问题。 – arkottke
我不确定我是否理解这个问题。 为什么不直接在python文件中内联数组? – nitzpo
由于Python文件中的数据非常复杂 – arkottke
您的意思是JSON文件?如果是的话,你必须保存在JSON文件中的数据,那么这是非常多的。您可以通过使用'pytest_generate_tests'挂钩来扫描目录并对其中的每个文件运行测试,对此代码进行轻微改进。这样,当你创建一个新的JSON文件时,它会自动添加到测试中。 – nitzpo