【问题标题】:Testing Google appengine app security as set in app.yaml测试 app.yaml 中设置的 Google appengine 应用安全性
【发布时间】:2013-04-08 17:27:44
【问题描述】:

测试 app.yaml 文件中设置的 python 应用程序安全性的方法是什么?

在我的 app.yaml 中,我有一个受限的日志部分:

- url: /log/?.*
  script: swim.app
  login: required

我有一套针对我的 GAE 应用程序 (python) 的测试,我想添加一些测试来检查登录限制。我已将测试运行程序设置为 per these instructions,然后初始化我的存根,因为它们显示为 DemoTestCase earlier in that page

def setUp(self):
    self.testbed = testbed.Testbed()
    self.testbed.activate()
    # Set consistency policy to simulate HR consistency model
    self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=0)
    self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
    self.testbed.init_user_stub()

def tearDown(self):
    self.testbed.deactivate()

...

def test_log_requires_login(self):
    ''' Make sure attempted access redirects to a login page '''
    request = webapp2.Request.blank('/log')
    response = request.get_response(swim.app) 
    self.assertEqual(response.status_int, 302)

test_log_requires_login 方法不会通过,因为response.status_int 传回了 200 状态。如果我在调试器中单步执行代码,看起来该页面似乎只允许匿名用户访问测试设置中的页面,并且response.body 为我提供了该页面上的表单。这不是正在运行的应用程序的行为,因为对应用程序的“/log”请求将给出 302 状态并重定向到登录页面。

我也尝试过使用 WebTest 来执行此操作,结果相同。问题似乎是通过测试框架运行的应用程序不使用 app.yaml 信息(这是有道理的,因为我实际上并没有运行完整的应用程序)。我可以编写驱动正在运行的应用程序来测试安全性的测试,但是如果我可以在不需要正在运行的应用程序的情况下只使用其余的单元/集成测试来运行这些测试,那将会很方便。有办法吗?

更新:我一直在使用 nosegae。这似乎很有希望,因为它实际上使用 GAE dev_appserver 加载了 app.yaml 信息,并且它生成了与正在运行的应用程序使用的相同的映射。尚不清楚这些是否以任何方式应用,因为我的测试仍然显示空用户可以访问login: required 页面。

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    我刚刚为 devappserver2 找到了 "regression test framework" 的早期版本,即 default development appserver as of 1.7.6。它设置了一个确实会使用 app.yaml 安全设置的服务器,并在集成测试方面满足我的需要。

    【讨论】:

      猜你喜欢
      • 2011-05-12
      • 2017-09-17
      • 2011-07-06
      • 2014-06-13
      • 2015-06-25
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多