我有一个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互操作。
提前致谢,如果您需要更多信息,请与我们联系。
答案 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路径。