繁体   English   中英

Python 请求:断言 status_code 没有失败

[英]Python Requests: assert status_code is not failing

如果 api 调用返回 403 代码,我试图通过特定的错误消息使测试失败。 我尝试了几个选项:

if int(addresses.status_code) is 403:
    fail("Auth Error: Missing Role {}".format(response.json()))

assert addresses.status_code is not 403

assert addresses.status_code is not codes.forbidden

assert addresses.status_code is codes.ok

其中唯一失败的是最后一个, assert addresses.status_code is codes.ok 但是,api 调用响应的状态代码403。我尝试过确保类型相同等,但不知道还能去哪里。

如何测试 status_code 不是特定值?

is身份测试。 状态码确实与403codes.forbidden不是同一个对象。 状态值是一个整数,而不是一个单例枚举对象。

使用==测试是否相同:

if addresses.status_code == 403:
    # ...

assert addresses.status_code != 403
assert addresses.status_code != codes.forbidden
assert addresses.status_code == codes.ok

或者只是使用

addresses.raise_for_status()  # raises an exception if not 1xx, 2xx or 3xx

所述Response.raise_for_status()方法提出了一个requests.exceptions.HTTPError异常(的一个子类requests.exceptions.RequestException ,在转OSError子类)。

请注意,有时is可用于整数或任意数量的其他类型。 但是除非有可以使用身份测试的特定文档,否则您会找到一个实现细节,其中 Python 将出于性能原因重用对象。 小整数(从 -5 到 256)、某些情况下的字符串以及许多其他极端情况就是这种情况。 所以address.status_code is 200恰好适用于当前的 CPython 解释器,但这不是给定的,不应依赖

您正在使用is ,它检查两个对象的身份。 为了比较int你应该使用== 事实上,除非检查单例(即None )或实际需要时,否则总是使用==

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM