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

Flask接口单元测试:跨函数调用requests请求Mock失效求助

问题排查与解决

你的Mock失效核心原因是:被测脚本myscript.py中导入的requests和测试脚本里patch的全局requests不是同一个引用。当functionB调用requests.get时,它用的是自己模块内导入的requests实例,而非测试中被patch的那个。

解决步骤

1. 修正Patch目标

把测试中的@patch.object(requests, 'get')替换为patch被测脚本内的requests对象:

from unittest.mock import patch
from src.routes.CRUD import myscript  # 确保能正确导入被测模块

# 重点:patch的是myscript模块里的requests.get
@patch.object(myscript.requests, 'get')
def test_functionA(self, mock_requests):
    # 后续逻辑...

2. 修正Mock返回值的设置

你之前对Mock返回值的写法有误,正确的设置方式应该是先给mock_requests的return_value设置属性,再指定json()的返回值:

# 模拟响应对象的status_code和json()返回值
mock_response = mock_requests.return_value
mock_response.status_code = 201
mock_response.json.return_value = {"some": "value"}  # 直接传字典,不需要json.dumps

3. 完整修正后的测试代码

import json
from unittest.mock import patch, Mock
from src.routes.CRUD import myscript
from your_flask_app_module import create_app  # 替换为你创建Flask app的方式
import unittest

class TestMyEndpoint(unittest.TestCase):
    def setUp(self):
        self.app = create_app()
        self.client = self.app.test_client()

    @patch.object(myscript.requests, 'get')
    def test_functionA(self, mock_requests):
        # 配置Mock响应
        mock_response = Mock()
        mock_response.status_code = 201
        mock_response.json.return_value = {"some": "value"}
        mock_requests.return_value = mock_response

        data = {'some': 'data'}
        headers = {'Authorization': 'Bearer somekey'}
        result = self.client.post(
            '/myendpoint',
            data=data,
            follow_redirects=True,
            content_type='multipart/form-data',
            headers=headers
        )

        # 验证Mock被调用
        mock_requests.assert_called_once()
        self.assertEqual(result.status_code, 201)

额外注意事项

  • 确保测试脚本能正确导入src目录下的模块:可以在myproject目录下创建__init__.py,或者在测试脚本开头添加路径配置(比如sys.path.append(os.path.abspath('../src')))
  • 如果你用的是蓝图,确保在创建测试用app时正确注册了蓝图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:15:32