我有一个Django应用程序,工作正常。当我使用pytest运行测试时,它只适用于实用程序类(因此不与Django相关)。
例如,来自包A的测试从该包或其他包中调用实用程序类,可以正常工作。 但是,一旦导入django类,我就会面临错误。
示例1 : 我导入我的模型(在测试中),用以下代码启动测试类:
from app.common.models import Country
- > ImportError:没有名为django.db的模块
[models.py]中调用[django.db]
示例2 :我导入了一个url解析器(在测试中),用以下代码启动测试类:
from django.core.urlresolvers import reverse
- > ImportError:没有名为django.core.urlresolvers的模块
首次尝试修复
在另一个主题之后,我设置了PYTHONPATH的内容:
/home/user/pyenv/lib/python3.5/site-packages
此文件夹包含virtualenv中安装的软件包:django,pytest,psycopg2等。
1)如果我将DJANGO_SETTINGS_MODULE设置为与应用程序相同的文件," py.test"给出此错误以以下结尾: 文件" /home/user/pyenv/lib/python3.5/site-packages/django/db/backends/postgresql/base.py" ;,第24行,在 提出不正确的配置("加载psycopg2模块时出错:%s"%e)
2)如果我将DJANGO_SETTINGS_MODULE设置为较小的测试设置文件(仅包含数据库信息),我将面临另一个错误(self.client在测试中失败):
class Test(unittest.TestCase):
def testUrls(self):
response = self.client.get('/countries/all/get')
self.assertEqual(response.status_code, 200)
- > AttributeError:'测试'对象没有属性' client'
更多信息:
1)应用程序的python解释器位于virtualenv。
2)conftest.py位于应用程序根文件夹中,与manage.py位于同一位置,并具有以下内容:
import os
import sys
sys.path.append(os.path.dirname(__file__))
3)pytest.ini与manage.py位于同一文件夹中,其内容为:
[pytest]
python_files = test_*.py test*.py
4)最重要的是:应用程序运行正常,因此数据库设置有效
如果你知道什么是错的,以及如何测试django课程,那么任何想法都会受到欢迎。提前谢谢。
答案 0 :(得分:2)
我使用pytest-django,我还在DJANGO_SETTINGS_MODULE=project.my_settings
中明确设置了pytest.ini
。每次都很棒。
答案 1 :(得分:0)
只是想知道,为什么不使用Django的测试?
python manage.py test
答案 2 :(得分:0)
我在尝试标准Django测试工具+覆盖时面临其他问题。 将Pytest与“--cov”一起使用,只需一个命令即可提供我所需要的东西。
我终于找到了解决问题的方法。再次尝试,所以重新启动一切(PC,virtualenv),它工作正常。 所以:
1)启动virtualenv并移至应用程序文件夹
2)不要设置PYTHONPATH
3)将DJANGO_SETTINGS_MODULE设置为pytest.ini中的应用程序设置
(所以项目中只有一个设置文件)
4)使用:py.test --cov=my_application_name
现在我可以毫无错误地测试模型或表格。
对于前面提到的关于url的测试,它现在可以使用以下语法:
import unittest
from django.test import Client
class Test(unittest.TestCase):
def setUp(self):
# global variable
self.client = Client()
def testUrls(self):
reponse = self.client.get('/countries/all/get')
self.assertEqual(reponse.status_code, 200)