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

Reply via email to