0

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

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

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

我有一套针对我的 GAE 应用程序(python)的测试,我想添加一些测试来检查登录限制。我已经按照这些说明设置了测试运行程序,然后初始化了我的存根,因为它们在该页面前面的 DemoTestCase 中显示

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

4

1 回答 1

0

我刚刚找到了devappserver2的“回归测试框架”的早期版本,它是1.7.6 的默认开发应用程序服务器。它设置了一个服务器,该服务器确实会使用 app.yaml 安全设置,并且在集成测试方面做我需要的。

于 2013-04-11T04:10:23.457 回答