Repository navigation
Scope of parameterized fixture doesn't work #12086
Description
Activity
I believe there was a fix for this in the 8 series
We should warn better about implicit indirect parameters having different scopes
I believe there was a fix for this in the 8 series
We should warn better about implicit indirect parameters having different scopes
I just tried with the latest version
8.0.2and the issue exists in it.- addedtype: bugproblem that needs to be addressedproblem that needs to be addressedtopic: fixturesanything involving fixtures directly or indirectlyanything involving fixtures directly or indirectly
on Mar 12, 2024 Thank you for posting, @gjambaisivanandham. I'm new to pytest as well so I am interested in exploring and understanding your issue.
These may be silly remarks coming from my ignorance of session scope but:
- do your examples have syntax errors? It looks to me like
responseisn't defined in the body of your test functions, for example. - aren't you overriding the session fixture by directly parametrizing the test functions?
- to not override your session fixture, shouldn't
indirect=Truebe used?
Is this the fixture usage your are expecting from
file.pybelow. Note thattest_scenario_1usesindirect=Truein my example.import pytest @pytest.fixture(scope='session') def my_fixture(request): """I am being used.""" pass @pytest.mark.parametrize('my_fixture', ['a','b'], indirect=True) def test_scenario_1(my_fixture): pass @pytest.mark.parametrize('my_fixture', ['a','b']) def test_scenario_2(my_fixture): pass
Fixture usage:
$ pytest file.py --fixtures-per-test -------------------------- fixtures used by test_scenario_1[a] --------------------------- -------------------------------------- (file.py:10) -------------------------------------- my_fixture -- file.py:4 I am being used. -------------------------- fixtures used by test_scenario_1[b] --------------------------- -------------------------------------- (file.py:10) -------------------------------------- my_fixture -- file.py:4 I am being used. -------------------------- fixtures used by test_scenario_2[a] --------------------------- -------------------------------------- (file.py:14) -------------------------------------- my_fixture -- src/_pytest/python.py:1113 no docstring available -------------------------- fixtures used by test_scenario_2[b] --------------------------- -------------------------------------- (file.py:14) -------------------------------------- my_fixture -- src/_pytest/python.py:1113 no docstring available- @RonnyPfannschmidt: are you saying the
parametrizemark should implicitly do parametrization of the session fixture here rather than creating a pseudo fixture for the argumentmy_fixture?
Thank you again, @gjambaisivanandham!
- do your examples have syntax errors? It looks to me like
Closing as not reproducible: the literal repro (parametrize without
indirect=True) creates a pseudo-fixture that fully overridesmy_fixture, so the real fixture body never runs on 7.4.2, 8.0.2, or current main; the corrected form usingindirect=True(as suggested above) already reuses the session-scoped fixture correctly on all of those versions too.
I am fairly new to pytest and I see that scope of a parameterized fixture is not working.
Here is an example of the fixture and the test:
Tests
When I run the tests I see the API responses printed 4 times(twice for
aparameter and twice forbparameter). I was expecting it to be printed just twice(once for both the parameters -aandb) since both the tests use same set of parameters and the fixed is scopedsession. Obviously, if I don't parameterize the fixture the api response is printed once. Pytest version is7.4.2