DJANGO_SETTINGS_MODULE已定义,项目设置通过`python manage.py`导入,但django-pytest找不到django设置

时间:2014-09-02 11:55:13

标签: python django pytest

问题概要:

我想用django-pytest来测试我的django脚本但py.test抱怨它找不到DJANGO_MODULE_SETTINGS。我已经按照django-pytest的文档设置了DJANGO_MODULE_SETTINGS。我没有从py.test获得预期的行为。

我想帮助解决此问题。 提前谢谢。

参考 - django-pytest documentation

在virtualevn postactivate脚本中设置DJANGO_SETTINGS_MODULE:

  1. 在新的shell中,未设置$ DJANGO_SETTINGS_MODULE。

    我希望$ DJANGO_SETTINGS_MODULE为None。它 是

       In: echo $DJANGO_SETTINGS_MODULE
       Out:
    
  2. .virtualenv/browsing/bin/postactivate

    的内容

    如django-pytest文档中所述,可以设置 $ DJANGO_SETTINGS_MODULE通过在postactivate中导出它 virutalenv的脚本。

    export DJANGO_SETTINGS_MODULE=automated_browsing.settings
    
  3. 在终端cli:

    正如预期的那样,定义了$ DJANGO_SETTING_MODULE。

    # activate the virtualenv
    In: workon browsing
    In: echo $DJANGO_SETTINGS_MODULE
    Out: automated_browsing.settings 
    

    正如预期的那样,设置模块的设置如服务器运行时所示

     # cd into django project
     In: cd ../my_django/automated_browsing
     # see if server runs
     In: python manage.py runserver
     Out: # output
       Validating models...
    
       0 errors found
       September 02, 2014 - 10:45:35
       Django version 1.6.6, using settings 'automated_browsing.settings'
       Starting development server at http://127.0.0.1:8000/
       Quit the server with CONTROL-C.
     In: ^C
    

    如预期的那样,py.test无法找到它。

       In: echo $DJANGO_SETTINGS_MODULE
       Out: automated_browsing.settings
       In: py.test tests/test_browser.py
       Out: …
        _pytest.config.UsageError: Could not import settings 
       'automated_browsing.settings'
       (Is it on sys.path? Is there an import error in the settings file?)
       No module named automated_browsing.settings
    
  4. 已安装的软件包

    1. 的Django == 1.6.6
    2. EasyProcess == 0.1.6
    3. PyVirtualDisplay == 0.1.5
    4. 南== 1.0
    5. argparse == 1.2.1
    6. IPython的== 2.2.0
    7. LXML == 3.3.6
    8. psycopg2 == 2.5.4
    9. PY == 1.4.23
    10. pytest-django的== 2.6.2
    11. pytest == 2.6.1
    12. 硒== 2.42.1
    13. 测试-PKG == 0.0
    14. ==的wsgiref 0.1.2

2 个答案:

答案 0 :(得分:1)

今天遇到同样的问题。在项目/设置/中,您必须创建 init .py。像这样django识别文件夹。

在我的情况下,我只输入 __ inti __。py ,这是错误的。我更正了 inti .py - > init .py并且运行正常。

希望它有所帮助。 诉

答案 1 :(得分:0)

受到this answer的启发,我解决了我的问题。

根据django-pytest documentation for managing the python path

  

默认情况下,pytest-django尝试通过查找Django项目   自动查找项目的manage.py文件并添加它   目录到Python路径。

我假设在包含py.test tests/test_browser.py的django项目中执行manage.py会处理PYTHONPATH。在我的情况下,这是一个不正确的假设。

我将以下内容添加到.virtualenv/$PROJECT/bin/postactivate

export PYTHONPATH=$PYTHONPATH:$HOME/development/my_python/my_django/automated_browsing

现在py.test按预期工作。