私はPythonとWebtestを使ってWSGIアプリケーションをテストしています。私は、ハンドラのコード内で発生した例外は、汎用を提起WebTestの、に飲み込まれる傾向があることがわかった:Webtestテストの失敗で実際のエラーを見つける
AppError: Bad response: 500 Internal Server Error
私はこれを引き起こした元のエラーを上げたり印刷するには、それを伝えるにはどうすればよいですか?
私はPythonとWebtestを使ってWSGIアプリケーションをテストしています。私は、ハンドラのコード内で発生した例外は、汎用を提起WebTestの、に飲み込まれる傾向があることがわかった:Webtestテストの失敗で実際のエラーを見つける
AppError: Bad response: 500 Internal Server Error
私はこれを引き起こした元のエラーを上げたり印刷するには、それを伝えるにはどうすればよいですか?
WSGIフレームワークとサーバーには、例外をキャッチして何らかのアクション(本体のスタックトレースをレンダリングし、バックトレースをログファイルに記録するなど)を行うハンドラが含まれています。デフォルトでWebtestは実際の応答を表示しません。これは、フレームワークがスタックトレースを本体にレンダリングする場合に便利です。私はレスポンスのボディを見てする必要がありますとき、私はWebTestのに次の拡張機能を使用します。
class BetterTestApp(webtest.TestApp):
"""A testapp that prints the body when status does not match."""
def _check_status(self, status, res):
if status is not None and status != res.status_int:
raise webtest.AppError(
"Bad response: %s (not %s)\n%s", res.status, status, res)
super(BetterTestApp, self)._check_status(status, res)
は、使用しているどのようなフレームワークとサーバーによって異なり例外に何が起こるかをより細かく制御を取得します。内蔵のwsgiref
モジュールでは、あなたが望むものを達成するためにerror_outputを無効にすることができます。
上流報告:https://github.com/Pylons/webtest/issues/176 –
cljの回答は間違いなく機能しますが、依然としてテストケースの回答にアクセスしたいことがあります。これを行うには、webtest documentationからexpect_errors=True
を使用してTestAppにリクエストすると、AppErrorは生成されません。
# attempt to access secure page without logging in
response = testapp.get('/secure_page_url', expect_errors=True)
# now you can assert an expected http code,
# and print the response if the code doesn't match
self.assertEqual(403, response.status_int, msg=str(response))
ありがとうございます!私はこのexpect_errors引数を見るまで、私のテストで他の例外を捕まえることに失敗していました。 –
WSGI設定の一部のファイルに「エラー」がリダイレクトされることがあります。いくつかのファイルでエラーが発生したことをチェックインできます。 – Nilesh