[Pytest-commit] Issue #570: indirect=True in parametrize breaks fixture scopes (hpk42/pytest)

Ivan Kalinin issues-reply at bitbucket.org
Mon Aug 25 16:15:48 CEST 2014


New issue 570: indirect=True in parametrize breaks fixture scopes
https://bitbucket.org/hpk42/pytest/issue/570/indirect-true-in-parametrize-breaks

Ivan Kalinin:

The following test:

```
#!python

import pytest

@pytest.fixture(scope='class')
def my_profile(request):
    print 'Setting up profile with param', getattr(request, 'param', 'Nothing')


@pytest.mark.parametrize('my_profile', ['pewpew', 'ololo'], indirect=True)
class TestClassOne:
    def test_foo(self, my_profile):
        pass

    def test_bar(self, my_profile):
        pass
```

Outputs this:

```
#!text

(pytest)pupssman at dirigible:~$ py.test test_1.py  -sv
================================================ test session starts =================================================
platform linux2 -- Python 2.7.4 -- py-1.4.23 -- pytest-2.6.1 -- /home/pupssman/venv/pytest/bin/python
plugins: qabs-yadt, allure-adaptor, contextfixture, capturelog, xdist
collected 4 items 

test_1.py::TestClassOne::test_foo[pewpew] Setting up profile with param pewpew
PASSED
test_1.py::TestClassOne::test_foo[ololo] Setting up profile with param ololo
PASSED
test_1.py::TestClassOne::test_bar[pewpew] Setting up profile with param pewpew
PASSED
test_1.py::TestClassOne::test_bar[ololo] Setting up profile with param ololo
PASSED

============================================== 4 passed in 0.01 seconds ==============================================

```


Looks like it sets the fixture up for each test method of class independently.
However, the declaration of ```scope='class'``` should force py.test to set the fixture up only once for each parameter value for the test class. I.e., the output should be something like that:


```
#!text

(pytest)pupssman at dirigible:~$ py.test test_1.py  -sv
================================================ test session starts =================================================
platform linux2 -- Python 2.7.4 -- py-1.4.23 -- pytest-2.6.1 -- /home/pupssman/venv/pytest/bin/python
plugins: qabs-yadt, allure-adaptor, contextfixture, capturelog, xdist
collected 4 items 

test_1.py::TestClassOne::test_foo[pewpew] Setting up profile with param pewpew
PASSED
test_1.py::TestClassOne::test_bar[pewpew]
PASSED
test_1.py::TestClassOne::test_foo[ololo] Setting up profile with param ololo
PASSED
test_1.py::TestClassOne::test_bar[ololo]
PASSED

============================================== 4 passed in 0.01 seconds ==============================================

```




More information about the pytest-commit mailing list