Hi holger, Thanks for your help.
> 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'll try to explain my intention in behind my code, instead of showing my nitty code. >> 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. > Your examples makes sense. I'm trying to do something more complex and maybe I look at it in a wrong way. I want to define a fixture "fixt_func" so it would be able to receive a parameter defined by different test classes. Moreover I want "fixt_func" to have Class scope, so I can call finalize when all tests of the same class finished running. That's why I came up with the above "solution". > 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 > > > > ************************************************************************************ > This footnote confirms that this email message has been scanned by PineApp > Mail-SeCure for the > presence of malicious code, vandals & computer viruses. > ************************************************************************************ > > _______________________________________________ pytest-dev mailing list pytest-dev@python.org https://mail.python.org/mailman/listinfo/pytest-dev