Hi Alex, On Mon, Dec 14, 2015 at 15:50 +0000, Alex Netes wrote: > Hello guys, > > I'm new to Pytest and I encounter something I cannot explain.
I also hit many things which i can not explain, even with pytest and maybe even with this very mail. > I'm trying to give fixture fixt_func() a parameter fixt_prm and expect the > fixture to be called only once as it defined with 'class' scope, but the > fixture is called twice as it ignores the scope. What am I missing? > > > @pytest.fixture(scope='class') > def fixt_func(request, resource, fixt_prm): > print fixt_prm > > class TestA(): > @pytest.mark.parametrize('resource', ['x'], scope='class') > @pytest.mark.parametrize(fixt_prm ', ['x'], scope='class') > @pytest.mark.parametrize('prm', ['a', 'b']) > def test_a(self, prm, fixt_func) > assert True You are doing something i wasn't aware is possible. You pass a parameter to the fixture function fixt_func through parametrization but as a fixture. In any case, if we modify your example to: import pytest @pytest.fixture(scope='class') def fixt_func(request, fixt_prm): print "fixt_func" class TestA(): @pytest.mark.parametrize('fixt_prm', ['x', 'y'], scope='class') def test_a(self, fixt_func): assert True this will also call fixt_func twice for the two executing tests. It's argubaly "correct" behaviour from a certain point of view. fixt_prm is class-scoped so each parameter instance exists as a different "class-level" value so we interpret it to mean each class-scoped fixture function needs to be executed with both values. Just imagine we wouldn't parametrize on the function directly but through a fixture function: import pytest @pytest.fixture(scope='class') def fixt_func(request, fixt_prm): print "fixt_func" @pytest.fixture(scope='class', params=["x", "y"]) def fixt_prm(request): print "fixt_prm" class TestA(): def test_a(self, fixt_func): assert True Here it's maybe more obvious why this executes both fixture functions twice. however, i am not sure about your precise example above. I can see why you expect the two different "prm" values (and thus test functions) to execute with the same class-level fixtures. Maybe others can chime in and say if they consider your example a bug or a "usual" behaviour. holger > _______________________________________________ > pytest-dev mailing list > pytest-dev@python.org > https://mail.python.org/mailman/listinfo/pytest-dev -- about me: http://holgerkrekel.net/about-me/ contracting: http://merlinux.eu _______________________________________________ pytest-dev mailing list pytest-dev@python.org https://mail.python.org/mailman/listinfo/pytest-dev