我有一个 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 配置。
另一方面,为什么使用端口 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'),
)
浏览器在相同的 url 上显示了正确的页面,我从 google 的支持页面中获取了 WebTest 示例,所以问题应该是 GAE/Django 互操作。
提前致谢,如果您需要更多信息,请告诉我。