Skip to main content
 首页 » 编程设计

python之如何在 Google App Engine 上对 Django View 进行单元测试

2025年05月04日25jillzhang

我正在努力使用 Google App Engine 上的 Django Client 类运行单元测试。我下载了 GAEUnit(Django 的 v2.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. 在 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(),否则模板和上下文将为 Nothing。我在我的测试模块中调用它,就在底部。

结果:工作单元测试!