我正在构建一个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
答案 0 :(得分:3)
来自pytest doc和about plugins in pytest:
本地conftest.py插件包含特定于目录的挂钩 实现。将调用Hook Session和测试运行活动 conftest.py文件中定义的所有挂钩更接近于根目录 文件系统
所以,为了让你的测试知道夹具,它应该在层次结构中更高。
即将您的共享灯具放在根文件夹/tumble/conftest.py