我有一个这样的项目结构:
setup.cfg
integration_tests/
|----tests.py
src/
|----manage.py
|----my_django_app/
还有一个setup.cfg:
[tool:pytest]
addopts=--tb=short --strict -ra
DJANGO_SETTINGS_MODULE = my_django_app.settings
env =
APP_ENV=testing
USE_SQLITE_DB=True
但是当我导航到该目录结构的顶部并运行pytest
时,会得到以下信息:
“ pytest-django找不到Django项目(找不到manage.py文件)。您必须将Django项目显式添加到Python路径中才能将其拾取。”
如果我改为导航到/src/
并运行pytest
,则测试运行没有问题,尽管很明显,因为我处于较低级别,因此没有任何集成测试运行。
根据文档,似乎它应该从运行pytest
的位置向下钻取以尝试找到manage.py
:https://pytest-django.readthedocs.io/en/latest/managing_python_path.html#automatic-looking-for-of-django-projects
如果不是这种情况,那么是否有某种方法可以在setup.cfg中配置设置以将src/
添加到PYTHONPATH?文档中关于使用pip以可编辑模式安装src/
的建议在我们的环境中确实不可行。
答案 0 :(得分:3)
您可以将VSTO add-in插件用于pytests。
示例:
[pytest]
python_paths = your/path/apps your/path/libs
在您的特定情况下:
[tool:pytest]
addopts=--tb=short --strict -ra
DJANGO_SETTINGS_MODULE = my_django_app.settings
env =
APP_ENV=testing
USE_SQLITE_DB=True
python_paths = src
首先查看谁进行pytest测试发现。
pytest-pythonpaths
pytest实现以下标准测试发现:
如果未指定任何参数,则收集从测试路径(如果已配置)或当前目录开始。另外,命令行参数可以在目录,文件名或节点ID的任何组合中使用。
递归到目录,除非它们与norecursedirs匹配。 在这些目录中,搜索以测试包名称导入的test _ *。py或* _test.py文件。
从这些文件中收集测试项目: 在类之外测试带前缀的测试函数或方法 测试前缀测试类中的测试前缀测试函数或方法(无 init 方法)
因此,manage.py
不符合测试文件的资格,因此不会自动发现,因此您需要在python路径中使用它才能运行测试。