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
。