Ваш прибор должен выглядеть следующим образом:
@pytest.fixture(scope='function')
def doc_fixture(request):
parser = request.param[0]
text = request.param[1]
return parser.parse(text)
и использовать его следующим образом:
@pytest.mark.parametrize('doc_fixture', [parser_1, 'short text'], indirect=True)
def test_sth(doc_fixture):
... # Perform tests
Вы можете смешивать и сопоставлять комбинации аргументов, используя pytest.mark.parametrize
Вот еще один пример, который предоставляет различные комбинации аргументов:
from argparse import Namespace
import pytest
@pytest.fixture(scope='function')
def doc_fixture(request):
first_arg, second_arg = request.param
s = Namespace()
s.one = first_arg
s.two = second_arg
return s
@pytest.mark.parametrize(
'doc_fixture',
[
('parserA', 'ShortText'),
('parserA', 'LongText'),
('parserB', 'ShortText'),
('parserB', 'LongText')
],
indirect=True
)
def test_something(doc_fixture):
assert doc_fixture == ''
И пример результата выполнения (с ожидаемыми ошибочными тестами):
=========================================================================================== short test summary info ============================================================================================
FAILED ../../tmp/::test_something[doc_fixture0] - AssertionError: assert Namespace(one='parserA', two='ShortText') == ''
FAILED ../../tmp/::test_something[doc_fixture1] - AssertionError: assert Namespace(one='parserA', two='LongText') == ''
FAILED ../../tmp/::test_something[doc_fixture2] - AssertionError: assert Namespace(one='parserB', two='ShortText') == ''
FAILED ../../tmp/::test_something[doc_fixture3] - AssertionError: assert Namespace(one='parserB', two='LongText') == ''