首页 > 其他分享 >推荐两款HTTP请求Mock利器

推荐两款HTTP请求Mock利器

时间:2024-04-15 09:33:50浏览次数:37  
标签:HTTP 请求 get 利器 Mock mock http requests 模拟

1、背景

在日常测试过程中或者研发开发过程中,目前接口暂时没有开发完成,测试人员又要提前介入接口测试中,测试人员不仅仅只是简单的编写测试用例,也可以通过一些mock的方法进行来提前根据接口测试的情况进行模拟返回接口的信息,进行模拟接口各种场景的异常。

mock是指模拟,也就是模拟接口返回的信息,用已有的信息替换它需要返回的信息,从实现对所依赖的模块的测试。

一般有两种场景:

  • 前端对后端接口的 mock,
  • 后端服务之间的测试中涉及的mock,常常发生在单元测试的时候。

前端mock可以通过一些工具来完成:

  • 使用抓包工具Fiddler,Charles 来实现,通过修改代理返回的数据,实现多种场景的测试。
  • 使用一些API管理工具来模拟,比如yapi,Easy Mock 等
  • 当然有编码能力的,也可以使用node.js,python的fastAPI来模拟

后端的 Mock 则是从接口的角度,如果一个接口A返回的数据需要依赖于另一个接口B,当敏捷开发中B接口还未开发完全时候这里会需要用到 Mock。

对于测试人员,对接口测试的时候,部分接口尚未开发完成,在约定了接口定义之后,也可以使用 Mock 来模拟。

今天给大家介绍一款Python Mock工具:requests-mock

2、工具介绍

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

特点:

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

适用场景:

    1. 单元测试:开发人员可以使用requests-mock模拟HTTP请求和响应,以便在单元测试中测试他们的代码。
    1. 集成测试:在进行集成测试时,requests-mock可以帮助开发人员模拟外部服务的行为,以验证系统的整体功能。
    1. 开发过程中的快速原型验证:在开发过程中,开发人员可以使用requests-mock快速验证他们的代码对于不同的HTTP响应的处理情况。

通过Mock能够帮助我们模拟系统各种行为,包括网络请求、文件读写、数据库操作、系统时间等等。这能够在测试代码时降低对外部依赖的需求,从而提高代码的可测试性。

3、安装

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

pip install requests
pip install requests_mock

4、使用示例

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

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

import requests
import requests_mock

# 模拟GET请求
with requests_mock.Mocker() as m:
    # 模拟post请求内容,返回的json格式,返回码为200
    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:

      # 模拟post请求内容,返回的json格式,返回码为200
    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)
        # 通过pytest.raises进行捕捉异常,如果存在异常,则判断为pass
        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')

标签:HTTP,请求,get,利器,Mock,mock,http,requests,模拟
From: https://www.cnblogs.com/jinjiangongzuoshi/p/18135153

相关文章

  • httprunner 4.x学习 - 05校验(validate)
    前言HttpRunner4.x内置了丰富的校验结果的方式校验方式assert缩写说明equal"eq","equals","equal"相等less_than"lt","less_than"小于less_or_equals"le","less_or_equals"小于或等于greater_than"......
  • RestTemplate进行https请求时适配信任证书
    转载请注明出处:1.http协议请求使用RestTemplate进行http协议的请求时,不需要考虑证书验证相关问题,以下为使用RestTemplate直接使用的代码示例:importorg.springframework.web.client.RestTemplate;importorg.springframework.http.ResponseEntity;importorg.spring......
  • httprunner 4.x学习 - 04提取(extract)和校验(validate)
    前言支持2种响应结果字段提取方式:1.jmespath表达式:响应结果为JSON结构,采用jmespath表达式进行参数提取。参考教程https://jmespath.org/tutorial.html2.正则表达式(regex):返回的非JSON 格式,可以用正则表达式(regex)提取。需要具备一定的正则知识extract提取返......
  • docker拉取失败 Error response from daemon: Get "https://registry-1.docker.io/v2/
     解决方法:配置DNS地址用xftp打开/etc/resolv.conf更改dns地址nameserver8.8.8.8nameserver8.8.4.4保存,在xshell中重启docker  ---  sudosystemctlrestartdocker重新拉取nginx--dockerpullnginx拉取成功!!! ......
  • android http post
    android httppost  privatevoidsendLocationToServer(doublelatitude,doublelongitude){StringtagID="xcvxczvxzvcxz";Stringname="";Stringbiaoduan="";Stringtype1="";......
  • http Range
    RangeRange范围请求,允许服务器只发送HTTP消息的一部分到客户端。Range可以一次性请求多个部分,请求范围用一个逗号分隔开,服务器会以multipart/byteranges文件的形式将其返回。如果服务器返回的是范围响应,需要使用206PartialContent状态码。在请求的范围越界的情况下,服......
  • Docker+Net8运行https
    环境:win11,docker4.28.0,Net8。使用windows版docker 跑老外的run-aspnetcore-microservices 这个分布式项目时,最开始直接运行会遇到这个问题。中间也试了几种方法,有ok也有不行的,有些较为麻烦。Net8开始Docker 端口 默认端口8080了下面是我的1生成pfx文件d......
  • httprunner4.x学习03-变量
    前言声明变量和引用是经常用到的,引用变量方式有两种:$var或 ${var} 通过关键字variables 定义变量主要在config和step中,这两者的区别如下:1.在config中定义的变量为全局变量的,范围比较大,也就是整个测试用例(testcase)的所有地方都可以引用;2.在step中定义的变量为局部变量......
  • conda install sometools报错:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <h
    把该错误投入chatgpt中会反映网络问题,重试几次但我重试了好几天也没安上,重新搜索该报错发现:ThatHTTPerrorhappenedwhenIupdatedthecondawith condaupdateconda.ItriedalloptionsdiscussedherebutitonlywassolvedwhenIdowngradedthecondaversion(I......
  • Asp .Net Core 系列:集成 Refit 和 RestEase 声明式 HTTP 客户端库
    背景.NET中有没有类似Java中Feign这样的框架?经过查找和实验,发现在.NET平台上,虽然没有直接的Feign框架的端口,但是有一些类似的框架和库,它们提供了类似的功能和设计理念。下面是一些在.NET中用于声明式HTTP客户端的框架和库:Refit:Refit是一个用于构建声明式、类型......