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,即使 运行 并行化也是如此。