pytest icon indicating copy to clipboard operation
pytest copied to clipboard

Cannot use pytest.mark.usefixtures() in pytest.param

Open dtomas opened this issue 7 years ago • 8 comments

Adding Fixtures to a parametrization of a test function via pytest.mark.usefixtures has no effect. The fixtures are not executed and are missing from request.fixturenames.

Example:

import pytest

@pytest.fixture
def c():
    return []

@pytest.fixture
def a(c):
    c.append('a')

@pytest.fixture
def b(c):
    c.append('b')

@pytest.mark.parametrize('expected', [
    pytest.param(['a'], marks=pytest.mark.usefixtures('a'), id='a'),
    pytest.param(['b'], marks=pytest.mark.usefixtures('b'), id='b'),
])
def test_usefixtures_param(request, c, expected):
    assert c == expected
$ pip list
Package        Version
-------------- -------
atomicwrites   1.2.1  
attrs          18.2.0 
more-itertools 4.3.0  
pip            18.1   
pluggy         0.7.1  
py             1.6.0  
pytest         3.8.2  
setuptools     40.4.3 
six            1.11.0 
wheel          0.32.1

dtomas avatar Oct 11 '18 10:10 dtomas

linking https://github.com/pytest-dev/pytest/issues/349#issuecomment-428680193 as it has some more details on the problem

RonnyPfannschmidt avatar Oct 11 '18 12:10 RonnyPfannschmidt

I think I have same problem. Specified fixture as argument for pytest.mark.usefixture will be ignored if this specified fixture has params.

import pytest

@pytest.fixture
def data():
    return dict()


@pytest.fixture(params=[1, 2])
def add_data(request, data):
    data['a'] = request.param


@pytest.mark.usefixtures('add_data')
@pytest.fixture
def completed_data(data):
    data['b'] = 3
    return data


def test_data(completed_data):
    assert 'a' in completed_data

I expect add_data must be executed before start completing completed_data but it does not. Also it work (how am I expect) if specify add_data in define of completed_data:

@pytest.fixture
def completed_data(data, add_data):
    data['b'] = 3
    return data

Please say me if I'm wrong.

voronovpetr avatar Nov 15 '18 11:11 voronovpetr

marks on fixtures are NOT supported and won't be

RonnyPfannschmidt avatar Nov 15 '18 13:11 RonnyPfannschmidt

linking #349 (comment) as it has some more details on the problem

Just for reference, here is the code @dtomas linked to in their original comment: https://github.com/pytest-dev/pytest/blob/3.9.0/src/_pytest/python.py#L418-L421

Posting this link here since @dtomas's original comment didn't pin the code link to a specific git version or hash. It now points to some unrelated code.

nchammas avatar Jul 08 '20 22:07 nchammas

It looks like that there is still no support on adding pytest.mark.usefixtures to marks of pytest.param. Are there any news on that?

DenisKuplyakov avatar Mar 28 '22 15:03 DenisKuplyakov

@DenisKuplyakov I'm not aware of anyone working on this. If there were any news, they would likely be in this issue.

The-Compiler avatar Mar 28 '22 15:03 The-Compiler

Hey guys, do we have any updates on it?

vyahello avatar May 01 '22 20:05 vyahello

@vyahello see the comment right above yours. I'm not sure what you're trying to achieve by asking the same thing again a month later...

The-Compiler avatar May 01 '22 21:05 The-Compiler