我正在传入一个json文件,其中包含以下内容:
# config.json
[
{
"id" : 1,
"description" : "test1",
"data1": [1, 2, 3],
"data2": ["foo", "bar", "baz"]
},
{
"id" : 2,
"description" : "test2",
"data1": [4, 5, 6],
"data2": ["baz", "foo"]
}
]
正在尝试使用data1创建测试置换。造成问题的最基本方法是:
#######################
# conftest.py
import json
import pathlib
import pytest
def pytest_generate_tests(metafunc):
print("pytest_generate_tests")
config = pathlib.Path(metafunc.module.__file__).with_name('config.json')
testdata = json.loads(config.read_text())
for test in testdata:
metafunc.parametrize('testdata', testdata)
metafunc.parametrize('data', test.get('data1'))
#######################
# test_example.py
import pytest
def test_example(testdata, data):
pass
给出了错误:
external_data/conftest.py:11: in pytest_generate_tests
metafunc.parametrize('data', test.get('data1'))
/usr/local/lib/python3.9/site-packages/pytest-6.2.3-py3.9.egg/_pytest/python.py:1100: in parametrize
newcallspec.setmulti2(
/usr/local/lib/python3.9/site-packages/pytest-6.2.3-py3.9.egg/_pytest/python.py:932: in setmulti2
self._checkargnotcontained(arg)
/usr/local/lib/python3.9/site-packages/pytest-6.2.3-py3.9.egg/_pytest/python.py:909: in _checkargnotcontained
raise ValueError(f"duplicate {arg!r}")
E ValueError: duplicate 'data'
我想看到的是,这两个更广泛的结构都要测试data1(最终是data2)的所有排列
external_data/test_example.py::test_example[testdata0-1] PASSED
external_data/test_example.py::test_example[testdata0-2] PASSED
external_data/test_example.py::test_example[testdata0-3] PASSED
external_data/test_example.py::test_example[testdata1-4] PASSED
external_data/test_example.py::test_example[testdata1-5] PASSED
external_data/test_example.py::test_example[testdata1-6] PASSED
1条答案
按热度按时间0x6upsns1#
你必须把名单传给参数化,否则你就是在打电话
parametrize('data',...)
多次使用不同的参数。这样的方法应该有用:
参数化将iterable作为第二个参数。