pytest 找不到位于测试目录下的辅助模块
pytest can't find helper modules located under the tests directory
当使用 PyCharm 启动我的测试时,我完全没有导入问题,但如果我在终端中执行此操作,pytest 会抱怨找不到模块。正是 tests/tools
.
下的那些
项目文件夹结构:
src/
app/
tests/
end_to_end/ # End to end/Acceptance tests
tools/ # Helper modules used by some tests
unit # Unit tests
setup.py
setup.py
的相关部分:
setup(...
packages=find_packages('src'),
package_dir={'': 'src'},
install_requires=['requests'],
test_suite='tests',
tests_require=[
'flexmock',
'pytest',
'wsgi_intercept'
])
执行时导入失败的行 py.test tests/end_to_end
,无论 virtualenv 是否处于活动状态。从 app
包导入的模块没问题:
from tests.tools.foomodule import Foo # Fails
from app.barmodule import Bar # Doesn't fail
我必须使用 pip install -e packagename
安装我的包,以便在从命令行进行 运行 测试时 可用 用于 pytest。我想我必须将 tools
文件夹作为一个包添加到我的 setup.py
中,但这对我来说很难看,因为这些模块仅用于帮助测试过程,并不打算分发.
另一方面,我可以在 integration advices from pytest website.
之后使用 python setup.py test
启动我的测试
可能您的 tests
and/or tests/tools
目录中没有 __init__.py
。
如果错过 python 确实将它们视为包并且无法导入它们。
您可以:
- 添加
__init__.py
(错误参见 here
- 将 tests/tools 添加到
conftest.py
中的 PYTHONPATH 并导入一个文件(从 import tests.tools.MODULE
到 import MODULE
)
为了能够导入驻留在 src
文件夹之外的模块,我在 PyCharm 中转到 "Project settings",然后在 "Project structure" 中我标记了 tests/end_to_end
和tests/unit
作为 source folders.
我也改变了主意,决定将我的辅助模块放在这些文件夹中。这样我就可以直接导入它们,我的测试 运行 在终端也很好,因为当前工作目录总是添加到 PYTHONPATH
.
当使用 PyCharm 启动我的测试时,我完全没有导入问题,但如果我在终端中执行此操作,pytest 会抱怨找不到模块。正是 tests/tools
.
项目文件夹结构:
src/
app/
tests/
end_to_end/ # End to end/Acceptance tests
tools/ # Helper modules used by some tests
unit # Unit tests
setup.py
setup.py
的相关部分:
setup(...
packages=find_packages('src'),
package_dir={'': 'src'},
install_requires=['requests'],
test_suite='tests',
tests_require=[
'flexmock',
'pytest',
'wsgi_intercept'
])
执行时导入失败的行 py.test tests/end_to_end
,无论 virtualenv 是否处于活动状态。从 app
包导入的模块没问题:
from tests.tools.foomodule import Foo # Fails
from app.barmodule import Bar # Doesn't fail
我必须使用 pip install -e packagename
安装我的包,以便在从命令行进行 运行 测试时 可用 用于 pytest。我想我必须将 tools
文件夹作为一个包添加到我的 setup.py
中,但这对我来说很难看,因为这些模块仅用于帮助测试过程,并不打算分发.
另一方面,我可以在 integration advices from pytest website.
之后使用python setup.py test
启动我的测试
可能您的 tests
and/or tests/tools
目录中没有 __init__.py
。
如果错过 python 确实将它们视为包并且无法导入它们。
您可以:
- 添加
__init__.py
(错误参见 here - 将 tests/tools 添加到
conftest.py
中的 PYTHONPATH 并导入一个文件(从import tests.tools.MODULE
到import MODULE
)
为了能够导入驻留在 src
文件夹之外的模块,我在 PyCharm 中转到 "Project settings",然后在 "Project structure" 中我标记了 tests/end_to_end
和tests/unit
作为 source folders.
我也改变了主意,决定将我的辅助模块放在这些文件夹中。这样我就可以直接导入它们,我的测试 运行 在终端也很好,因为当前工作目录总是添加到 PYTHONPATH
.