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_int200 ステータスを返すため、パスしません。デバッガーでコードをステップ実行すると、テスト セットアップで匿名ユーザーがページにアクセスすることをページが許可しているように見え、そのページに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 に答える