python - 如何将列表装置作为参数传递给 pytest.parametrize?

标签 python pytest fixtures parametrize

我有一个返回列表的固定装置,我想为该列表中的每个元素创建一个测试,因此我尝试将其作为 pytest.parametrize 中的参数传递,但它返回整个列表并仅创建一次测试。

@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'

结果是:

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

这只是我想要做的一个例子,因为真正的代码更复杂。 字母必须是一种固定装置,而不仅仅是一种功能

最佳答案

使用 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'

另一种选择是:

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'

输出:

================================================================================ 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 ===============================================================================

关于python - 如何将列表装置作为参数传递给 pytest.parametrize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70972985/

相关文章:

python - pandas groupby 作为列表返回空,同时使用 agg 和 apply 函数

django.core.exceptions.AppRegistryNotReady : Apps aren't loaded yet with Django pytest

python - 在 Pytest 中测试具有许多固定装置/场景的单个单元测试用例

python - 是否可以使用 Django 的固定装置更改现有数据?

django - 是否可以在 Django 的测试中使用来自其他应用程序的固定装置?

python - 连接boto3 S3时如何指定凭据?

python - 关于使用 Queue()/deque() 和类变量进行通信和 "poison pill"的进程与线程

模仿 javascript || 的 Python 运算符运算符(operator)

python-3.x - 与 pytest 一起使用时禁用日志记录

pytest - 如何在 pytest fixture 中获取参数 ID?