0

我有一个 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 互操作。

提前致谢,如果您需要更多信息,请告诉我。

4

1 回答 1

1

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

我在文档中找到了替代方法Webtest

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

使用该maybe_follow方法,您最终会获得最后一页。

编辑

最后我发现了这一行的问题:

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

用这个替换它:

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

看起来像是Django将 url 重定向到结尾的 propper 路径/

于 2013-09-19T22:41:38.847 回答