[英]Pytest: Nested use of request fixture
我想獲得一些關於如何使用多層參數化 pytest 裝置運行 pytest 的幫助。
我有一個基於請求的全局夾具,用於選擇要測試的系統的基本實現:
@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
我如何設置我的測試套件來運行這些級別的參數化?
通過將兩個夾具添加為letter_cases
依賴項,確保在調用getfixturevalue()
時夾具緩存填充one
和two
夾具值:
@fixture(params=["one", "two"])
def letter_cases(request, one, two):
yield request.getfixturevalue(request.param)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.