【问题标题】:unit testing gae with login setting in app.yaml在 app.yaml 中使用登录设置对 gae 进行单元测试
【发布时间】:2024-05-16 11:55:01
【问题描述】:

我正在对一个使用 app.yaml 文件中的登录设置的谷歌应用引擎应用进行单元测试。例如,

- url: /profile
  script: main.py
  login: required

我正在使用 testbed、nose、nose-gae 和 webtest,但不确定其中哪些重要。

我的问题是 app.yaml 的登录设置在测试期间被忽略了。因此,如果我没有登录用户并调用

  response = self.app.get("/profile")

我得到了请求的页面,而不是被重定向到登录页面。

有没有办法从 app.yaml 测试登录设置?

【问题讨论】:

    标签: python unit-testing google-app-engine nose testbed


    【解决方案1】:

    不使用单元测试。您的测试直接调用处理程序,这不涉及 dev_appserver,这是强制执行这些限制的组件。如果您想测试这些限制,您将需要调用 dev_appserver 并通过 HTTP 调用它的端到端测试。

    【讨论】:

    • 您能否指出一个资源来解释如何进行“调用 dev_appserver 并通过 HTTP 调用它的端到端测试”?
    • @Jeff 不幸的是,我认为它在任何地方都没有得到很好的记录。您要么必须从 shell 调用 dev_appserver,要么查看 SDK 的内部以找出如何以编程方式调用它。您可能要考虑这样做是否值得;将检查移到您的代码中而不是依赖于 app.yaml,或者编写验证 app.yaml 内容的测试会更简单。后者可以说更好,因为您正在测试自己的应用程序,而不是 dev_appserver。
    • 感谢您的反馈。绝对不值得为此付出很大的努力,所以我会选择你的一个更简单的解决方案。
    【解决方案2】:

    我意识到这已经是将近 2 年了,但是I had a similar problem and came upon a solution that's been developed lately

    devappserver2 现在有一个"regression test framework",即default development appserver as of 1.7.6。它设置了一个确实会使用 app.yaml 安全设置的服务器并进行这种集成测试

    【讨论】:

    • 非常有趣!这是否也取代了 webtest 或者你将它与 webtest 一起使用?
    • 虽然框架启动一个可以测试的开发服务器实例很有帮助,但我认为它不会取代 webtest 来进行完全集成测试 GAE。它将处理您的 app.yaml 安全检查,但除了提供状态、标题和内容信息的基本 url_fetch 之外,它现在实际上并没有提供太多其他功能。如果您打算对其进行任何广泛的内容检查,您可能会考虑使用一种方法来扩展 BaseTestCase 以交回 webtest.TestApp 对象。
    最近更新 更多