2013-04-08 34 views
0

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

在我的app.yaml,我有一个限制的日志段:我一套我的GAE应用程序(蟒蛇)和我测试

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

想添加一些测试,检查登录限制。我已经将测试跑步者设置为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页面。

回答