在app.yaml中设置测试Google appengine应用安全性

时间:2013-04-08 17:27:45

标签: python google-app-engine

在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页面。

1 个答案:

答案 0 :(得分:0)

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