pytest中参数的夹具输出

时间:2016-01-09 21:04:31

标签: python pytest

我今天坐下来更好地学习py.test并发现文档的网站已关闭(pytest.org)所以如果在那里找到这个问题的答案,我会道歉。

我想要做的是将两个灯具的输出传递给参数化,如下所示:

tbIcon.TrayPopupResolved.IsOpen = false;

但测试失败,因为不是将灯具的输出分配给参数“arg”,而是传递灯具(功能)本身。

如何以这种方式参数化各种灯具的输出?

1 个答案:

答案 0 :(得分:1)

这个[丑陋/大规模的黑客]会不会这样做?我很感激它远非理想 - 我不知道是否有办法创建一个懒惰评估的装置,让你做你想做的事情。

import pytest

@pytest.fixture
def make_1():
    return 1

@pytest.fixture
def make_2():
    return 2

@pytest.fixture
def all_makes(make_1, make_2):
    return (make_1, make_2)

def _test_thing(make):
    # Run your test
    pass

def test_main(all_makes):
    for make in all_makes:
        try:
            _test_thing(make)
        except AssertionError:
            print "Failed for make {}".format(make)
            raise

一个可能更好的选择可能是参数化夹具本身(如果可能) - 参考文档:https://pytest.org/latest/fixture.html#parametrizing-a-fixture

@pytest.fixture(params=[1, 2])
def make(request):
    return request.param

def test_make(make):
    # Run your test
    pass

如果你的不同' make'灯具是超级不同的,你可以有类似的东西:

def build_make_1():
    return 1

def build_make_2():
    return 2

@pytest.fixture(params=[build_make_1, build_make_2])
def make(request):
    return request.param()

def test_make(make):
    # Run your test
    pass