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

如何Mock两次相同GET请求以返回不同结果并测试指定异常

实现两次Mock相同GET请求返回不同结果的正确方式

你当前的问题在于重复patch同一个requests.get对象,装饰器的执行顺序是从下往上,后一个patch会覆盖前一个,所以实际上只有最后一个mock生效,无法实现两次调用返回不同结果的需求。

要实现第一次请求成功、第二次抛出RequestException的效果,只需要单次patch,并利用side_effect的列表特性即可——side_effect接收列表时,会按列表顺序依次返回对应结果(或抛出异常),正好匹配你两次requests.get的调用顺序。

修改后的测试代码

@patch("argo_probe_poem.poem_cert.requests.get")
def test_raise_request_exception(self, mock_requests):
    # 第一个元素对应第一次requests.get的返回,第二个对应第二次抛出异常
    mock_requests.side_effect = [pass_web_api, requests.exceptions.RequestException]

    with self.assertRaises(SystemExit) as e:
        utils_func(self.arguments)

    self.assertEqual(e.exception.code, 2)

原理说明

你的业务代码中,第一次调用requests.get('https://hostname_1')会触发side_effect列表的第一个元素pass_web_api,模拟请求成功;循环中第二次调用requests.get('https://host_2')会触发列表的第二个元素,抛出RequestException,正好命中你要测试的异常分支。

如果后续有更多次调用需求,只需要在side_effect列表中追加对应的返回值或异常即可。

内容的提问来源于stack exchange,提问作者dean89

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:55:24