Django Integration测试网址

时间:2016-09-23 03:40:23

标签: python django integration-testing

我有一个django应用程序,我想编写测试。现在我正在为网址编写集成测试。

对于我的signin测试,我的网址如下: url(r'^signin/$', login_forbidden(signin), name='signin')

我的测试看起来像:

from django.test import TestCase


class SigninTest(TestCase):
    def test_signin(self):
        resp = self.client.get('/signin/')
        self.assertEqual(resp.status_code, 200)

但是我不知道测试更长的网址,例如我在网址中有一个条目:

url(
        r'^ad_accounts/(?P<ad_account_id>[^/]+)/$',
        AdAccountDetailView.as_view(),
        name='campaigns'
    ),

如果我重复上述测试,我登录页面(替换resp = self.client.get('/ad_accounts/'))会返回失败

======================================================================
FAIL: test_signin (engineoftravel.tests.SigninTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "path/to/project/tests.py", line 7, in test_signin
    self.assertEqual(resp.status_code, 200)
AssertionError: 302 != 200

----------------------------------------------------------------------
Ran 1 test in 0.103s

FAILED (failures=1)

3 个答案:

答案 0 :(得分:1)

为什么不使用反向:https://docs.djangoproject.com/en/1.10/ref/urlresolvers/#reverse

from django.core.urlresolvers import reverse

....
resp = self.client.get(reverse('campaigns', args=[1]))

其中args是您需要传入的ID。

编辑:自django 1.10反向从django.urls进口

答案 1 :(得分:0)

from django.test import TestCase
from django.test import Client
from django.core.urlresolvers import reverse 
client = Client()
class MainTest(TestCase):
    ##user login in django
    def user_login(self, username, password):
        response = self.client.login(username=username, password=username)
        return self.assertEqual(resp.status_code, 200)
   ## first case
   def detail(self):
     response = self.client.get('/ad_accounts/<test_num>/') ## url regex
     self.assertEquals(response.status_code, 200)

   def detail2(self):
       response = self.client.get(reverse('campaigns'))
       self.assertEqual(response.status_code, 200)

答案 2 :(得分:0)

对于测试失败,您应首先login与某个测试用户进行请求,否则该页面将被重定向到登录页面,因此您将获得302状态代码。

您还可以使用client.get('/foo', follow=True)测试重定向页面的状态代码,该代码返回登录页面的状态代码。 (在你的例子中)