You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Requests:API返回403时断言未触发指定测试失败的问题求助

如何让API返回403时测试抛出自定义错误信息失败

看起来你想要在API返回403(禁止访问)状态码时,让测试带着自定义的权限错误信息失败,而不是默认的断言提示。咱们先分析下你之前尝试的几种写法的问题,再给出可行的解决方案。

为什么你之前的写法没达到预期?

  1. 用is比较数值是错误的:Python里is是用来判断两个对象是否是同一个实例(比较内存地址),虽然小整数可能有缓存,但用==来比较数值才是正确的做法。你之前的if int(addresses.status_code) is 403、assert addresses.status_code is not 403这些写法,逻辑上就有问题。
  2. 变量名不一致:你写的fail("Auth Error: Missing Role {}".format(response.json()))里用了response.json(),但前面的状态码是addresses.status_code,大概率是笔误,应该统一用addresses这个响应对象。
  3. 前几个断言没有自定义错误信息:比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:11:02