【问题标题】:Running the same test on two different fixtures在两个不同的夹具上运行相同的测试
【发布时间】:2017-09-14 15:43:17
【问题描述】:

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

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


def test_something(foo):
    # assert something about foo

现在我正在创建一个稍微不同的装置,比如说

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

我需要对第二个夹具重复完全相同的测试。在不复制/粘贴测试和更改参数名称的情况下如何做到这一点?

【问题讨论】:

  • 我懒得弄清楚细节,但这看起来可能会有所帮助:docs.pytest.org/en/latest/…
  • @wim 这看起来可能适合我的目的。感谢您的链接。

标签: python pytest fixtures


【解决方案1】:

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

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

使用间接参数化定义测试(参数名称arg 和夹具名称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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2017-05-16
相关资源
最近更新 更多