我有几个pytest套件,每个套件几乎都有相同的conftest文件。由于conftest文件包含一种重复的代码,并且随着时间的推移可能会增加且套件的数量也可能会增加,因此我决定将Conftest固定装置移至特定路径中的另一个模块,并使用pytest_plugins
变量"导入"它conftest文件。
有一个问题。有一个固定装置取决于conftest文件的局部变量。如何将固定装置移至另一个模块,并强迫它使用conftest文件的局部变量?
new_conftest_module.py
var = 1
@pytest.fixture(scope="session", autouse=True)
def session_init():
do_something(var)
test_dir1/conftest.py
pytest_plugins = ['new_conftest_module']
var = 2
test_dir2/conftest.py
pytest_plugins = ['new_conftest_module']
var = 3
这是一个虚拟的示例,但是您可以看到的问题是var
变量对每个conftest文件都有特殊性,但是使用它的固定装置是相同的。在为每个套件使用特定的var
值时,我可以使用解决方案以将固定装置在公共模块中吗?
conftest.py可以引用其下面其他conftest中的任何固定装置,从而使您能够在不同的套件文件夹中定义具有不同返回值的相同固定装置。只需将var作为您在每个测试中单独的contest中设置的固定装置,而根目录中的conftest将始终将正确的一个用于每个测试。
rootdir
- conftest.py
- test_group_1
- conftest.py
- test_group_2
- conftest.py
test_group_1/conftest.py
@fixture
def group_var():
return 1
test_group_2/conftest.py
@fixture
def group_var():
return 2
rootdir/conftest.py
@fixture
def do_something(group_var):
print(group_var)
现在,每个测试都将打印在其自己的测试组中设置的VAR,即使并行运行。