【问题标题】:How to simulate file upload to blobstore using GAE dev server testbed for python如何使用适用于 python 的 GAE 开发服务器测试平台模拟文件上传到 blobstore
【发布时间】:2012-06-07 21:59:05
【问题描述】:

我想写一些单元测试,其中需要read a blobstore file

如何编写一个单元测试setUp,将一些文件放入testbed blobstore,以便以这种方式读取:

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

编辑:

我没有寻找测试files API 的方法,我想在测试用例设置阶段将一些任意数据放入测试平台 blobstore 存储中,以便我可以针对这些数据运行测试。

【问题讨论】:

    标签: python unit-testing google-app-engine blobstore


    【解决方案1】:

    您可以将以下内容添加到您的 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)
    

    请注意,testbed 指的是 from google.appengine.ext import testbedself.testbed 是 testbed 实例。

    使用 init_files_stub,这与 docs 中描述的完全一样:

    【讨论】:

    • 我的第一个示例适用于我,如果我把它放在 setUp 中,它会将“blobdata”(可以是图像字节或其他)写入 id 为“blob”和 reader.read() 的 blob您的示例将返回“blobdata”。如果您在测试中需要确切的密钥,请将 self.blob_key 保存在 setUp 中。第二个示例似乎是根据 API 执行此操作的适当方法,但不起作用。当您尝试使用第一个示例时,它是如何失败的?
    • 对不起,我还没有测试它,should work 你的部分答案很困惑;)同时我确实找到了一个解决方案,我自己将BlobInfo 放入数据存储区,如下所示:datastore.Put(datastore.Entity('__BlobInfo__', name=file_path, namespace='')。你的解决方案更漂亮,谢谢队友!
    • 第一个例子就像一个魅力,但第二个例子在createAssertionError: No api proxy found for service "file"上对我来说失败了。我确实初始化了init_blobstore_stubfiles api stub 还有其他初始化方法吗?
    • 你说得对,我的解释很混乱,我试着修改了一下,希望对你有帮助。在测试平台上,我激活()和初始化 datastore_v3、memcache、taskqueue、blobstore,但我没有看到您提到的 AssertionError。我不知道它在哪里尝试使用“文件”服务或如何初始化它。
    • 在存在 init_files_stub 的情况下,API 方法有效并且应该是首选。我相应地更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2014-08-26
    • 1970-01-01
    • 2014-10-10
    • 2010-10-10
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多