我正在使用Python和Webtest来测试WSGI应用程序。我发现在处理程序代码中引发的异常往往会被Webtest吞并,然后引发一个泛型:
AppError: Bad response: 500 Internal Server Error
如何告诉它引发或打印导致此错误的原始错误?
发布于 2017-04-06 07:33:56
虽然clj的答案肯定有效,但您可能仍然希望访问测试用例中的响应。为此,您可以在向TestApp发出请求时使用expect_errors=True
(从webtest documentation),这样就不会引发AppError。下面是一个我期望出现403错误的示例:
# 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))
发布于 2015-06-16 17:10:13
您的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://stackoverflow.com/questions/13505778
复制相似问题