如何在Google App Engine上单元测试Django视图?

2 投票
1 回答
684 浏览
提问于 2025-04-15 16:18

我在使用Django的Client类在Google App Engine上运行单元测试时遇到了困难。我下载了GAEUnit(适用于Django的2.0a版本),并试图把它当作我的测试框架(也许我应该用别的东西?)

我按照说明把所有GAEUnit的文件复制到我的项目根目录,并修改了app.yaml文件。目前app.yaml的内容如下:

application: myapp
version: 1
runtime: python
api_version: 1

handlers:
- url: /static
  static_dir: static

- url: /.*
  script: django_bootstrap.py

- url: /test.*
  script: gaeunit.py

我还修改了settings.py,把gaeunit添加为一个应用...(settings.py中的一段代码)

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'gaeunit',
)

我的单元测试类放在'test'文件夹里,内容如下(非常简单):

import unittest

class Test(unittest.TestCase):

    def testName(self):
        self.assertTrue(False)

if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()

但是,当我试图通过访问http://localhost:8080来运行我的应用时,它失败了,并出现了以下错误:

ViewDoesNotExist at /
Could not import gaeunit.gaeunit. Error was: No module named gaeunit

gaeunit.py确实在文件夹里。那我到底哪里做错了呢?

1 个回答

0

我终于搞清楚这里出错的地方了。我犯了两个错误:

  1. app.yaml 文件中,url: /test.* 必须放在 url:/.* 之前。否则,当请求到达 /test URL 时,它会先被匹配到 /.*,这样就不会走到 /test.* 的处理程序了。
  2. 注意不要把 GAEUnit 包里的所有文件都复制到你的项目根目录!GAEUnit 文件夹里有一个 urls.py 文件,如果你不留意,它会覆盖掉你自己的那个文件。在我的情况下就是这样。我只是把我原来的 urls.py 恢复回来了。
  3. 在使用 django 测试 Client 时,如果你想访问 response.template 或 response.context 属性,你需要确保调用 django.test.utils.setup_test_environment(),否则 template 和 context 的值会是 Nothing。我在我的测试模块里,在最后一行调用了这个。

结果:单元测试正常工作了!

撰写回答