【发布时间】:2017-02-02 19:39:40
【问题描述】:
可以从命令行参数对测试函数进行参数化。 可以将一个固定装置限定为一个类。 我想将这两件事结合起来,以便每个类都接收到给类中的固定装置的参数化参数。
(本质上,根据命令行参数,我需要运行一个非常昂贵的操作,然后针对该操作的结果进行各种廉价、快速的测试,而且我不希望重新运行昂贵的操作每个便宜的测试,所以我想要一种方法来保存它)
换句话说,我正在寻找一个等效于 pytest_generate_tests(metafunc) 的方法,它可以用于动态参数化一个夹具,而不是一个测试函数。
我已经尝试过的一件事是读取请求参数并通过 pytest_generate_tests 钩子设置 那些。
conftest.py:
def pytest_generate_tests(metafunc):
metafunc.parametrize("result", [
(1,0),(1,2)
])
test_thing.py:
class TestThingy:
@pytest.fixture(scope="class")
def result(self, request):
a,b=request.param
return a+b
#@pytest.mark.parametrize("result", [(0, 1), (1, 2)])
def test_one(self, result):
assert result!=2
运行此测试会引发以下错误(请注意,当我在没有 conftest 钩子且未注释注释行的情况下尝试测试时,测试运行良好):
@pytest.fixture(scope="class")
def result(self, request):
a,b=request.param
AttributeError: 'SubRequest' 对象没有属性 'param'
我也对任何其他实现相同结果的替代方法感兴趣。
【问题讨论】:
-
如果 py.test 团队能够参与进来,那就太好了。文档在这一点上根本不清楚。
标签: python testing pytest fixture