Django.core.exceptions在python中运行selenium functional test时发生配置错误

2024-04-25 07:32:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前也遇到过类似的问题,我收到了一个几乎相同的错误消息,即

C:\Users\David J\optilab\optilab_project>python functional_tests.py
Traceback (most recent call last):
  File "functional_tests.py", line 4, in <module>
    from optilab.models import Design
  File "C:\Users\David J\optilab\optilab_project\optilab\models.py", line 10, in <module>
    class Design(models.Model):
  File "C:\Users\David J\optilab\optilab_project\optilab\models.py", line 11, in Design
    name = models.CharField(max_length=30)
  File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line 1072, in __init__
    super(CharField, self).__init__(*args, **kwargs)
  File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line 166, in __init__
    self.db_tablespace = db_tablespace or settings.DEFAULT_INDEX_TABLESPACE
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 55, in __getattr__
    self._setup(name)
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 41, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

但是它的产生是因为我在shell中错误地调用了我的测试。现在我正在尝试运行一个功能测试,在成功使用命令之前,我已经做了好几次了 "python functional_tests.py" 在我的项目文件夹中——但它会产生上面的错误消息。有人能告诉我我做错了什么吗?或者为什么这以前有用,但现在不行?谢谢。在

编辑: 这是功能性的_测试.py公司名称:

^{pr2}$

Tags: djangoinpydbsettingsinitmodelslib
2条回答

脚本的开头应该是这样的

import os, sys
sys.path.append(os.getcwd())
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "optilab.settings") # or whatever
import django
django.setup()


from selenium import webdriver
import unittest
from selenium.webdriver.common.keys import Keys
from optilab.models import Design
from automa.api import *  # try not to do this

这是因为Django在尝试调用settings之前没有正确设置,它无法知道在没有"DJANGO_SETTINGS_MODULE"变量的情况下应该使用哪些项目设置,django.setup()调用对于导入模型和访问数据库至关重要。(该方法见e4c5's answer

然而,这不是推荐的方法,也不是最简单的方法。您可以像调用manage.py test中的单元测试一样调用函数测试,Django将自动为您设置一切,它甚至会为功能测试使用tempdb。如果您的功能测试在功能测试中包括插入和更新(您应该这样做),tempdb就派上了用场。在

但是要使用这个工具,您必须在代码中更改一些内容。在

首先是文件名的问题,manage.py testdoc)的默认模式是“test*.py”,您可以用-p或{}来更改它,但通常的解决方案是重命名functional_测试.py到测试.py把它放在一个功能性的测试文件夹里。这样您就可以通过调用manage.py test functional_tests来调用函数测试。在

另外,与其从unittest导入TestCase,还不如研究一下使用TestCasedoc)来自django.test甚至是{}(doc),这样可以省去自己运行manage.py runserver的麻烦。在

相关问题 更多 >