1) 首先,您不仅可以在conftest.py 中声明这些装置,还可以在您想要的每个Python 模块中声明这些装置。您可以导入该模块。
您也可以按照与使用 setUp 方法相同的方式使用固定装置:
@pytest.fixture(scope='class')
def input(request):
request.cls.varA = 1
request.cls.varB = 2
request.cls.varC = 3
request.cls.modified_varA = 2
@pytest.usefixtures('input')
class TestClass:
def test_1(self):
do_something_with_self.varA, self.varB
def test_2(self):
do_something_with_self_modified_varA, self.varC
或者您可以在单独的装置中定义单独的变量:
def fixture_a():
return varA
def fixture_b():
return varB
def fixture_c():
return varC
def fixture_mod_A():
return modified_varA
或者制作一个返回所有变量的夹具(为什么不呢?)
甚至制作间接参数化夹具,根据您的选择返回变量(相当令人困惑的方式):
@pytest.fixture()
def parametrized_input(request):
vars = {'varA': 1, 'varB': 2, 'varC': 3}
var_names = request.param
return (vars[var_name] for var_name in var_names)
@pytest.mark.parametrize('parametrized_input', [('varA', 'varC')], indirect=True)
def test_1(parametrized_input)
varA, varC = parametrized_input
...
或者,您甚至可以创建夹具工厂,它可以为您即时制造夹具。当您只有 5 个测试和 5 个变量配置时,这听起来很奇怪,但是当您同时获得数百个测试和变量配置时,它可能会很有用。
3)当然可以。但我建议您不要直接导入此文件,而是使用命令行选项指向要导入的文件。在这种情况下,您可以选择另一个包含变量的文件,而无需更改代码。
4)我在测试中使用类,因为我是从nosetest迁移的。我没有提到在 pytest 中使用类有任何问题。
5)在这种情况下,我建议您执行以下操作:
首先使用所需的操作来创建函数:
def some_actions(a, b):
# some actions here
...
return c
然后在测试和夹具中使用它:
def test():
assert some_actions(1,2) == 10
@pytest.fixture()
def some_fixture():
return some_actions(1,2)