pythontestingpytestparameterized-unit-testparameterized-tests

indirect=True vs indirect=False in @pytest.mark.parametrize()?


I just want to understand what it means or what happens if I set indirect parameter to True or False in the pytest.mark.parametrize?


Solution

  • With indirect=True you can parametrize your fixture, False - default value. Example:

    import pytest
    
    @pytest.fixture
    def fixture_name(request):
        return request.param
    
    @pytest.mark.parametrize('fixture_name', ['foo', 'bar'], indirect=True)
    def test_indirect(fixture_name):
        assert fixture_name == 'baz'
    

    So this example generates two tests. First one gets from fixture_name value foo, because this fixture for this test runs with parametization. Second test gets bar value. And each tests will fail, because of assert checking for baz.