当我尝试使用命令测试任何应用程序时(当我尝试使用使用此命令的fabric部署myproject时我注意到了它):
python manage.py test appname
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database
Type 'yes' if you would like to try deleting the test database 'test_finance', or 'no' to cancel
Run Code Online (Sandbox Code Playgroud)
syncdb命令似乎有效.我在settings.py中的数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'finance', # Or path to database file if using sqlite3.
'USER': 'django', # Not used with sqlite3.
'PASSWORD': 'mydb123', # Not used …Run Code Online (Sandbox Code Playgroud) 嗨,我有一个令人愤怒的问题.
我有这样的网址模式:
# mproject/myapp.urls.py
url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
Run Code Online (Sandbox Code Playgroud)
它在浏览器中工作正常,但是为了测试,当我在shell中执行此操作时:
from django.test import Client
from django.core.urlresolvers import reverse
client= Client()
response = client.get(reverse('edit_project'), project_id=4)
Run Code Online (Sandbox Code Playgroud)
我害怕:
NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我想编写测试时,我想在Django中模拟我的观点请求.这主要是为了测试表格.这是一个简单测试请求的片段:
from django.tests import TestCase
class MyTests(TestCase):
def test_forms(self):
response = self.client.post("/my/form/", {'something':'something'})
self.assertEqual(response.status_code, 200) # we get our page back with an error
Run Code Online (Sandbox Code Playgroud)
无论是否存在表单错误,页面始终返回200的响应.如何检查我的表单失败以及特定字段(soemthing)是否有错误?
我已经通过两种方式为我的单元测试创建了用户:
1)为"auth.user"创建一个看起来大致如下的夹具:
{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "homer",
"is_active": 1,
"password":
"sha1$72cd3$4935449e2cd7efb8b3723fb9958fe3bb100a30f2",
...
}
}
Run Code Online (Sandbox Code Playgroud)
我遗漏了看似不重要的部分.
2)在setUp函数中使用'create_user'(尽管我宁愿将所有内容保存在我的fixtures类中):
def setUp(self):
User.objects.create_user('homer', 'ho...@simpson.net', 'simpson')
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种情况下密码都是simpson.
我已经验证了这个信息一次又一次正确地加载到测试数据库中.我可以使用User.objects.get获取User对象.我可以使用'check_password'验证密码是否正确.用户处于活动状态.
然而,self.client.login(username ='homer',password ='simpson')FAILS总是如此.我很困惑为什么.我想我已经阅读了与此相关的每一个互联网讨论.有人可以帮忙吗?
单元测试中的登录代码如下所示:
login = self.client.login(username='homer', password='simpson')
self.assertTrue(login)
Run Code Online (Sandbox Code Playgroud)
谢谢.
在我的django应用程序中,我正在尝试编写执行操作的单元测试,然后检查响应中的消息.
据我所知,没有很好的方法可以做到这一点.
我正在使用CookieStorage存储方法,我想做类似以下的事情:
response = self.client.post('/do-something/', follow=True)
self.assertEquals(response.context['messages'][0], "fail.")
Run Code Online (Sandbox Code Playgroud)
问题是,我得到的只是一个
print response.context['messages']
<django.contrib.messages.storage.cookie.CookieStorage object at 0x3c55250>
Run Code Online (Sandbox Code Playgroud)
我怎么能把它变成有用的东西,或者我做错了什么?
谢谢,丹尼尔
在我的django应用程序中,我有一个身份验证系统.因此,如果我没有登录并尝试访问某个配置文件的个人信息,我会被重定向到登录页面.
现在,我需要为此编写一个测试用例.我得到的浏览器的回复是:
GET /myprofile/data/some_id/ HTTP/1.1 302 0
GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 301 0
GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 200 6533
Run Code Online (Sandbox Code Playgroud)
我该如何写测试?这就是我到目前为止:
self.client.login(user="user", password="passwd")
response = self.client.get('/myprofile/data/some_id/')
self.assertEqual(response.status,200)
self.client.logout()
response = self.client.get('/myprofile/data/some_id/')
Run Code Online (Sandbox Code Playgroud)
接下来会发生什么?
我有一个功能
def getEvents(eid, request):
......
Run Code Online (Sandbox Code Playgroud)
现在我想分别为上面的函数编写单元测试(不调用视图).那么我该如何调用上面的内容呢TestCase?是否可以创建请求?
我试图找出实用程序函数执行的查询数.我已经为这个函数编写了一个单元测试,并且该函数运行良好.我想要做的是跟踪函数执行的SQL查询的数量,以便我可以看到在重构之后是否有任何改进.
def do_something_in_the_database():
# Does something in the database
# return result
class DoSomethingTests(django.test.TestCase):
def test_function_returns_correct_values(self):
self.assertEqual(n, <number of SQL queries executed>)
Run Code Online (Sandbox Code Playgroud)
编辑:我发现有一个待定的Django 功能请求.但是票仍然是开放的.与此同时还有另一种方法可以解决这个问题吗?
我可以在不将此应用程序合并到项目中的情况下为我的可重用Django应用程序启动测试吗?
我的应用程序使用了一些模型,因此有必要提供(TEST_)DATABASE_*设置.我应该在哪里存储它们以及如何启动测试?
对于Django项目,我可以运行测试manage.py test; 当我使用django-admin.py test我的独立应用程序时,我得到:
错误:无法导入设置,因为未定义环境变量DJANGO_SETTINGS_MODULE.
这里的最佳做法是什么?
django ×10
django-testing ×10
python ×6
unit-testing ×2
django-orm ×1
email ×1
postgresql ×1
smtp ×1
sql ×1
testing ×1