如何在测试中模拟请求和响应?

在日常开发中,除了在服务器端进行单元测试之外,还经常需要做集成测试,为了能更好地做一些边界测试,我们常常需要mock一些HTTP请求或者响应,今天我们就来聊聊几种常见的方式。

服务器端设置

在开发中,我们会在服务器端编写一些便于测试的代码,然后通过增加一些开关来控制对应的代码分支,测试时,可以在配置中心设置对应的开关走对应的代码逻辑,这样可以更好的模拟真实场景。

如下伪代码,根据一个开关值来mock异常阻断:

import java.net.MulticastSocket;boolean mock = globalConfigService.getBoolean(MOCK_KEY);//获取开关值if(mock){throw new RuntimeException("this is mock error.");}// 其他业务代码

尽管这种方式很灵活,但是也存在一些问题,总结如下:

优点

  ·测试逻辑在服务器端设置,因此测试场景更加具体化

  · 通过开关灵活的控制服务器的代码逻辑

缺点

  · 代码里面会增加很测试的逻辑,代码侵入过多,影响代码的可读性和维护性。

  · 编写的代码很可能造成事故

所以,对于在服务器端通过编写代码和开关这种方式,尽量避免在实际生产中使用,试想,万一把开关值设置错了,或者测试后忘了关闭,那可能造成线上事故。

使用代理工具

Fiddler或 Charles Proxy

可以使用Fiddler或 Charles Proxy等代理工具,拦截和修改客户端HTTP请求和响应,这些代理工具一般在做 App测试等时候使用的比较频繁。

Nginx/Apache

可以在Nginx/Apache的配置文件中添加规则,达到mock的目的,但是这种方式需要有权限去修改Nginx/Apache的配置文件

Postman

如果做 web测试,可以使用 Postman,在这个工具中设置规则,因此,Postman是一个很不错的测试工具。

使用浏览器插件

如果是测试一些 sass平台或者网页版项目,使用浏览器插件也是个不错的选择,这里推荐一款使用比较多的chrome插件: modeHeader,modResponse,下图为chrome安装插件的一个截图:

下面分别讲解下日常开发中常用的功能。

ModHeader

ModHeader主要用于修改 HTTP请求和响应头,这里列举它的几个常用功能:

修改请求头和响应头

测试中,我们通常需要修改一些请求头和修改相应结果来来达到某些特定的测试目的,比如,修改User-Agent、Authorization等头部来模拟不同的客户端或授权信息。

模拟错误状态

web开发中,经常会通过不同的状态码进行不同的业务逻辑和业务交互,因此,我们常常会修改HTTP的响应状态码来进行缱绻交互的测试,

可以通过修改响应状态码(如404、500等)来模拟服务器错误,测试应用程序的错误处理逻辑。

模拟不同的用户代理

为了测试不同浏览器的兼容性,我们可以通过修改User-Agent头,这样就可以在测试网站的跨浏览器兼容性和响应式设计。

跨域资源共享 (CORS)

修改CORS头:可以添加或修改CORS相关的头部(如Access-Control-Allow-Origin),解决开发过程中遇到的跨域问题,进行跨域请求的调试。

请求重定向

有时候我们需要模拟请求重定向的场景,因此,可以通过修改头部,或者配合其他工具,可以实现请求重定向,测试重定向逻辑。

ModResponse

ModResponse专门用于修改 HTTP响应,大部分功能是针对ModHeader的增强,这里也列举它的几个常用功能:

修改 HTTP响应内容

这个功能和ModHeader一样,只是更具体化。

模拟错误状态

这个功能和ModHeader一样。

跨域资源共享 (CORS)

这个功能和ModHeader一样。

如下图,设置规则:对于http://127.0.0.1:8080/test请求,返回错误{"error":"this is ModResonse error."}

因此,实际开发中,我们可以根据具体的业务需求设置相应的规则,规则可以设置多个。

总结

本文通过从客户端,代理,服务器 3个角度来分析如何mockHTTP请求和响应,一般代理的方式使用比较多,因为这种方式对于前后端的代码都没有侵入。对于某些特殊情况需要在服务端设置,也一定要谨慎再谨慎!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/443166.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车辆路径规划问题(VRP)优化方案

车辆路径规划问题(VRP)优化方案 车辆路径规划问题(Vehicle Routing Problem, VRP)是物流领域中一个经典的组合优化问题,目标是在满足客户需求的情况下,找到一组车辆的最优配送路径,以最小化总的…

C/C++复习(一)

1.sizeof 关于sizeof我们是经常使用的,所以使用方法就不需要提及了,这里我们需要注意的是,sizeof 后面如果是表达式可以不用括号,并且sizeof实际上不参与运算,返回的是内容的类型大小(size_t类型&#xff0…

CDN绕过学习

1.什么是CDN? CDN就是分布在各个地区的服务器,这些服务器储存着数据的副本。 哪些服务器比较接近你,当你发起请求时,提前就会快速为你提供服务。 总结来说就是: 其实就是用来加速访问的,以及缓解压力&a…

提示工程、微调和 RAG

自众多大型语言模型(LLM)和高级对话模型发布以来,人们已经运用了各种技术来从这些 AI 系统中提取所需的输出。其中一些方法会改变模型的行为来更好地贴近我们的期望,而另一些方法则侧重于增强我们查询 LLM 的方式,以提…

1. Keepalived概念和作用

1.keepalived概念 (1)解决单点故障(组件免费) (2)可以实现高可用HA机制 (3)基于VRR协议(虚拟路由沉余协议) 2.keepalived双机主备原理

一入递归深似海,算法之美无止境

最近在刷leetcode hot100,在写二叉树中最大路径和的时候,看到了一个佬对递归的理解,深受启发,感觉自己对于递归的题又行了!!! 这里给大家分享一下(建立大家先去尝试一下这道题再来看 124. 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列,序列中每…

什么是PLM系统?PLM系统对制造业起到哪些作用?三品PLM系统对汽车制造业意义

在当今竞争激烈的制造业环境中,企业面临着来自市场、技术、客户需求等多方面的挑战。为了应对这些挑战,许多制造企业纷纷引入产品生命周期管理PLM系统,以实现更高效、更灵活的产品全生命周期管理。PLM系统以其独特的优势,在优化产…

智能猫砂盆怎么选购?cewey、鸟语花香、霍曼全方位测评性能大PK

智能猫砂盆怎么选购?cewey、鸟语花香、霍曼全方位测评性能大PK 现在的生活节奏越来越快,我们经常会外出不在家,这时候猫咪的粑粑就不能及时清理,会出现猫咪嫌猫砂盆脏乱拉,家里空气也会充满臭味。针对这个问题&#x…

Unity3d动画插件DoTween使用指南

1、DoTween是什么? DoTween是一款对象动画类插件,它是一款针对Unity 3D编辑器的、快速高效的、安全的、面向对象的补间动画引擎,并且对C#语言开发做出了很多的优化。另外,它使得开发者无需通过Unity内置的Animator或Coroutines即可…

【Chrome浏览器插件--资源嗅探猫抓】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、资源嗅探插件---猫抓二、使用步骤总结 一、资源嗅探插件—猫抓 猫抓是一个浏览器插件,可以检测当前网页中的一些资源文件,可设置嗅探的…

用KLineChart绘制股票行情K线图

用KLineChart绘制股票行情K线图 先看效果集成过程集成到系统 先看效果 用klinechart开源代码集成到系统中,展示的K线图效果。 集成过程 KlineChart源码地址: https://github.com/klinecharts/KLineChart KlineChart提供了多种行情分析指标 集成到…

OJ在线评测系统 微服务高级 Gateway网关接口路由和聚合文档 引入knife4j库集中查看管理并且调试网关项目

Gateway微服务网关接口路由 各个服务之间已经能相互调用了 为什么需要网关 因为我们的不同服务是放在不同的端口上面的 如果前端调用服务 需要不同的端口 8101 8102 8103 8104 我们最好提供一个唯一的 给前端去调用的路径 我们学习技术的时候必须要去思考 1.为什么要用&am…

Python | Leetcode Python题解之第458题可怜的小猪

题目: 题解: class Solution:def poorPigs(self, buckets: int, minutesToDie: int, minutesToTest: int) -> int:if buckets 1:return 0combinations [[0] * (buckets 1) for _ in range(buckets 1)]combinations[0][0] 1iterations minutesT…

JavaSE——集合1:Collection接口(Iterator和增强for遍历集合)

目录 一、集合框架体系(重要) 二、集合引入 (一)集合的理解与好处 三、Collection接口 (一)Collection接口实现类的特点 (二)Collection接口常用方法 (三)Collection接口遍历元素的方式(Iterator和增强for) 1.使用Iterator(迭代器) 1.1Iterator(迭代器)介绍 1.2Itera…

[含文档+PPT+源码等]精品基于Nodejs实现的家教服务小程序的设计与实现

基于Node.js实现的家教服务小程序的设计与实现背景,主要源于以下几个方面: 一、家教市场的现状与需求 随着教育竞争的日益激烈,家庭对子女教育质量的重视程度不断提升,家教服务已成为许多家庭不可或缺的一部分。然而&#xff0c…

graphql--快速了解graphql特点

graphql--快速了解graphql特点 1.它的作用2.demo示例2.1依赖引入2.2定义schema2.3定义GrapQL端点2.4运行测试2.5一些坑 今天浏览博客时看到graphQL,之前在招聘网站上第一次接触,以为是图数据查询语言, 简单了解后,发现对graphQL的介绍主要是用作API的查询语言,不仅限于图数据查…

Meta 发布 Quest 3S 头显及 AR 眼镜原型:开启未来交互新视界

简介 在科技的浪潮中,Meta 始终站在创新的前沿,不断为我们带来令人惊叹的虚拟现实和增强现实体验。2024 年 10 月 6 日,让我们一同聚焦 Meta 最新发布的 Quest 3S 头显及 AR 眼镜原型(Orion),探索这两款产品…

自由学习记录(2)

Unity打包图集相关 Draw Call 实验设置: 我们将创建两个场景,一个场景有高 Draw Call,另一个场景通过优化减少 Draw Call。然后对比它们的帧率(FPS)。 场景 1:高 Draw Call 场景(无优化&…

【数据结构与算法-高阶】并查集

【数据结构与算法-高阶】并查集 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 🌼文章目录🌼 1. 并查集原理 2. 并查集实现 3. 并查集应用 1. 并查集原理 在一些应用问题中&…

了解HTTPS

目录 1.HTTP认识 2.HTTP请求 3.HTTP响应 4.URL 5.HTTP方法 面试题:POST 和 GET区别? 网上关于 GET 与 POST的差别 有待商议 关于请求报头 和 响应报头 6..Host : 7..USer-Agent(简称UA) 8.状态码 9.HTTPS 是…