我有一个简单的测试,如下所示:
# contents of test_example
def test_addition(numbers):
assert numbers < 5
以下是我的最烦恼
# contents of conftest
import pytest
@pytest.fixture(params=[1, 2, 3, 4])
def numbers(request):
return request.param
但是现在我想测试数字5和6但不必明确硬编码。在命令行上,我想用数字5和6覆盖数字测试夹具,以便:
py.test test_example.py --numbers=[5, 6]
我希望上面调用的结果用我在命令行创建的测试夹具覆盖conftest数字测试夹具,并且仅在5和6上运行test_addition()。
我将如何做到这一点?
答案 0 :(得分:2)
阅读here你可以
tests/conftest.py
def pytest_addoption(parser):
parser.addoption("--numbers", action="store", dest="numbers",
default="1,2,3,4")
def pytest_generate_tests(metafunc):
if 'number' in metafunc.fixturenames:
metafunc.parametrize("number", metafunc.config.option.numbers.split(','))
tests/test_1.py
def test_numbers(number):
assert number
这样:
$ py.test tests/ -vv
=========================================
collected 4 items
test_1.py::test_numbers[1] PASSED
test_1.py::test_numbers[2] PASSED
test_1.py::test_numbers[3] PASSED
test_1.py::test_numbers[4] PASSED
和
$ py.test tests/ -vv --numbers=10,11
=========================================
collected 2 items
test_1.py::test_numbers[10] PASSED
test_1.py::test_numbers[11] PASSED
无论如何请注意here:
警告:
此函数必须在插件中实现,并在测试运行开始时调用一次。
强烈建议不要在conftest.py文件中实现此挂钩,因为conftest.py文件被延迟加载并且可能会出现奇怪的未知选项错误,具体取决于调用目录py.test。
所以如果你运行
这个代码是有效的py.test tests/
但不是
cd tests
py.test