如何将参数传递给Pytest中的fixture函数?
如何将参数传递给Pytest中的fixture函数?
我正在使用py.test来测试一些封装在Python类MyTester中的DLL代码。
为了验证目的,在测试过程中我需要记录一些测试数据,并在之后进行更多的处理。由于我有很多test_...文件,我想要在大多数测试中重用测试对象的创建(即MyTester的实例)。
由于测试对象是具有对DLL变量和函数的引用,我需要为每个测试文件(要记录的变量对于test_...文件是相同的)向测试对象传递DLL变量的列表。
列表的内容用于记录指定的数据。
我的想法是这样做:
import pytest class MyTester(): def __init__(self, arg = ["var0", "var1"]): self.arg = arg # self.use_arg_to_init_logging_part() def dothis(self): print "this" def dothat(self): print "that" # 位于conftest.py中(因为其他测试将重用它) @pytest.fixture() def tester(request): """ create tester object """ # 如何使用下面的列表作为arg? _tester = MyTester() return _tester # 位于test_...py中 # @pytest.mark.usefixtures("tester") class TestIt(): # def __init__(self): # self.args_for_tester = ["var1", "var2"] # # 如何将这个列表传递给tester fixture? def test_tc1(self, tester): tester.dothis() assert 0 # 仅用于演示目的 def test_tc2(self, tester): tester.dothat() assert 0 # 仅用于演示目的
是否可以像这样实现,或者是否有更优雅的方法?
通常,我可以为每个测试方法做一些设置函数(xUnit风格)。但是我想要实现一些重用。有人知道是否可以通过fixture实现这一点吗?
我知道我可以做类似于以下的事情:(来自文档)
@pytest.fixture(scope="module", params=["merlinux.eu", "mail.python.org"])
但我需要在测试模块中直接进行参数化。
是否可以从测试模块访问fixture的params属性?