python mock接口测试代码
时间: 2024-12-28 16:16:34 浏览: 2
### Python Mock API 测试示例
当执行API集成测试时,为了防止实际网络请求的发生并控制返回的数据,可以利用`unittest.mock`模块来创建模拟对象。下面是一个具体的例子,展示了如何使用`unittest.mock.patch`装饰器来替换`requests.get`函数的行为。
```python
from unittest import TestCase
from unittest.mock import patch, MagicMock
import requests
class TestApiIntegration(TestCase):
@patch('requests.get')
def test_fetch_data_from_api(self, mock_get):
# 创建一个Mock响应对象
mock_response = MagicMock()
mock_response.status_code = 200
# 设置期望的JSON返回值
expected_result = {"key": "value"}
mock_response.json.return_value = expected_result
# 配置mock_get以返回我们的假响应
mock_get.return_value = mock_response
# 执行被测函数
result = fetch_data_from_api("test_endpoint")
# 断言结果是否符合预期
assert result == expected_result
# 确认get方法确实被调用了,并且参数正确无误
mock_get.assert_called_once_with('https://api.example.com/test_endpoint')
def fetch_data_from_api(endpoint):
"""调用API服务获取数据"""
response = requests.get(f'https://api.example.com/{endpoint}')
return response.json()
```
在这个案例里,通过`@patch`装饰器指定了要替代的目标——即`requests.get`,并将这个替身赋给名为`mock_get`的方法参数。接着定义了一个带有特定状态码和预设`.json()`输出的虚拟响应对象。最后,在断言部分验证了函数行为以及外部依赖项(这里是HTTP GET请求)按预期工作[^1]。
对于较老版本的Python环境,如果未内置`unittest.mock`,则需单独安装第三方包`mock`以便获得相同的功能支持。
阅读全文