为何pytest-django无法找到manage.py?

时间:2019-02-08 23:58:24

标签: python django pytest pytest-django

我有一个这样的项目结构:

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.pyhttps://pytest-django.readthedocs.io/en/latest/managing_python_path.html#automatic-looking-for-of-django-projects

如果不是这种情况,那么是否有某种方法可以在setup.cfg中配置设置以将src/添加到PYTHONPATH?文档中关于使用pip以可编辑模式安装src/的建议在我们的环境中确实不可行。

1 个答案:

答案 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

为什么找不到manage.py?

首先查看谁进行pytest测试发现。

  

pytest-pythonpaths

     

pytest实现以下标准测试发现:

     
      
  • 如果未指定任何参数,则收集从测试路径(如果已配置)或当前目录开始。另外,命令行参数可以在目录,文件名或节点ID的任何组合中使用。

  •   
  • 递归到目录,除非它们与norecursedirs匹配。   在这些目录中,搜索以测试包名称导入的test _ *。py或* _test.py文件。

  •   
  • 从这些文件中收集测试项目:   在类之外测试带前缀的测试函数或方法   测试前缀测试类中的测试前缀测试函数或方法(无 init 方法)

  •   

因此,manage.py不符合测试文件的资格,因此不会自动发现,因此您需要在python路径中使用它才能运行测试。