Python Requests:API返回403时断言未触发指定测试失败的问题求助
如何让API返回403时测试抛出自定义错误信息失败
看起来你想要在API返回403(禁止访问)状态码时,让测试带着自定义的权限错误信息失败,而不是默认的断言提示。咱们先分析下你之前尝试的几种写法的问题,再给出可行的解决方案。
为什么你之前的写法没达到预期?
- 用
is比较数值是错误的:Python里is是用来判断两个对象是否是同一个实例(比较内存地址),虽然小整数可能有缓存,但用==来比较数值才是正确的做法。你之前的if int(addresses.status_code) is 403、assert addresses.status_code is not 403这些写法,逻辑上就有问题。 - 变量名不一致:你写的
fail("Auth Error: Missing Role {}".format(response.json()))里用了response.json(),但前面的状态码是addresses.status_code,大概率是笔误,应该统一用addresses这个响应对象。 - 前几个断言没有自定义错误信息:比如
assert addresses.status_code is not codes.forbidden,即使触发失败,也只会显示默认的断言错误,不会输出你想要的“Auth Error”提示。
正确的解决方案
方案1:条件判断 + 测试框架失败函数
如果你用的是pytest这类测试框架,可以直接用pytest.fail()来主动抛出带自定义信息的失败:
import pytest # 先检查是否返回403 if addresses.status_code == 403: # 用addresses.json()获取响应体,确保变量名一致 pytest.fail(f"Auth Error: Missing Role {addresses.json()}") # 再验证状态码是否为预期的成功状态 assert addresses.status_code == codes.ok
方案2:带自定义信息的断言语句
如果不想用框架的fail函数,也可以直接给assert添加自定义错误信息参数,这样当状态码为403时,会直接输出你想要的提示:
# 先断言状态码不是403,同时指定错误信息 assert addresses.status_code != 403, f"Auth Error: Missing Role {addresses.json()}" # 再验证状态码是否为成功状态 assert addresses.status_code == codes.ok
关键要点总结
- 永远用
==/!=来比较状态码这类数值,不要用is - 确保引用的响应对象变量名一致(比如统一用
addresses,不要混着用response) - 要么用框架的失败函数主动抛出错误,要么给assert添加自定义错误信息参数,这样才能得到你想要的特定提示
内容的提问来源于stack exchange,提问作者klreeher
相关产品推荐
相关产品推荐

