python - 在两个不同的 fixture 上运行相同的测试

标签 python pytest fixtures

我有一个测试目前使用这样的单个 fixture 运行:

@pytest.fixture()
def foo():
    return 'foo'


def test_something(foo):
    # assert something about foo

现在我正在创建一个稍微不同的 fixture ,比方说

@pytest.fixture
def bar():
    return 'bar'

我需要针对第二个 fixture 重复完全相同的测试。如果不复制/粘贴测试并更改参数名称,我该怎么做?

最佳答案

除了测试生成之外,您还可以为动态应用的任意数量的子 fixture 执行“fixture 方式”。为此,定义要用作参数的实际 fixture :

@pytest.fixture
def arg(request):
    return request.getfuncargvalue(request.param)

使用间接参数化定义测试(参数名称 arg 和 fixture 名称 arg 必须匹配):

@pytest.mark.parametrize('arg', ['foo', 'bar'], indirect=True)
def test_me(arg):
    print(arg)

我们还定义我们引用的那些固定装置:

@pytest.fixture
def foo():
    return 'foo'

@pytest.fixture
def bar():
    return 'bar'

观察这些测试的参数化和识别有多好:

$ pytest test_me.py -s -v -ra
collected 2 items                                                                                

test_me.py::test_me[foo] foo
PASSED
test_me.py::test_me[bar] bar
PASSED

关于python - 在两个不同的 fixture 上运行相同的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46223358/

相关文章:

python - Pytest django 数据库访问不允许使用 django_db 标记

Python:将类对象转换为 JSON - 对象不可 JSON 序列化

python - 如何将 pytest.mark 装饰器包装在另一个装饰器中并维护所有属性?

python - 使用Python Pandas的数据透视表,单价总和

python - 为 celery 任务编写测试时出错

python - 使用 Python unittest : how to improve granularity? 进行集成测试

python - 是否可以编写将模拟装饰器应用于函数的函数级 pytest fixture ?

python - 如何将服务器作为 py.test 的 fixture 运行

python - 在Python中调整时间列表的开始和结束范围

python - 如何将字符串转换为在 Django 中调用模型的名称?