Django:可重用应用程序的测试设置?
Django: settings for tests of a reusable app?
我在 Django 中创建了一个小应用程序,运行服务器和管理工作正常。
我写了一些可以用 python manage.py test
调用的测试,测试通过了。
现在我想通过 PyCharm 调用一个特定的测试。
这样失败了:
/home/guettli/x/venv/bin/python
/snap/pycharm-community/179/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py
--path /home/guettli/x/xyz/tests.py
Launching pytest with arguments /home/guettli/x/xyz/tests.py in /home/guettli/x
============================= test session starts ==============================
platform linux -- Python 3.6.9, pytest-5.4.1, py-1.8.1, pluggy-0.13.1 --
cachedir: .pytest_cache
rootdir: /home/guettli/x
collecting ...
xyz/tests.py:None (xyz/tests.py)
xyz/tests.py:6: in <module>
from . import views
xyz/views.py:5: in <module>
from xyz.models import Term, SearchLog, GlobalConfig
xyz/models.py:1: in <module>
from django.contrib.auth.models import User
venv/lib/python3.6/site-packages/django/contrib/auth/models.py:2: in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
venv/lib/python3.6/site-packages/django/contrib/auth/base_user.py:47: in <module>
class AbstractBaseUser(models.Model):
venv/lib/python3.6/site-packages/django/db/models/base.py:107: in __new__
app_config = apps.get_containing_app_config(module)
venv/lib/python3.6/site-packages/django/apps/registry.py:252: in get_containing_app_config
self.check_apps_ready()
venv/lib/python3.6/site-packages/django/apps/registry.py:134: in check_apps_ready
settings.INSTALLED_APPS
venv/lib/python3.6/site-packages/django/conf/__init__.py:76: in __getattr__
self._setup(name)
venv/lib/python3.6/site-packages/django/conf/__init__.py:61: in _setup
% (desc, ENVIRONMENT_VARIABLE))
E django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS,
but settings are not configured. You must either define the environment variable
DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Assertion failed
collected 0 items / 1 error
我了解背景:我的应用程序 xyz
是可重用的。它不包含任何设置。
该应用不知道(也不应该知道)我的项目。但是设置在我的项目中。
如何解决?
我阅读了很棒的 django 文档,但找不到解决方案。
如果您使用 "Run" (ctrl-shift-F10) 直接从 PyCharm 执行一项特定测试,如何设置 DJANGO_SETTINGS_MODULE
?
您可以添加DJANGO_SETTINGS_MODULE作为环境变量:
在菜单中:运行 -> 编辑配置 -> 模板 -> Python 测试 -> 单元测试
并删除旧的 "Unittests for tests...." 个条目。
您可以在测试命令中指定设置
假设你在xyz目录下,结构是
/xyz
- manage.py
- xyz/
- settings.py
以下命令应该有效
python manage.py test --settings=xyz.settings
已编辑:为了使此方法起作用,我应该在 pycharm 中启用 django 支持。我想应该可以在 pycharm.
的社区版中设置等效模板
启用django支持的方法:
我发现最方便的方法也允许您直接单击特定测试用例并直接在 pycharm 中 运行 它而无需每次都进行设置以下:
->编辑配置(Run/Debug 个配置)
->模板和 select "Django Tests"
->勾选 "Custom settings" 然后浏览到您要使用的设置。
然后当您直接在 pycharm 中启动测试时,它会将其用作模板。
如果您使用 pycharm 支持的任何其他方法进行测试,您可以在 pycharm 中选择测试框架:Choose testing framework
然后为它创建一个模板。
如果你用django和pytest,那我推荐这个插件pytest-django
它提供了一种通过配置设置 DJANGO_SETTINGS_MODULE 的简单方法。
[pytest]
DJANGO_SETTINGS_MODULE = test_settings
我在 Django 中创建了一个小应用程序,运行服务器和管理工作正常。
我写了一些可以用 python manage.py test
调用的测试,测试通过了。
现在我想通过 PyCharm 调用一个特定的测试。
这样失败了:
/home/guettli/x/venv/bin/python
/snap/pycharm-community/179/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py
--path /home/guettli/x/xyz/tests.py
Launching pytest with arguments /home/guettli/x/xyz/tests.py in /home/guettli/x
============================= test session starts ==============================
platform linux -- Python 3.6.9, pytest-5.4.1, py-1.8.1, pluggy-0.13.1 --
cachedir: .pytest_cache
rootdir: /home/guettli/x
collecting ...
xyz/tests.py:None (xyz/tests.py)
xyz/tests.py:6: in <module>
from . import views
xyz/views.py:5: in <module>
from xyz.models import Term, SearchLog, GlobalConfig
xyz/models.py:1: in <module>
from django.contrib.auth.models import User
venv/lib/python3.6/site-packages/django/contrib/auth/models.py:2: in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
venv/lib/python3.6/site-packages/django/contrib/auth/base_user.py:47: in <module>
class AbstractBaseUser(models.Model):
venv/lib/python3.6/site-packages/django/db/models/base.py:107: in __new__
app_config = apps.get_containing_app_config(module)
venv/lib/python3.6/site-packages/django/apps/registry.py:252: in get_containing_app_config
self.check_apps_ready()
venv/lib/python3.6/site-packages/django/apps/registry.py:134: in check_apps_ready
settings.INSTALLED_APPS
venv/lib/python3.6/site-packages/django/conf/__init__.py:76: in __getattr__
self._setup(name)
venv/lib/python3.6/site-packages/django/conf/__init__.py:61: in _setup
% (desc, ENVIRONMENT_VARIABLE))
E django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS,
but settings are not configured. You must either define the environment variable
DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Assertion failed
collected 0 items / 1 error
我了解背景:我的应用程序 xyz
是可重用的。它不包含任何设置。
该应用不知道(也不应该知道)我的项目。但是设置在我的项目中。
如何解决?
我阅读了很棒的 django 文档,但找不到解决方案。
如果您使用 "Run" (ctrl-shift-F10) 直接从 PyCharm 执行一项特定测试,如何设置 DJANGO_SETTINGS_MODULE
?
您可以添加DJANGO_SETTINGS_MODULE作为环境变量:
在菜单中:运行 -> 编辑配置 -> 模板 -> Python 测试 -> 单元测试
并删除旧的 "Unittests for tests...." 个条目。
您可以在测试命令中指定设置
假设你在xyz目录下,结构是
/xyz
- manage.py
- xyz/
- settings.py
以下命令应该有效
python manage.py test --settings=xyz.settings
已编辑:为了使此方法起作用,我应该在 pycharm 中启用 django 支持。我想应该可以在 pycharm.
的社区版中设置等效模板启用django支持的方法:
我发现最方便的方法也允许您直接单击特定测试用例并直接在 pycharm 中 运行 它而无需每次都进行设置以下:
->编辑配置(Run/Debug 个配置)
->模板和 select "Django Tests"
->勾选 "Custom settings" 然后浏览到您要使用的设置。
然后当您直接在 pycharm 中启动测试时,它会将其用作模板。
如果您使用 pycharm 支持的任何其他方法进行测试,您可以在 pycharm 中选择测试框架:Choose testing framework 然后为它创建一个模板。
如果你用django和pytest,那我推荐这个插件pytest-django
它提供了一种通过配置设置 DJANGO_SETTINGS_MODULE 的简单方法。
[pytest]
DJANGO_SETTINGS_MODULE = test_settings