您当前所在位置:首页攻略使用Python Mock工具requests-mock模拟HTTP请求

使用Python Mock工具requests-mock模拟HTTP请求

更新:2024-04-15 09:48:05编辑:游戏资讯归类:攻略

在日常测试和研发过程中,接口未开发完成时测试人员需要提前介入接口测试。测试人员不仅编写测试用例,还可以通过mock方法模拟接口返回的信息,以模拟接口各种异常场景。

mock是指模拟,即用已有的信息替换需要返回的信息,用于对所依赖的模块进行测试。主要有两种场景:前端对后端接口的mock和后端服务之间的测试中的mock,常发生在单元测试时。

前端mock可以使用抓包工具Fiddler、Charles,API管理工具如yapi、Easy Mock,以及具备编码能力的工具如node.js、python的fastAPI来实现。后端的Mock则是从接口的角度,用于模拟依赖其他接口的情况。

对于测试人员,部分接口尚未开发完成时,可以使用Mock来模拟。今天我们将介绍一款Python Mock工具: requests-mock

requests-mock是一个用于模拟HTTP请求的Python库,可以帮助开发人员在测试和开发过程中模拟各种HTTP请求和响应。使用requests-mock,可以模拟接口的各种场景,就像真正的服务器一样。

它具有灵活性,允许开发人员根据需要灵活地定义虚拟的HTTP响应,包括状态码、头部信息、响应体等。同时,其API设计简单易用,可以很容易地集成到测试和开发工作流程中。此外,requests-mock支持自定义的响应生成器和请求匹配器,可以满足各种复杂的测试需求。

requests-mock适用于单元测试、集成测试以及开发过程中的快速原型验证。通过Mock能够帮助我们模拟系统各种行为,包括网络请求、文件读写、数据库操作、系统时间等等,降低对外部依赖的需求,提高代码的可测试性。

安装必要的模块:requests, requests_mock。

pip install requests
pip install requests_mock

示例一:使用Mock模拟GET、Post请求

以下是一个使用requests-mock模拟GET请求和POST请求的示例:

import requests
import requests_mock

# 模拟GET请求
with requests_mock.Mocker() as m:
    m.get('http://example.com/api/data', json={"name":"测试开发技术"}, status_code=200)
    response = requests.get('http://example.com/api/data')
    print(response.json())  

# 模拟POST请求
with requests_mock.Mocker() as m:
    m.post('http://example.com/api/submit',json={"name":"测试开发技术"}, status_code=201)
    response = requests.post('http://example.com/api/submit', data={'key': 'value'})
    print(response.json())  

在上面的示例中,我们使用requests-mock模拟了一个GET请求和一个POST请求。在每个模拟的上下文中,我们使用requests_mock.Mocker()创建了一个模拟器,并使用m.get()和m.post()分别定义了GET请求和POST请求的模拟响应。然后,我们使用requests库发送了实际的GET和POST请求,并打印了模拟的响应内容。

示例二:requests-mock在测试脚本中的用法

import requests
import requests_mock

def get_data():
    response = requests.get('http://example.com/api')
    return response.json()
    
def test_get_data():
    adapter = requests_mock.Adapter()
    mock_response = {"status": "ok", "datas": [{"name": "狂师", "description": "公众号:测试开发技术"}]}
    adapter.register_uri('GET', 'http://example.com/api', json=mock_response)

    with requests.Session() as session:
        session.mount('http://', adapter)
        data = get_data()
        assert data["status"] == "ok"
        assert len(news_data["datas"]) == 1
        assert news_data["datas"][0]["name"] == "狂师"    

示例三:requests-mock模拟请求错误异常

正常请求接口时,会出现接口异常情况,比如超时或请求服务器异常。下面通过requests-mock进行模拟服务器异常的情况。

import requests
import requests_mock
from requests.exceptions import ConnectionError, Timeout

def test_exception():
    with requests_mock.Mocker() as m:
        m.get('http://example.com/api',exc=Timeout)
        with pytest.raises(Timeout):
            requests.get('http://example.com/api',timeout=3)
        m.get('http://example.com/api', exc=ConnectionError)
        with pytest.raises(ConnectionError):
            requests.get('http://example.com/api')

以上就是电脑114游戏给大家带来的关于使用Python Mock工具requests-mock模拟HTTP请求全部内容,更多攻略请关注电脑114游戏。

电脑114游戏-好玩游戏攻略集合版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

IGN评十佳《蜘蛛侠》游戏:失眠组包揽前三 未命名