Я не вижу проблем с параметризацией прибора user
. Вы можете пометить отдельные параметры с помощью pytest.param
, например:
@pytest.fixture(params=[
'testuser',
# wrap None into pytest.param to treat it specially
pytest.param(None, marks=pytest.mark.xfail)
])
def user(request):
if request.param is None:
return None
return User.objects.filter(name=request.param).first() # or whatever
Однако это будет означать, что все тесты, использующие прибор user
, будут xfail / xpass на None
- это может быть не то, что вы хотите для всех тестов. Используйте косвенную параметризацию, если вы хотите отключить только выбранный тест:
# user fixture is not parametrized now
@pytest.fixture
def user(request):
if request.param is None:
return None
return User.objects.filter(name=request.param).first()
# instead, parametrizing is done from the test:
@pytest.mark.parametrize('content', ['nice post',])
@pytest.mark.parametrize('user', [
'testuser',
pytest.param(None, marks=pytest.mark.xfail
)], indirect=True)
def test_post(test_client, user, content):
...