Pytest - 如何将一个夹具用于多个 conftest 文件问题
Pytest - How to use one fixture for several conftest files issue
我有几个 pytest 套件,每个套件都有几乎相同的 conftest 文件。由于 conftest 文件包含某种重复代码,并且随着时间的推移它们可能会变大并且套件的数量也可能增加,因此我决定将 conftest 装置移动到特定路径中的另一个模块并 'import' 它使用 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 可以引用它下面的其他 conftests 中的任何夹具,使您能够在不同的套件文件夹中定义具有不同 return 值的相同夹具。只需将 var 设置为您在单独的 conftest 中为每组测试设置的夹具,根目录中的 conftest 将始终为每个测试使用正确的。
根目录
- 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)
每个测试现在都将打印在 conftest 中为其自己的测试组设置的 var,即使 运行 并行化也是如此。
我有几个 pytest 套件,每个套件都有几乎相同的 conftest 文件。由于 conftest 文件包含某种重复代码,并且随着时间的推移它们可能会变大并且套件的数量也可能增加,因此我决定将 conftest 装置移动到特定路径中的另一个模块并 'import' 它使用 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 可以引用它下面的其他 conftests 中的任何夹具,使您能够在不同的套件文件夹中定义具有不同 return 值的相同夹具。只需将 var 设置为您在单独的 conftest 中为每组测试设置的夹具,根目录中的 conftest 将始终为每个测试使用正确的。
根目录
- 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)
每个测试现在都将打印在 conftest 中为其自己的测试组设置的 var,即使 运行 并行化也是如此。