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

如何为循环调用requests.get的函数编写测试并按URL定制返回值

如何根据URL动态Mock requests.get的返回值

你可以通过unittest.mock.patch结合side_effect来实现——side_effect允许你定义一个自定义函数,根据requests.get的输入参数(这里就是URL)返回对应的模拟响应。

示例实现步骤

  1. 原业务函数(假设你的代码结构如下):
import requests

def fetch_multiple_urls(urls):
    results = []
    for url in urls:
        resp = requests.get(url)
        results.append({"url": url, "content": resp.text, "status": resp.status_code})
    return results
  1. Mock测试代码:
from unittest.mock import patch, Mock

def mock_requests_get(url):
    # 定义URL与返回内容的映射关系
    url_response_map = {
        "https://example.com": {"text": "示例网站内容", "status": 200},
        "https://test-api.com/data": {"text": '{"id": 1, "name": "test"}', "status": 200},
        "https://invalid-url.com": {"text": "404 Not Found", "status": 404}
    }
    
    # 创建模拟的Response对象
    mock_resp = Mock()
    # 根据URL获取对应配置,无匹配则返回默认404
    resp_config = url_response_map.get(url, {"text": "Unknown URL", "status": 404})
    mock_resp.text = resp_config["text"]
    mock_resp.status_code = resp_config["status"]
    
    return mock_resp

def test_fetch_multiple_urls():
    test_url_list = [
        "https://example.com",
        "https://test-api.com/data",
        "https://invalid-url.com"
    ]
    
    # 使用patch替换requests.get,指定side_effect为自定义函数
    with patch("requests.get", side_effect=mock_requests_get):
        results = fetch_multiple_urls(test_url_list)
        
        # 验证结果是否符合预期
        assert results[0]["content"] == "示例网站内容"
        assert results[1]["status"] == 200
        assert results[2]["status"] == 404

关键说明

  • side_effect会接收被Mock函数的所有输入参数,因此mock_requests_get可以直接拿到调用时传入的URL。
  • 用字典映射URL和响应配置,比多个if-elif分支更简洁易维护。
  • 通过Mock()创建模拟的requests.Response对象,设置text、status_code等属性来模拟真实响应的行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:40:17