【问题标题】:Is there any way to simulate some GAE server error?有没有办法模拟一些 GAE 服务器错误?
【发布时间】:2012-02-01 02:38:45
【问题描述】:

有没有办法在app.yaml 文件中测试我的error_handlers 设置,尤其是错误代码over_quota

【问题讨论】:

  • 具体一点总是好的。你能告诉我们你的error_handlers是什么样的吗?它到底是什么,您通过app.yaml 路由的模块?
  • 就超出配额而言,您可以轻松延迟到单独的项目并将其运行到超出配额模式
  • @mvanveen 我希望测试link 中提到的基本处理程序,但如果有办法测试一般的error_handler,那就太好了
  • @ShayErlichmen 你的意思是用请求等轰炸应用程序以耗尽其资源吗?我想知道有没有更优雅的解决方案?
  • @Falcon 也许有,但您应该始终在真实条件下进行测试(如果可能)。我不知道 raise apiproxy_errors.OverQuotaError 是否 100% 模拟准确,也许当出现真正的过度引用错误时,其他代码会启动。

标签: python google-app-engine


【解决方案1】:

测试error_handlers

dev_appserver.py 是解析您的app.yaml 并提供这些错误文件的应用程序。这意味着你最好的选择可能是一个直接的验收测试,你提出dev_appserver.py 并尝试用GETsPUTs 击中它localhost:8080,这会触发你所期望的各种错误。

因此,如果 /foo 返回 404,您可以使用 Python requests 执行以下操作:

>>> def test_foo():
>>>   response = requests.get('/foo')
>>>   assert response.status_code == 404

测试超过配额错误

在这种特定情况下,听起来您正试图明确提出over_quota 错误。 This link 提到您要查找的异常是 apiproxy_errors.OverQuotaError

我不确定您的测试代码是什么,但您是否尝试过直接使用raise 明确提出此错误?

在引导我的apiproxy_stub_map、设置我的路径等之后,我能够运行以下代码:

from google.appengine.runtime import apiproxy_errors

def test_foo():
  raise apiproxy_errors.OverQuotaError

【讨论】:

  • 是的,我想这就是我想要的味道。所以我们基本上可以用try...except块在本地处理错误。 (如我在评论中提到的那样,如果有办法在yaml 中测试设置,那就太好了)
  • 您能说得更具体些吗?我不知道您想要“测试yaml 中的设置”是什么意思。您在测试app.yaml 中定义的端点时遇到问题吗?
  • 就像在this 中一样,我们可以在app.yaml 中将静态页面设置为error_handlers,我不知道如何测试它们(尽管结果可能不如由try...except).
  • 我认为您最好的选择是通过dev_appserver.py 进行验收测试。您的app.yaml 运行通过dev_appserver.py 以正确路由这些错误,所以我认为您无法使用自举测试台对其进行测试。或者,完全可以通过实际的 WSGI 应用程序来路由错误。这将使自动化测试更容易。 编辑:更新了我的答案以更好地反映您的问题。
  • 感谢您的更新。我想我终于明白 GAE 服务器上的错误是如何处理的了。实际上,official doc 很清楚:HTTP 403 将针对 耗尽带宽配额 发出,并且(大概,我将对此进行测试)将由 app.yaml 中指定的 error_handlers 处理(其中仅允许静态页面的最小响应),即此错误不会传递给应用程序。该应用只能处理因超出其他配额而导致的错误。
猜你喜欢
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多