GAE:使用 testbed 和 webtest 测试 blob 的下载

2024-01-31

我将 blobstore 与我的 Google App Engine 应用程序一起使用,并且在生产服务器和开发服务器上一切正常。使用测试台进行测试和webtest http://webtest.pythonpaste.org/但是,不起作用...

在我的测试中,该 blob 存在,因为我可以像这样访问它:

blob = self.blobstore_stub.storage._blobs[key]

当我尝试像这样在测试中下载 blob 时

response = self.app.get("/blob-download/2")

我的 blobstore 下载处理程序从未被调用,并且收到 404 错误(但该链接在开发或生产服务器上有效)。

我怀疑这是 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 中配置的路由。

update:现在我们现在 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 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/ http://code.google.com/p/gaedriver/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GAE:使用 testbed 和 webtest 测试 blob 的下载 的相关文章

  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像

随机推荐

  • Oracle SQL 中是否有类似于 SUM 函数的 PRODUCT 函数?

    我有一个同事正在寻找这个 但我不记得曾经遇到过类似的事情 有没有一种合理的技术可以让你模拟它 SELECT PRODUCT X FROM SELECT 3 X FROM DUAL UNION ALL SELECT 5 X FROM DUAL
  • 单线程/核心上的并行如何可能?

    现代编程语言为用户提供了一流的并行和并发机制 我了解并行算法是如何编程的 并且可以很好地想象多核CPU上的两个线程如何并行运行 然而 大多数这些平台还支持在单个线程上运行并行进程 这些进程真的并行运行吗 在汇编级别上 两个不同的例程如何在单
  • 为什么这段代码在 jsbin 中有效,但在 jsfiddle 中无效?

    我按照此处另一位用户的建议重新发布 重新表述此内容 下面的代码适用于jsbin http jsbin com osebov 1 edit但不在jsfiddle http jsfiddle net wNaEX 有人知道为什么吗 该问题源于我尝
  • 如何从内容页访问母版页中的用户控件?

    假设我在母版页中有一个标头用户控件 并且想要根据母版页内加载的内容页来更改用户控件的属性 我该怎么办 Thanks 您可以使用两种方法 第一个是通过使用Page Master FindControl controlID 然后您可以将其转换为
  • 查找嵌套 json 对象深处的对象

    我在下面的代码片段中有嵌套的 json 对象 想要查找所有出现的 schema 并将包含该架构值的整个对象保存到另一个对象中 我尝试使用 lodash 过滤器 但没有成功 有没有人有什么建议 element parseResult cont
  • 预授权不起作用

    我正在编写一个套接字服务器 无 Web 应用程序 应用程序 并希望使用基于方法的安全性来处理我的 ACL 需求 我按照我发现的一个小教程进行操作春季安全举例 http blog solidcraft eu 2011 03 spring se
  • 为什么我不能使用“scanf_s”同时读取字符和数字?

    这段代码崩溃了 scanf s c d ch x Run error 但这段代码有效 scanf s c ch scanf s d x Run succeed 我想知道为什么第一个代码片段是错误的 运行错误 的意思是 当我运行程序输入时 编
  • 返回 false 不停止表单提交

    我很确定这应该不会那么难 我有一个在提交时运行以下函数的表单 function FORMVALIDATE add rota entry var rota date rota date val var rota id rota id val
  • 自定义 Slack 机器人无法连接

    我一直在尝试制作一个 Slack 机器人 它可以回复简单的查询并做一些简单的事情来帮助办公室工作 该机器人工作正常 只是似乎无法从我们的代理后面连接到 Slack 当我从自己的移动互联网连接测试它时 它工作正常 但是当尝试在代理后面运行它时
  • Android 此功能需要 ASM7

    可能重复 https stackoverflow com questions 68709559 nestmember requires asm7 noredirect 1 我已将 Android Studio 更新为 Android Stu
  • 使用 automake 安装包含大量文件的数据目录树

    我有一个数据目录 我希望 automake 为其生成安装和卸载目标 本质上 我只想将此目录逐字复制到 DATA 目录 通常 我可能会单独列出所有文件 例如 dist whatever DATA dir subdir filea 但是当我的目
  • 如何在 spring Restapi 的 json 请求中的未知字段上抛出错误

    我有一个 spring Rest api 它获取 json 数据并绑定到 pojo GetData 每当我收到未知字段时 它都不会失败或抛出任何异常 我的要求是当它接收到 json 数据中的未知字段时应该抛出错误 public Respon
  • 如何实现 ILogger 将消息发送到 SignalR Hub?

    我想构建一个显示最新日志消息的 LogView 所以我构建了一个非常简单的设置 但在依赖注入方面失败了 这是我的实施尝试 我跳过了非关键部分 public class SignalRLogger ILogger private readon
  • 使用 Java 删除 JIRA 中的问题

    我正在尝试编写一种方法来删除 JIRA 中的问题 我已经有了创建和更新问题的方法 但我找不到任何有关如何使用 Java 删除问题的文档 如何从 Java 应用程序中删除 JIRA 问题 您可以尝试从 IssueService 中删除 htt
  • 如何限制谁可以 iframe 嵌入我的网络应用程序?

    限制 Web 应用程序可以嵌入 iframe 的网站的最佳 最安全 方法是什么 例如 所有不在名单上的人都应该被拒绝 www myFriend com www anotherfriend com www myThirdFriend com
  • 我应该使用什么类型来表示 C 枚举的二进制?

    据我所知 C 枚举是无符号整数 但这可能因实现而异 我应该为二进制表示形式的枚举使用什么类型 附注 二进制表示 是指字节数组 我想将枚举值序列化到套接字以与其他程序进行互操作 由编译器决定是否使用int代表一个enum类型 或一个long
  • Quartz.NET 服务器文档

    下载 Quartz NET 时 它包含一个带有控制台应用程序的服务器组件 网站 常见问题解答和 API 文档没有提及任何相关内容 有人知道更多关于它的信息或者知道我在哪里可以找到更多关于它的文档吗 谢谢 帕特里克 那么你可以加入Quartz
  • 在哪里可以找到使用 C# /// xml 文档注释的好示例? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 NET XML 样式源代码注释和所有可用的各种标签的一些很好的示例 我在哪里可以找到一些好的
  • 如何使用 Windows + WSL2 在 Pycharm 中配置 Poetry 环境?

    TL DR 无法使用 WSL 中的现有 Poetry 环境在 PyCharm Windows 上配置 Python 解释器 当尝试设置 Poetry 环境路径时Add Python Interpreter gt Poetry Environ
  • GAE:使用 testbed 和 webtest 测试 blob 的下载

    我将 blobstore 与我的 Google App Engine 应用程序一起使用 并且在生产服务器和开发服务器上一切正常 使用测试台进行测试和webtest http webtest pythonpaste org 但是 不起作用 在