自动化测试Mock神器:轻松模拟HTTP请求..

news2024/11/26 22:20:24

一、背景

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

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

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!_哔哩哔哩_bilibili15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!共计27条视频,包括:1.【性能测试】什么是性能测试以及性能测试的价值和目的、2.【性能测试】真实企业性能测试指标详解以及指标测算、3.【性能测试】真实企业中性能测试流程以及细节剖析等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1B14y1D7X9/?spm_id_from=333.337.search-card.all.click

一般有两种场景:

  • 前端对后端接口的 mock,

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

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

  • 使用抓包工具Fiddler,Charles 来实现,通过修改代理返回的数据,实现多种场景的测试。

  • 使用一些API管理工具来模拟,比如yapi,Easy Mock 等

  • 当然有编码能力的,也可以使用node.js,python的fastAPI来模拟

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

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

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

二、工具介绍

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

特点:

  1. 灵活性:requests-mock允许开发人员根据需要灵活地定义虚拟的HTTP响应,包括状态码、头部信息、响应体等。

  2. 易用性:requests-mock的API设计简单易用,开发人员可以很容易地集成到他们的测试和开发工作流程中。

  3. 可扩展性:requests-mock支持自定义的响应生成器和请求匹配器,可以满足各种复杂的测试需求。

适用场景:

  • 单元测试:

    开发人员可以使用requests-mock模拟HTTP请求和响应,以便在单元测试中测试他们的代码。

  • 集成测试:

    在进行集成测试时,requests-mock可以帮助开发人员模拟外部服务的行为,以验证系统的整体功能。

  • 开发过程中的快速原型验证:

    在开发过程中,开发人员可以使用requests-mock快速验证他们的代码对于不同的HTTP响应的处理情况。

通过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:
    # 模拟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://www.coloradmin.cn/o/1213354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么选好用的电脑监控软件

在选择好用的电脑监控软件时,需要考虑多个因素,包括功能和特性、安全性和隐私保护、用户界面、实时监控和报警功能、日志记录和报告功能、兼容性以及用户评价和口碑等。 首先,需要明确你需要监控的内容,例如屏幕活动、应用程序使用…

U盘变成了.lnk,怎么处理

没曾想客户电脑是是不是有个病毒啥的,把我的U盘直接干成了只有一个.lnk的一个快捷方式,后面百度找了很多方法,最后找到了一个非常实用的方法,后整理了一下交给大家 方法如下: 1.找到电脑U盘文件 2.搜索框中输入你之…

正则提取记录

使用正则 https?:\/\/([^\/\s])/

TikTok女性创作者:媒体世界的新领袖

在数字时代,社交媒体已成为媒体和娱乐产业的关键组成部分,而TikTok作为最受欢迎的短视频分享平台之一,为女性创作者提供了一个独特的机会来在媒体世界中崭露头角。 这个平台不仅为女性创作者提供了一个创作和分享自己的声音、观点和创意的空…

Arthas搭建与使用

背景 在平时开发过程中经常会遇到日志打印有问题、代码不知道是否执行、定位运行缓慢的代码段等需求,这时往往需要排查很久,并且由于我们基于docker进行部署,一旦有问题要发包调试的话构建过程还是比较复杂耗时的,有时候打包只是…

为什么说MES管理系统是车间层与管理层的桥梁

随着制造业的快速发展,企业对于生产过程中的管理要求越来越高。为了满足这一需求,MES生产管理系统应运而生。MES管理系统作为车间层与管理层之间的桥梁,扮演着至关重要的角色。本文将探讨为什么说MES管理系统是车间层与管理层之间的桥梁。 一…

动画短片怎么制作gif?一个方法简单又好用

网络上常常能看到动画短片,虽然时长短但是内容很丰富。当我们想要将这种动画短片做成gif格式图片的时候,应该怎么办呢?很简单,通过使用在线制作动画(https://www.gif.cn/)网站,无需下载软件上传…

uniapp生成自定义(分享)图片并保存到相册

需求描述 在一个页面中底部有个保存图片的功能,点击能够保存一张生成的自定义表格图片。 第一眼见到这个需求 自己会出现了两个问题 如何去处理图片中的自定义内容以及样式如何将自定义内容转化成图片 至于保存图片,uniapp有对应的api去实现uni.saveIma…

顶象获“直通乌镇”全球互联网大赛二等奖

11月10日,2023“直通乌镇”全球互联网大赛在浙江乌镇圆满落幕。本次大赛由世界互联网大会、浙江省人民政府主办,旨在探索互联网发展的新技术、新模式、新业态,推动全球互联网合作创新,激发互联网创业活力。 在当天的颁奖典礼上&a…

栈:括号匹配问题!

目录 题目: 思路分析: 解题思路: 一、配对: 二、数量问题: 三、细节问题: 完整代码: 手撕栈: 题目: 给定一个只包括 (,),{,}&…

微签:电子签章实力派,这19年从幕后走向台前

微签是什么?尽管在电子签章领域已深耕19年 ,是国内电子签名市场的拓荒者之一,但因为其低调的风格,一直不为众人所知。不过,如果现在你想对目前市面上的电子签名厂商做一个专业客观的盘点的话,不管从哪个角度…

【论文精读2】R-MVSNet

R-MVSNet【递归多视图立体网络】,论文全名:“Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference”,CVPR 2019(CCF A) 在MVSNet的基础上做了一些改进,主要解决的问题是代价体正则化(Cost Volume…

大语言模型概述|亚马逊这些互联网公司为什么花巨资训练自己的模型?

2023年可谓是大语言模型元年,OpenAI、亚马逊、谷歌等互联网公司争先恐后推出了自己的大语言模型:GPT-4、Titan、PaLM 2,还有亚马逊即将推出的第二个大语言模型Olympus等等。这一革命性技术如今已经在全球范围内引发了广泛的讨论和关注&#x…

用于部署汽车AI项目的全面自动化数据流程

如何创建、优化和扩展汽车 AI 的数据流程 想到汽车行业的人工智能 (AI) 时,脑海中可能会立即浮现未来的道路上遍布自动驾驶汽车的情景。虽然这一切尚未实现,但汽车行业已在 AI 方面取得诸多进步,不仅安全性提高,车内体验也得到改…

餐饮展示小程序的作用是什么

餐饮是市场重要的组成部分,尤其是我国八大菜系,各类细分菜数量非常多,并分布在全国,各类大小品牌餐饮商家数量也非常庞大,每个城市的商业街都是一个接一个餐厅,酒类、酒店多样。 餐饮行业经营痛点比较明显…

C++入门,详解类和对象(1)

类和对象 一,前言二,类的介绍2.1类的引入2.2类的定义 三,类访问限定符及其分装3.1访问限定符说明 四,类的作用域五,类的实例化六,类对象模型6.1类的存储方式6.2类的大小计算 七,this指针7.1this…

Java_static 继承

static static修饰成员变量 static修饰成员变量的应用场景 static修饰成员方法 static修饰成员方法的应用场景 static的注意事项 static的应用知识:代码块 static的应用知识:单例设计模式 饿汉式单例模式 懒汉式单例模式 面向对象三大特征之二:继承 什么是继承 继承的好处 继…

永磁材料测试系统主要应用

1. 产品特征 永磁材料测试系统装置具有独立的电参量校准功能。采用慢速减幅方式对样品退磁。超宽范围的电流连续稳定调节。磁通计的积分器零漂和霍尔探头的非线性误差影响小。系统配置连续可调双极性磁化电源,方便样品的磁化与退磁。测量B或J:采用B或J线…

【开源】基于JAVA的生活废品回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案,旨在鼓…

使用 MATLAB HDL Coder 和 FPGA 快速实现自动白平衡(AWB)

使用 MATLAB HDL Coder 和 FPGA 快速实现自动白平衡(AWB) 在此项目中,我们将使用 MATLAB Simulink 和 HDL 编码器创建自定义 IP -- AWB。 MATLAB 设计 自动白平衡模块的设计是使用 HDL Coder 在 MATLAB 和 Simulink 中创建的。HDL Coder能够生…