Sto utilizzando il blobstore con la mia app Google App Engine e tutto funziona correttamente sul server di produzione e sul server di sviluppo. Test con banco di prova e webtest, però, non funziona ...GAE: test di download di BLOB con testbed e webtest
Nel mio test, il blob esiste come posso accedere in questo modo:
blob = self.blobstore_stub.storage._blobs[key]
Quando si tenta di scaricare un blob nel mio test come questo
response = self.app.get("/blob-download/2")
mia blobstore handler scaricare non viene mai chiamato e ottengo un errore 404 (ma il collegamento funziona sui server dev o prod).
ho il sospetto questo è un errore con banco di prova o WebTest ...
Tutte le idee su quello che potrebbe essere sbagliato, o se questo è un errore con banco di prova/webtest quello che un buon lavoro intorno potrebbe essere così che posso testare questa parte del mio codice?
Ecco alcune informazioni su come sto impostando i miei test.
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
Questa è la quota di competenza di app.yaml:
handlers:
- url: /.*
script: main.application
Questa è la quota di competenza di main.py:
application = webapp2.WSGIApplication(
[
('/blob-download/([^/]+)?', views.BlobDownload),
]
Ciao Schuppe, grazie per la tua risposta. Non penso che questo sia il problema ma ho aggiornato la mia domanda con ulteriori dettagli su app.yaml e main.py. –
@schuppe come sarebbe possibile definire qualcosa in app.yaml senza mapparlo a un gestore in main.application? puoi inviare tutto a main.application ma quella mappatura deve essere la più specifica. – aschmid00
@ aschmid00 Volevo verificare se Jeff avesse un gestore diverso definito nell'app.yaml che gestiva le richieste a '/ blob-download /' prima che main.application lo raggiungesse. I modelli definiti in app.yaml vengono valutati nell'ordine in cui appaiono. Avrebbe avuto un gestore definito per qualcosa che corrisponde a '/ blob-download /' prima di un possibile catch-all '. *' - main sarebbe stata una spiegazione facile. Ma con l'aggiornamento di Jeff sembra che non sia così .. – schuppe