为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 pytest-django 找不到 manage.py?

为什么 pytest-django 找不到 manage.py?

犯罪嫌疑人X 2021-11-02 20:33:31
我有一个这样的项目结构:setup.cfgintegration_tests/  |----tests.pysrc/  |----manage.py  |----my_django_app/还有一个 setup.cfg :[tool:pytest]addopts=--tb=short --strict -raDJANGO_SETTINGS_MODULE = my_django_app.settingsenv =     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 项目如果不是这种情况,那么是否有某种方法可以在 setup.cfg 中配置设置以添加src/到 PYTHONPATH?文档src/中使用 pip 以可编辑模式安装的建议在我们的环境中并不能真正站得住脚。
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

您可以使用pytest-pythonpaths 插件进行 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是如何测试发现的。


Python 测试发现的约定

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


如果未指定参数,则集合从测试路径(如果已配置)或当前目录开始。或者,命令行参数可用于目录、文件名或节点 ID 的任意组合。


递归到目录中,除非它们匹配 norecursedirs。在这些目录中,搜索 test_*.py 或 *_test.py 文件,按其测试包名称导入。


从这些文件中,收集测试项: test 前缀测试函数或类之外的方法 test 前缀测试函数或方法 Test 前缀测试类内的方法(没有init方法)


因此,manage.py不符合测试文件的条件,因此不会被自动发现,您需要在 python 路径中运行您的测试。


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信