使用Python 2.6的unittest捕获响应代码

0 投票
2 回答
1657 浏览
提问于 2025-04-17 19:32

我在用unittest来测试一些API的边缘情况。这些情况都返回了400系列的响应代码,并且使用了自定义的异常类。可惜的是,我找不到方法来捕捉这些自定义异常,或者在unittest的检查中读取响应代码。

我收到的异常是'AppError',它的消息提到这是一个400的响应,而不是200或300。我希望能避免解析这个异常消息。如果可以的话,这个方法还需要在Python 2.6及以上版本上工作。我该如何在unittest检查中捕捉这些自定义异常,或者在不解析异常消息的情况下确定导致错误的响应代码呢?

2 个回答

1

你需要捕捉这个异常,并确认它不是一个400的响应:

try:
    call_api_method()
except AppError as ae:
    self.assert(ae.errorcode < 400)

这就要求这个异常要有一个错误代码作为属性;你可能需要查看一下这个异常有哪些可用的属性。默认情况下,.args是会存在的(它是一个元组),但对于这样的异常,最好也有一个错误代码的属性。

1

我找到了这个问题的解决办法。原来在使用webtest的时候(我之前忘了提到这一点),你可以传入一个参数expect_errors=True,这样就可以保存请求的返回值。然后你可以用这个返回值来检查响应的状态。

self.assertEqual('400 Bad Request', response.status)

撰写回答