<p>1)首先,您不仅可以在conftest.py中声明这些fixture,还可以在您想要的每个Python模块中声明这些fixture。你可以导入那个模块。
也可以使用与使用设置方法相同的装置:</p>
<pre><code>@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
</code></pre>
<p>或者可以在单独的装置中定义单独的变量:</p>
<pre><code>def fixture_a():
return varA
def fixture_b():
return varB
def fixture_c():
return varC
def fixture_mod_A():
return modified_varA
</code></pre>
<p>或者制作一个返回所有变量的fixture(为什么不?)
或者甚至制作间接参数化的fixture,根据您的选择返回变量(相当混乱的方式):</p>
<pre><code>@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
...
</code></pre>
<p>或者你甚至可以做夹具工厂,这将为你的夹具飞行。当你只有5个测试和5个变量配置时,听起来很奇怪,但是当你同时得到数百个测试和配置时,它可能会很有用。</p>
<p>3)当然可以。但我建议您不要直接导入此文件,而是使用命令行选项来指向要导入的文件。在这种情况下,您可以选择另一个带有变量的文件,而无需更改代码。</p>
<p>4)我在测试中使用类,因为我是从nosetest迁移过来的。我没有提到在pytest中使用类有任何问题。</p>
<p>5)在这种情况下,我建议您执行以下操作:
首先用所需的动作来完成功能:</p>
<pre><code>def some_actions(a, b):
# some actions here
...
return c
</code></pre>
<p>然后在测试和夹具中使用:</p>
<pre><code>def test():
assert some_actions(1,2) == 10
@pytest.fixture()
def some_fixture():
return some_actions(1,2)
</code></pre>