将 pytest fixtures 保存在一个位置并跨子模块使用它们
Keeping pytest fixtures in one location and using them across submodules
我正在构建一个 python 包,使用 pytest
进行所有单元测试。我的包由几个模块组成,每个模块下都有各种子模块。单元测试位于每个模块的 test
文件夹中(例如,./tumble/tumble/math/test/test_multiply.py
或 ./tumble/tumble/science/test/test_divide.py
)
我有一些固定装置要在所有模块和子模块中共享。因此,我想将它们放在中心位置,在本例中为 ./tumble/tumble/test
,并且每个子模块(math/test
和 science/test
)中没有重复的固定装置。
如果我将 conftest.py
放在每个子模块的 test
文件夹中,一切都会按预期进行。但是,我在两个位置有相同的固定装置,这并不理想。
当我将固定装置放在中央位置时,我可以在使用命令 pytest --fixtures
时看到它们,但是,当我 运行 pytest
时,它告诉我fixture not found
并且夹具未在 available fixtures
中列出。
我是否需要将我的所有单元测试移动到 test
文件夹下,或者我可以做些什么来将单元测试保留在子模块中,但将固定装置放在中央位置?
tumble
+-- setup.py
+-- README.md
+-- tumble
| +-- math
| | +-- __init__.py
| | +-- multiply.py
| | +-- test
| | +-- __init__.py
| | | +-- test
| | | | +-- __init__.py
| | | | +-- test_multiply.py
| +-- science
| | +-- __init__.py
| | +-- divide.py
| | +-- test
| | +-- __init__.py
| | | +-- test
| | | | +-- __init__.py
| | | | +-- test_divide.py
| +-- test
| | +-- __init__.py
| | +-- conftest.py
multiply.py
def multipy(x, y):
return x * y
conftest.py
import pytest
@pytest.fixture()
def numbers():
return (1, 5, 10)
test_multiply.py
import tumble
import pytest
assert tumble.multiply(numbers[0], numbers[1]) == 5
来自 pytest doc and about plugins in pytest :
Local conftest.py plugins contain directory-specific hook
implementations. Hook Session and test running activities will invoke
all hooks defined in conftest.py files closer to the root of the
filesystem
因此,为了让您的测试知道夹具,它应该在层次结构中更高。
即把你的共享灯具放在根文件夹下,/tumble/conftest.py
我正在构建一个 python 包,使用 pytest
进行所有单元测试。我的包由几个模块组成,每个模块下都有各种子模块。单元测试位于每个模块的 test
文件夹中(例如,./tumble/tumble/math/test/test_multiply.py
或 ./tumble/tumble/science/test/test_divide.py
)
我有一些固定装置要在所有模块和子模块中共享。因此,我想将它们放在中心位置,在本例中为 ./tumble/tumble/test
,并且每个子模块(math/test
和 science/test
)中没有重复的固定装置。
如果我将 conftest.py
放在每个子模块的 test
文件夹中,一切都会按预期进行。但是,我在两个位置有相同的固定装置,这并不理想。
当我将固定装置放在中央位置时,我可以在使用命令 pytest --fixtures
时看到它们,但是,当我 运行 pytest
时,它告诉我fixture not found
并且夹具未在 available fixtures
中列出。
我是否需要将我的所有单元测试移动到 test
文件夹下,或者我可以做些什么来将单元测试保留在子模块中,但将固定装置放在中央位置?
tumble
+-- setup.py
+-- README.md
+-- tumble
| +-- math
| | +-- __init__.py
| | +-- multiply.py
| | +-- test
| | +-- __init__.py
| | | +-- test
| | | | +-- __init__.py
| | | | +-- test_multiply.py
| +-- science
| | +-- __init__.py
| | +-- divide.py
| | +-- test
| | +-- __init__.py
| | | +-- test
| | | | +-- __init__.py
| | | | +-- test_divide.py
| +-- test
| | +-- __init__.py
| | +-- conftest.py
multiply.py
def multipy(x, y):
return x * y
conftest.py
import pytest
@pytest.fixture()
def numbers():
return (1, 5, 10)
test_multiply.py
import tumble
import pytest
assert tumble.multiply(numbers[0], numbers[1]) == 5
来自 pytest doc and about plugins in pytest :
Local conftest.py plugins contain directory-specific hook implementations. Hook Session and test running activities will invoke all hooks defined in conftest.py files closer to the root of the filesystem
因此,为了让您的测试知道夹具,它应该在层次结构中更高。
即把你的共享灯具放在根文件夹下,/tumble/conftest.py