직접 달성 할 수있는 방법이 있는지 의문입니다. 그러나 pytest 플러그인 pytest_generate_tests
을 확장하면됩니다.
다른 parametrize
질문에 대한 답변입니다. using fixture return value as value in mark.parametrize()
여기 내 해결책이 있습니다.
- 두 단계의 매개 변수화를 수행하려는 테스트를 표시하십시오.
- 두 단계의 매개 변수화를 수행하려는 테스트를 가져 와서 첫 번째 수준의 매개 변수화를 얻습니다.
- 첫 번째 수준의 매개 변수화를 기반으로 두 번째 수준을 생성합니다.
- 테스트 케이스를 사용하여 두 번째 레벨 매개 변수 만 사용하도록 지정하거나 요구 사항에 따라 둘 다 사용하십시오.
예 시험 :
import pytest
@pytest.mark.two_level_parametrization
@pytest.mark.parametrize("first_level", [1, 2, 3])
def test_two_level_parametrization(second_level):
print(second_level)
Conftest.py
:
import pytest
def pytest_generate_tests(metafunc):
if hasattr(metafunc.function, 'two_level_parametrization'):
# You may need more marker or add if statement based on the arg of parametrize if you want to implement multiple two-level paremetrize
first_parametrize = metafunc.function.parametrize
metafunc.function.parametrize = [calculate_second_parametrize(first_parametrize)]
# # If you want to keep first level parametrization:
# metafunc.function.parametrize = [first_parametrize, calculate_second_parametrize(first_parametrize)]
def calculate_second_parametrize(first_parametrize):
# Define your own method here to generate the parametrize object you need.
input_params = first_parametrize.args[1]
output_params = input_params + [-1 * num for num in input_params]
return pytest.mark.parametrize('second_level', output_params)
출력 :
test_01.py::test_two_level_parametrization[1] 1
PASSED
test_01.py::test_two_level_parametrization[2] 2
PASSED
test_01.py::test_two_level_parametrization[3] 3
PASSED
test_01.py::test_two_level_parametrization[-1] -1
PASSED
test_01.py::test_two_level_parametrization[-2] -2
PASSED
test_01.py::test_two_level_parametrization[-3] -3
PASSED