[英]GAE: testing download of blobs with testbed and webtest
我正在使用blobstore和我的Google App Engine应用程序,一切都在生产服务器和开发服务器上运行良好。 然而,使用testbed和webtest进行测试是行不通的......
在我的测试中,blob存在,因为我可以像这样访问它:
blob = self.blobstore_stub.storage._blobs[key]
当我尝试在我的测试中下载blob时
response = self.app.get("/blob-download/2")
我的blobstore下载处理程序永远不会被调用,我得到404错误(但链接在dev或prod服务器上工作)。
我怀疑这是testbed或webtest的错误...
关于我可能做错了什么的想法,或者如果这是一个错误的testbed / webtest可能是一个好的工作,以便我可以测试我的代码的这一部分?
以下是有关我如何设置测试的一些信息。
import unittest
from webtest import TestApp
from google.appengine.ext import db, testbed
from google.appengine.api import users
from google.appengine.api import apiproxy_stub_map
class ExampleTests(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.setup_env(app_id="stv")
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_taskqueue_stub()
self.testbed.init_mail_stub()
self.testbed.init_blobstore_stub()
self.app = TestApp(main.application)
apiproxy_stub_map.apiproxy.GetStub("datastore_v3").Clear()
self.taskqueue_stub = apiproxy_stub_map.apiproxy.GetStub('taskqueue')
self.mail_stub = apiproxy_stub_map.apiproxy.GetStub('mail')
self.blobstore_stub = apiproxy_stub_map.apiproxy.GetStub('blobstore')
def testBlob(self):
# create blob using files.blobstore.create
response = self.app.get("/blob-download/2") # This returns 404
self.assertEqual(response.body, "content of blob") # This fails
这是app.yaml的相关部分:
handlers:
- url: /.*
script: main.application
这是main.py的相关部分:
application = webapp2.WSGIApplication(
[
('/blob-download/([^/]+)?', views.BlobDownload),
]
如果没有来自main.application和app.yaml的路由,很难说出路由。
我怀疑您在app.yaml中配置了“/ blob-download”,其中webtest不知道,它只知道您在main.application中配置的路由。
更新 :现在我们现在app.yaml不是原因,让我们继续前进。 有用的是看到你的处理程序。 Blobstore服务响应的处理方式与通常的响应不同。 作为开发人员,您将blob密钥添加为响应的标头。 App Engine后端检查此标头结束,如果发现它接管了blob的服务。 您可以在此处查看dev_appserver实施: http : //code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/dev_appserver_blobstore.py#214 。
这意味着如果没有dev_appserver或appserver处理请求,你实际上无法测试blob的服务 - 这意味着testbed + webtest在这里不会帮助你(虽然它没有解释404)。
您可以做的是运行完整的端到端测试,例如使用gaedriver: http : //code.google.com/p/gaedriver/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.