2012-06-03 2 views
3

Id хотел написать несколько модульных тестов, что среди других вещей будут нужно read a blobstore fileКак имитировать загрузку файла Blobstore с помощью GAE DEV сервера испытательного стенда для питона

Как написать тест setUp блока, который помещает какой-либо файл в testbed Blobstore поэтому она будет доступна: для чтения так:

blob_info = BlobInfo(blob_key) 
reader = BlobReader(blob_info) 
reader.readline() 

EDIT:

Я не искать способ, чтобы проверить files API, я хочу поместить некоторые произвольные данные в хранилище хранилища блочного хранилища, dusring фазу setUp тестового примера, поэтому я могу запускать тесты против этих данных.

ответ

6

Вы можете добавить следующее в свой метод setUp и, возможно, сохранить blob_key как self.blob_key для последующего использования. Init_files_stub важен, поскольку он инициализирует службу файлов блоком памяти blobstore.

self.testbed.init_blobstore_stub() 
self.testbed.init_files_stub() 
from google.appengine.api import files 
file_name = files.blobstore.create(mime_type='application/octet-stream') 
with files.open(file_name, 'a') as f: 
    f.write('blobdata') 
files.finalize(file_name) 
blob_key = files.blobstore.get_blob_key(file_name) 

Обратите внимание, что стендовый относится к from google.appengine.ext import testbed и self.testbed является экземпляром стендовый.

С init_files_stub, это именно так, как описано в docs:

+0

Так это работает или нет? –

+0

Мой первый пример работает для меня, если я поместил его в setUp, он записывает «blobdata» (может быть байты изображения или что-то еще) в blob с id 'blob' и reader.read() в вашем примере вернет 'blobdata' , Сохраните self.blob_key в setUp, если вам нужен точный ключ в вашем тесте. Второй пример кажется подходящим способом сделать это в соответствии с API, но не работает. Как первый пример завершился неудачей, когда вы пытались его использовать? – tesdal

+0

К сожалению, я еще не тестировал его, 'должен работать' часть вашего ответа путают;) Я нашел решение в то же время, поставив 'BlobInfo' в хранилище данных, например:' datastore.Put (datastore.Entity (' __BlobInfo__ ', name = file_path, namespace =' ') '. Ваше решение намного красивее, thx mate! –

Смежные вопросы