GAE,Django,WebTest上的功能测试失败

时间:2013-09-19 03:05:03

标签: django google-app-engine webtest

我有一个GAE / Django项目,我正在尝试使用WebTest进行功能测试环境,项目布局如下:

/gaeroot
  /djangoroot
    wsgi.py
    urls.py
    ...
    /anapp
      urls.py
      ...
      /tests
        test_functional.py

wsgi.py(由GAE版本的django-admin.py django1.5生成):

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoroot.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

test_functional.py:

import unittest
import webtest
from djangoroot.wsgi import application

class TestHomePage(unittest.TestCase):
    def setUp(self):
        self.testapp = webtest.TestApp(application)

    def test_get_method_ok(self):
        response = self.testapp.get('/path')
        self.assertEqual(response.status_int, 200, response)

测试失败的消息:

Traceback (most recent call last):
...
line 14, in test_get_method_ok
self.assertEqual(response.status_int, 200, response)
AssertionError: Response: 301 MOVED PERMANENTLY
Content-Type: text/html; charset=utf-8
Location: http://localhost:80/path/

为什么要将重定向代码抛出到同一个路径,我唯一能想到的是django的一些代码负责重定向,因为从目录树中我可以看到我有一个两级url配置。 / p>

另一方面,为什么使用端口80?当我在浏览器上测试它显示一个8080端口时,它应该不使用端口,因为WebTest它应该根本不使用端口,因为它正在测试WSGI接口吗?

顶级urls.py

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
    url(r'^path/', include('djangoroot.anapp.urls')),
)

应用级别urls.py

from django.conf.urls import patterns, url
urlpatterns = patterns('djangoroot.anapp.views',
    url(r'^$', 'home', name='anapp_home'),
)

浏览器在同一个网址上显示相关页面,我从谷歌的支持页面上获取了WebTest示例,因此问题应该是GAE / Django互操作。

提前致谢,如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

问题似乎出现在django.conf.urls.url函数上,因为我测试了根urls.py文件,它适用于没有重定向的根路径/,但它确实重定向了我除root之外的路径,我找不到任何似乎正在重定向Django源文件的URL。

我在Webtest文档中找到了另一种选择:

resp = self.testapp.get('/path')
resp = resp.maybe_follow()

使用maybe_follow方法最终获得最终页面。

修改

最后我在这一行找到了问题:

response = self.testapp.get('/path')

替换为:

response = self.testapp.get('/path/')

看起来Django将网址重定向到最后带有/的propper路径。