我这样运行测试:
pytest -v testing.py --parameters=10,11,12
在固定装置内,我获得了命令行参数,从list
生成了string
,并且需要将此list
传递给测试,如图所示>
# content of conftest.py
import pytest
def pytest_addoption(parser):
parser.addoption(
"--parameters", action="store", default='10,11,12', help="help")
@pytest.fixture
def cmdopt(request):
return request.config.getoption("--parameters")
# content of testing.py
import pytest
@pytest.fixture(autouse=True)
def get_params(cmdopt):
data = cmdopt.split(',') # default ['10','11','12']
return data
@pytest.mark.parametrize('parameter', 'the list that returned the fixture get_params')
def test_mytest(parameter):
print(parameter) # I first expect 10 then 11 then 12
如何实现?谢谢。
答案 0 :(得分:0)
引用here:
有时您可能想要实施自己的参数化方案或 实施一些确定参数或范围的动力 夹具。为此,您可以使用 pytest_generate_tests 钩子 收集测试函数时调用。通过传入的metafunc 您可以检查请求测试上下文的对象,并且大多数 重要的是,您可以调用metafunc.parametrize()导致 参数化。
所以,请检查一下:
# content of conftest.py
import pytest
def pytest_addoption(parser):
parser.addoption(
"--parameters", action="store", default='10,11,12', help="help")
def pytest_generate_tests(metafunc):
if 'parameters' in metafunc.fixturenames:
if metafunc.config.getoption('parameters'):
option_value = metafunc.config.getoption('parameters')
metafunc.parametrize("parameters", option_value.split(','))
# content of testing.py
import pytest
def test_mytest(parameter):
print(parameter)