pytest.mark.parameterize not "finding" fixtures

Question:

I’m writing tests for a small library and I decided to use py.test after hearing so many good things about it.

However, pytest.mark.parameterize is giving me some issues. At first, I thought maybe I just mismatched some parens and it went off looking for a fixture elsewhere. So I decided to start with the given example of parameterize:

@pytest.mark.parametrize("input,expected", [
    ("3+5", 8),
    ("2+4", 6),
    ("6*9", 42),
])
def test_eval(input, expected):
    assert eval(input) == expected

But this gives the same error:

fixture ‘input’ not found

available fixtures: capfd, pytestconfig, recwarn, capsys, tmpdir, monkeypatch

use ‘py.test –fixtures [testpath]’ for help on them.

I went off googling, but I couldn’t find any answers that applied. Any ideas on how to approach this?

Edit: I suppose knowing which Python/py.test versions is helpful.

Python 3.4.0 and py.test 2.6.4

Asked By: justanr

||

Answers:

I just tried your example verbatim and it worked fine in pytest 2.6.4. Perhaps you are misspelling parametrize? You misspelled it in the title and is a common mistake, as can be seen in this issue.

Answered By: Bruno Oliveira

It’s not the same cause, but this is the first result on google for "pytest parametrize fixture not found", which was my natural google for the same error as OP:

E fixture ‘blah’ not found

In my case it was due to a silly typo (which I didn’t spot for far too long!), missing the @ from the decorator:

pytest.mark.parametrize("blah", [50, 100])
def test_something(blah):
    assert blah > 0
Answered By: Indivicivet

In my case, I changed a dataclass to "@pytest.mark.parametrize".

I forgot "@pytest.mark.parametrize" is a decorator.
Therefore I didn’t put the decorator above the function and between the decorator and the function, there were other functions.

@pytest.mark.parametrize("input,expected", [
    ("3+5", 8),
    ("2+4", 6),
    ("6*9", 42),
])

def test_otherfunctions():
    """ a function unrelated to the decorator. """
    pass

#the decorator should be here.
def test_eval(input, expected):
    assert eval(input) == expected
Answered By: Constantin Hong
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.