我想获得一些关于如何使用多层参数化 pytest fixtures 运行 pytests 的帮助。
我有一个基于请求的全局 fixture ,用于选择我要测试的系统的基本实现:
@fixture()
def a_provider():
yield 'a'
@fixture()
def b_provider():
yield 'b'
@fixture(params=["a_provider", "b_provider"])
def letter_provider(request):
yield request.getfixturevalue(request.param)
我现在想在后端针对不同的测试用例运行一些额外的参数化测试。
@fixture()
def one(letter_provider):
yield letter_provider * 1
@fixture()
def two(letter_provider):
yield letter_provider * 2
@fixture(params=["one", "two"])
def letter_cases(request):
yield request.getfixturevalue(request.param)
使用这两层固定装置,我希望能够运行由基本实现参数化的两个测试。
def test_foo(letter_provider):
"""
Should run once for "a" and once for "b"
"""
assert letter_provider in {"a", "b"}
以及使用所有额外案例的测试
def test_bar(letter_cases):
"""
test should be executed 4 times for : a, aa, b, bb
"""
assert letter_cases in {
"a", "aa",
"b", "bb",
}
目前,我的测试设置失败了:
test setup failed
'letter_provider'
The above exception was the direct cause of the following exception:
letter_provider
During handling of the above exception, another exception occurred:
The requested fixture has no parameter defined for test:
tests/test_example.py::test_bar[one]
Requested fixture 'letter_provider' defined in:
tests/test_example.py:15
我如何设置我的测试套件来运行这些级别的参数化?
最佳答案
在调用 getfixturevalue()
时,通过将两个 fixture 添加为 letter_cases,确保 fixture 缓存中填充了
依赖:one
和 two
fixture 值
@fixture(params=["one", "two"])
def letter_cases(request, <b>one, two</b>):
yield request.getfixturevalue(request.param)
关于python - Pytest:请求 fixture 的嵌套使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65993136/