2

I have a fixture that returns a list, and I want to create a test for each element in that list, so I was trying to pass it as an argument in pytest.parametrize, but it returns the whole list and just creates a single test.

@pytest.fixture()
def letters():
    lettersABC = ['A', 'B', 'C', 'D']
    return lettersABC 
@pytest.mark.asyncio
@pytest.mark.parametrize('letter', ["letters"])
async def test_per_letter(letter, request):
    name = request.getfixturevalue(letter)
    print(f'name {name}')
    assert name == 'A'

The result of this is:

FAILED digital_alarms_auto_test.py::test_per_letter[letters] - AssertionError: assert ['A', 'B', 'C', 'D'] == 'A'
===================================================================================================== 1 failed,

This is just an example of what I want to do as the real code is more complex. Letters has to be a fixture, not just a function

kimmil07
  • 21
  • 2

1 Answers1

3

Using a fixture:

@pytest.fixture(params=['A', 'B', 'C', 'D'])
def letters(request):
    return request.param


def test_per_letter(letters):
    name = letters
    print(f'name {name}')
    assert name == 'A'

An alternative would be :

def pytest_generate_tests(metafunc):
    if 'letters' in metafunc.fixturenames:
        lettersABC = ['A', 'B', 'C', 'D']
        metafunc.parametrize('letters', lettersABC)


def test_per_letter(letters):
    name = letters
    print(f'name {name}')
    assert name == 'A'

Output:

================================================================================ short test summary info =================================================================================
    FAILED main_test.py::test_per_letter[B] - AssertionError: assert 'B' == 'A'
    FAILED main_test.py::test_per_letter[C] - AssertionError: assert 'C' == 'A'
    FAILED main_test.py::test_per_letter[D] - AssertionError: assert 'D' == 'A'
============================================================================== 
3 failed, 1 passed in 0.14s ===============================================================================
Devang Sanghani
  • 731
  • 5
  • 14