Я использую blobstore с моим приложением Google App Engine, и все работает нормально на рабочем сервере и сервере разработки. Тестирование с помощью testbed и webtest, однако, не работает...
В моих тестах блоб существует, и я могу получить к нему доступ следующим образом:
blob = self.blobstore_stub.storage._blobs[key]
Когда я пытаюсь загрузить блоб в моих тестах следующим образом
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),
]