Requestly工具快速提升前端开发与测试的效率

news2024/11/26 10:37:32

痛点

前端测试

在进行前端页面开发或者测试的时候,我们会遇到这一类场景:

  1. 在开发阶段,前端想通过调用真实的接口返回响应
  2. 在开发或者生产阶段需要验证前端页面的一些 异常场景 或者 临界值 时
  3. 在测试阶段,想直接通过修改接口响应来验证前端页面是否正常
  4. 想验证后端服务响应比较慢的情况下,验证前端页面是否正常(模拟接口超时或者模拟接口响应的时间的场景)
  5. 想更新请求头,请求体或者请求参数达到测试的目的

后端测试

在后端开发或者测试的过程中,我们可能会遇到这些场景:

  1. 依赖方接口不稳定或者造数困难

安装

Requestly是一款Chrome和Firefox浏览器插件,提供如下功能:
1、URL重定向请求
2、阻止URL请求
3、替换部分URL字符串
4、修改请求和响应中的http标头
5、添加或删除查询参数
6、插入js脚本或者CSS样式
7、修改任何XHR/Fetch响应
8、用户代理
9、延迟网络请求

Requestly插件只能修改 XHR/fetch 触发的 API 响应,要修改每种请求类型的响应,请使用Requestly 桌面应用程序。Requestly开发文档:https://docs.requestly.io/

 第一步安装:
1、第一种方法可以用Chrome商店    https://chrome.google.com/webstore/search/requestly?hl=zh-CN

搜索插件下载,但需要翻墙。直接搜索Requestly,然后添加到拓展程序里面。

 添加完可以在右上角找到打开拓展程序点击Requestly,再点open app,会在新页面打开Requestly

 2、第二种方法可以下载crx包添加到拓展程序里面。Requestly: Modify Headers, Mock API, Redirect下载地址

 第二步使用:
7、修改任何XHR/Fetch响应

浏览器访问固定的 URL/Host/Path 时,会判断是否 Equals(相等)/Contains(包含)/Matches (RegEx匹配)/Matches (Wildcard匹配),满足规则时会返回设置的response。

操作步骤:

(1)添加规则HTTP Rules---->New Rule-->Modify API Response

(2) 填写规则,保存、开启规则后刷新浏览器,规则才会启用。

曾使用的应对措施

根据以上的痛点,我也做过一些探索。

Charles

在验证前端页面的时候,我曾使用抓包软件Charles在捕捉流量的时候,设置断点(类似debug功能),并手动去调整接口的请求体或者响应体。
工作原理:
Charles 断点的实现原理是在客户端和服务器之间插入一个代理服务器,拦截并监视网络流量。当我们设置断点时,Charles 会在代理服务器上暂停请求或响应,直到我们决定继续或取消请求或响应。

  • 具体来说,Charles 会在代理服务器上拦截请求或响应,并根据用户设置的规则进行处理。当 Charles 检测到一个请求或响应匹配了一个断点规则时,它会暂停请求或响应,并在 Charles 的 UI 中弹出一个对话框,让用户选择是否继续执行请求或响应。
  • 在实现过程中,Charles 使用了代理服务器、Socket 和线程等技术。当我们启动 Charles 时,它会在本地计算机上开启一个代理服务器,并将其配置为系统默认的代理服务器。然后,当我们发送一个请求时,Charles 会将该请求发送到代理服务器上,并在代理服务器上等待响应。当代理服务器收到响应后,Charles 会在 UI 中显示响应,并等待用户决定是否继续执行请求或响应。
  • 需要注意的是,由于 Charles 会拦截网络流量并在代理服务器上处理请求和响应,因此它可能会对网络速度和性能造成一定的影响。此外,在设置断点时,我们应该仔细考虑断点规则的范围和条件,避免无意中影响其他请求和响应。

Chrome 插件

通过使用Chrome插件(一般使用Chrome浏览器:如g0ngjie/ajax-proxy),设定一些规则来拦截接口,更改接口的响应。或者对请求进行重定向。但此方法仅局限在Chrome浏览器中使用。
工作原理:
这个工具是一个基于 Node.js 和 Express 框架的 AJAX 代理服务器,可以将 AJAX 请求发送到其他域名下的 API 接口,并将响应返回给客户端。其实现原理如下:

  1. 客户端向 AJAX 代理服务器发送 AJAX 请求,请求包含目标 API 的 URL 以及其他参数。
  2. 代理服务器接收到请求后,解析出目标 API 的 URL 和参数,并将其转发到目标 API 的服务器。
  3. 目标 API 服务器接收到请求后,处理请求并返回响应。
  4. 代理服务器接收到响应后,将响应转发给客户端。

在这个过程中,代理服务器可以对请求和响应进行一些处理,例如修改请求头、添加身份认证信息、对响应结果进行过滤等。这些处理可以在服务器端通过编写中间件来实现。

实现mock工具

实现一款mock工具,设计方案大致如下:

  • 对于后端而言
    • 代码层面的域名改为mock服务器,不能指定请求,会将所有的请求都转发到mock server(若没有匹配的规则,mock server无法进行处理)。
    • 代码层面的域名不变,在服务器中配置代理,将请求转发至mock server,在mock server设置拦截规则,未匹配规则的请求返回自定义的静态响应或者动态响应。未命中规则的请求,将转发至真实的服务器。
  • 对于前端而言
    • 在网关层面,将指定的请求转发至mock server,但这个无法通过mock server平台控制。
    • 本地代理:本地启动代理,将请求转发到mock server,在mock server设置拦截规则,未匹配规则的请求返回自定义的静态响应或者动态响应。未命中规则的请求,将转发至真实的服务器。

Requestly

其实Requestly的工作原理和ajax-proxy 浏览器插件的原理差不多。
Requestly 是一个请求修改工具,可以帮助用户在浏览器中修改网络请求,从而达到一些调试、测试、模拟等目的。其工作原理如下:

  1. 用户在 Requestly 中创建规则,规则包含了要修改的请求 URL、请求头、请求参数等信息,以及要执行的操作,如重定向、修改响应等。
  2. 当用户访问网站时,Requestly 会拦截浏览器发出的请求,并根据规则对请求进行修改。修改后的请求会被发送到服务器。
  3. 服务器处理修改后的请求,并将响应返回给浏览器。
  4. Requestly 接收到响应后,根据规则对响应进行修改,然后将修改后的响应返回给浏览器。

在这个过程中,Requestly 可以对请求和响应进行多种类型的修改,包括重定向、添加请求头、修改请求参数、模拟网络请求等。这些修改可以帮助用户快速定位和解决问题,加速开发和测试过程。
除了使用浏览器插件的方式抓紧请求外,还可以通过启动本地代理的方式来拦截任何请求。

这款工具大大提升了我的工作效率,在前端页面的开发以及测试来说,就是一款网络调试神器!

Requestly的功能

requestly主要有以下的功能:

  • 网络请求与响应的拦截
  • 网络请求与响应的修改

  • api Mock and file mock
  • Android Debugger

流量捕捉方式

1.浏览器插件
2.本地代理:通过启动本地代理来捕获各个端的流量(与Charles类似)

  • 捕捉浏览器的网络请求
  • 捕捉app的网络请求
  • 捕捉模拟器的网路请求
  • 捕捉终端的网络请求
  • 捕捉其他地方的网络请求

请求的修改

Cancel Request

可以选择要取消的特定网络请求,以便在进行调试和测试时排除干扰。

Redirect Request

将特定的网络请求重定向到其他url。

  • 重定向到mock。可以在mock server进行配置。
  • 重定向到其他url。如下规则:访问www.baidu.com时,会被重定向到www.qq.com

Delay network requests

模拟接口延时。通过使用URL匹配或者host匹配或者path匹配来设置规则(支持正则匹配),命中规则的接口将会被requestly捕捉,并在延迟的时间后返回响应

Modify Request Url(Replace string)

  • 更新请求路径: 比如说,我们将v1接口升级到v2,想在上线前对v2接口做下验证。我们可以选择使用流量回放功能进行验证,也可以使用该功能进行验证。将v1请求的接口更新为v2接口,并做相关的验证。

Query Params

修改或者删除请求的查询参数

Modify Headers

  • 支持添加自定义的请求头
  • 修改或者删除原有的请求头
  • 支持添加自定义的响应头
  • 支持修改或者删除原有的响应头

Modify User Agent

  • 更改请求头的用户代理

用户代理在网络通信中起着非常重要的作用,它能够告诉服务器请求的来源和请求的方式。这些信息可以帮助服务器更好地处理请求,提供更好的服务和用户体验。
我们使用chrome浏览器验证功能的时候,可以匹配的域名的用户代理改成对应的代理。

Modify Api Request

  • static data(静态数据)

提供json格式的数据,并直接替换请求的请求体

  • Dynamic (JavaScript)

通过JS修改请求中的请求体,并替换原有的请求体。使用频率最高的功能是:通过对bodyJson进行调整,并重新返回bodyAsJson,达到修改请求体的目的。

function modifyRequestBody(args) {
  const { method, url, body, bodyAsJson } = args;
  // Change request body below depending upon request attributes received in args
  //可以对bodyJson进行调整,并重新返回bodyAsJson
  
  return body;
}

响应的修改

Modify Headers

  • 支持添加自定义的请求头
  • 修改或者删除原有的请求头
  • 支持添加自定义的响应头
  • 支持修改或者删除原有的响应头

Modify Api Response

支持api类型:REST API与GraphQL API

  • static data(静态数据)

提供json格式的数据,并直接将该数据返回给前端

  • Dynamic (JavaScript)

修改真实服务器返回的响应并返回给前端

function modifyResponse(args) {
  const {method, url, response, responseType, requestHeaders, requestData, responseJSON} = args;
  // Change response below depending upon request attributes received in args
  const mock_res = JSON.parse(response)
  console.log('mock_res itemList:',mock_res.data.itemList)
  itemList = mock_res.data.itemList
  if (itemList!==undefined && itemList.length !== 0){
    for(var i=0; i<itemList.length;i++){
      itemList[i].productName = itemList[i].itemId
      itemList[i].status = 1
      itemList[i].statusName = Math.random() < 0.5 ? "DELETE" : "BANNED";

      itemList[i].timeFormatted = new Date().toLocaleString().replaceAll('/','-');
      itemList[i].time = Date.now().toString();

    }
  }
  // mock_res.data.itemList = itemList
  return mock_res;
}

请求响应录制

Requestly Sessions 是一种可用于捕获和共享网络请求的功能。这个功能可以记录和存储浏览器请求以及对应的响应,并在需要时重新发送这些请求。这意味着我们可以跨不同浏览器会话和不同设备之间以及与其他用户共享这些请求。这个功能特别适用于需要经常复制和粘贴相同请求的开发人员、测试人员和网络爬虫等。

  • 比如说,我们在开发联调或者测试的过程中,发现某些问题,可以通过录制请求并共享给其他开发人员,方便他们排查问题。

我对Requestly的应用

1.验证前端在各种状态的展示:通过修改接口的返回响应来模拟各个场景。(当时,你也可以通过在db层面造数来实现接口响应的正确放回:如直接改db或者写造数脚本,这个不在我们今天讨论的范围内。)
我们可以使用Dynamic (JavaScript)来调整响应。可以针对不同的场景自定义不同的json字符串,也可以在原有的响应的基础来进行调整。

  • 如果该场景的验证只涉及单个接口,我们可以套用一下代码模板:我们定义一个status变量,在验证某个场景的时候,就将status设置为某个场景的值,然后在if..else中设置对应的响应。
function modifyResponse(args) {
  const {method, url, response, responseType, requestHeaders, requestData, responseJSON} = args;
  // Change response below depending upon request attributes received in args
  var status=0
  if(status === 0 ){
    console.log("json更新为status=0场景")
  }else if(status ===1 ){
    console.log("json更新为status=1场景")
  }
  return response;
}
  • 如果该场景的验证涉及多个接口,我们可以结合Modify Header Request 与 Dynamic (JavaScript)进行调整。思路如下:为相关接口的请求头新增一个自定义的请求头参数,如statusHeader。然后在处理接口响应的时候,先读取statusHeader的值,再根据statusHeader的值返回相关的响应

2.模拟接口延迟,验证前端页面的处理

3.捕捉各个端的网络请求

  • 捕捉浏览器的网络请求
  • 捕捉模拟器的网路请求
  • 捕捉终端的网络请求

总结

总结一下Requestlty常用的功能:

  1. 修改网络请求:Requestly 可以帮助您修改 HTTP 请求和响应。例如,您可以使用 Requestly 修改请求参数、请求头、请求体或响应头、响应体,以便更好地测试和调试应用程序。
  2. 模拟网络请求:Requestly 可以帮助您模拟网络请求。例如,您可以使用 Requestly 模拟 AJAX 请求、模拟响应超时或模拟 HTTP 状态码,以便测试应用程序的稳定性和性能。
  3. 代理服务器:Requestly 可以帮助您配置代理服务器,以便更好地控制网络请求。例如,您可以使用 Requestly 配置代理服务器以拦截和修改网络请求,以便更好地测试和调试应用程序。

总之,Requestly 是一款非常强大和有用的调试和测试工具,可以帮助开发人员和测试人员更好地测试和调试应用程序。它具有丰富的功能和灵活的配置选项,可以满足不同的测试需求。

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

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

相关文章

字节跳动的网络工程师,是什么神仙存在?

大家好&#xff0c;我是老杨。 要是说起网络工程师的待遇天花板&#xff0c;你觉得会是什么样的&#xff1f; 在2022年&#xff0c;互联网大厂虽然裁了很多人&#xff0c;但却刺激了更多人想要进入大厂&#xff0c;一探究竟。 就从网工这个岗位来说&#xff0c;你说大小厂的…

Linux文本三剑客之awk)

Linux文本三剑客之awk 一、awk的简介二、awk的工作原理三、命令格式四、实例1、按行输出文本2、BEGIN模式和END模式3、按字段输出文本4、通过管道&#xff0c;双引号调用shell命令5、date的用法6、getline的用法7、awk数组 一、awk的简介 awk是一种处理文本文件的语言&#xf…

C++STL——哈希

哈希 unordered系列关联式容器unordered_set与unordered_mapset VS unordered_set 底层结构哈希概念与哈希冲突哈希冲突的解决闭散列——开放定址法开散列——哈希桶 模拟实现unordered_set与unordered_map其他哈希函数哈希的应用哈希切割&#xff08;面试题&#xff09;位图位…

如何把容器变成物理机

如何把容器变成物理机 本文的主题是把容器变成物理机&#xff0c;根据所学的知识。以及通过各种搜索引擎。他们都告诉我们&#xff0c;这是不可能的。这真的是不可能的吗&#xff1f;我不信&#xff0c;那我就要创造奇迹。请继续往下看。本文将教你如何把容器变成物理机。 这…

java多线程_01

文章目录 1. 线程的概念1. 程序2. 进程3. 线程4. Java程序的运行原理5. 并发与并行概念1. 并发2. 并行3. 并发编程和并行编程 2. Java中的Thread线程类1. Thread类构造方法2. Thread类普通方法3. Thread类静态方法4. Thread类特殊方法 3.线程的创建方式1. 继承Thread类2. 实现R…

C++ 仿函数(一)

目录 一、仿函数是什么&#xff1f; 二、仿函数的特点 1.仿函数在使用时&#xff0c;可以像普通函数那样调用, 可以有参数&#xff0c;可以有返回值 2.仿函数超出普通函数的概念&#xff0c;可以有自己的状态 ​编辑3.仿函数可以作为参数传递。 三、谓词 一元谓词示例&a…

38【源码】数据可视化:基于 Echarts + Python 动态实时大屏 - 全国图书零售监测数据

效果图展示 1.动态效果演示 2.静态切片效果图 一、确定需求方案 1.确定产品上线部署的屏幕LED分辨率 本案例基于16:9 屏宽比&#xff0c;F11全屏显示。 2.部署方式 浏览器打开播放&#xff0c;Chrome浏览器、360浏览器等。 二、整体架构设计 前端基于 Echarts开源库设计…

leetcode27.移除元素

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【LeetCode】 &#x1f353;希望我们一起努力、成长&#xff0c;共同进步。 &#x1f449;题目链接 题目描述 给你一个数组 nums 和一个…

从0开始学习数据库(持续更新)

一个数据库最重要的部分是什么&#xff1f; 关系型数据库mysql有着四大特性&#xff0c;原子性&#xff0c;隔离性&#xff0c;一致性&#xff0c;持久性。 kv数据库有着原子性&#xff0c;持久性&#xff0c;弱一致性。 可见&#xff0c;不管数据库的存储引擎是什么&#xff0…

LeetCode_递归_中等_138.复制带随机指针的链表

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random&#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的深拷贝。 深拷贝应该正好由 n 个全新节点组成&#…

vector源码解析及扩容优化

一、vector源码解析 没有任何一个东西可以在原地扩充&#xff0c;因为要了一块内存后&#xff0c;后面这块内存有可能被使用了&#xff0c;或者能不能用也不知道。链表可以保留原有节点&#xff0c;再将指针指向别处开辟的新内存&#xff0c;但这个也不算原地扩充。 对于vecto…

不需要等待列表,也不用魔法上网的Claude,能否比肩ChatGPT?

近期&#xff0c;国外Anthropic公司发布了Claude聊天机器人&#xff0c;堪比ChatGPT的最大竞争对手。一经推出&#xff0c;市场上就经常拿它俩来对比&#xff0c;因为推出Claude产品的Anthropic 公司是由多位前OpenAI前员工组成&#xff0c;两家公司&#xff0c;以及他们推出的…

ssm框架之SpringMVC:乱码问题

一种修改tomcat配置文件 如果tomcat乱码修改Tomcat的conf的server.xml文件加上 URIEncoding“UTF-8” 添加一个URIEncoding“UTF-8” tomcat 如果7.0 不这样设置&#xff0c;无论get还是post后台都显示乱码。tomcat如果是8.0版本&#xff0c;只有post后台显示是乱码 一种过滤…

Redis进阶

主要内容 Redis持久化Redis主从Redis哨兵Redis分片集群 Redis持久化 Redis有两种持久化的方案: RDB持久化AOF持久化 1. RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所…

HTML基本知识与常用标签的使用以及实现一个HTML版本个人简历

文章目录 HTML1. HTML结构1.1 认识标签1.1.2 HTML文件结构 2. HTML常见标签2.1 注释标签2.2 标题标签2.3 段落标签2.4 换行标签2.5 格式化标签2.6 图片标签2.7 超链接标签2.8 表格标签2.9 列表标签2.10 表单标签2.11 label 标签2.12 select 标签2.13 textarea 标签2.14 无语义标…

[架构之路-200]- 性能需求与性能分析:影响性能的主要因素

目录 前言&#xff1a;关于性能的几点说明 第一章 性能需求&#xff1a;提出各种性能指标 1.1 可靠性或可用性&#xff1a; stablity 1.2 处理能力或效率: Performance 1.2.1 指标是吞吐率 1.2.2 指标是响应时间&#xff1a; 1.2.3 指标是资源利用率 1.3 高并发性 1.…

FreeRTOS开启任务调度函数xPortStartScheduler详解

在FreeRTOS中&#xff0c;创建完任务后需要调用vTaskStartScheduler开启调度器&#xff0c;在这个函数主要就是创建空闲任务然后调用xPortStartScheduler函数开启任务的调度&#xff0c;本篇文章就以Cortex-M7为例来分析一下这个函数具体做了什么事&#xff0c;并深入理解其中的…

文献阅读:A Lite Distributed Semantic Communication System for Internet of Things

目录 动机&#xff1a;为什么作者想要解决这个问题&#xff1f;贡献&#xff1a;作者在这篇论文中完成了什么工作(创新点)&#xff1f;规划&#xff1a;他们如何完成工作&#xff1f;理由&#xff1a;通过什么实验验证它们的工作结果自己的看法 动机&#xff1a;为什么作者想要…

Python遍历大量表格文件并筛选出表格内数据缺失率低的文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件内、某一列数据的特征&#xff0c;对其加以筛选&#xff0c;并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。 首先&#xff0c;我们来明确一下本…

【Linux】多线程 --- POSIX信号量+懒汉模式的线程池+其他常见锁

Linux system sprinkle flowers 文章目录 一、POSIX信号量1.阻塞队列实现的生产消费模型代码不足的地方&#xff08;无法事前得知临界资源的就绪状态&#xff09;2.信号量的理解3.初步看一下信号量的操作接口4.环形队列实现的生产消费模型5.环形队列的代码编写&#xff08;维持…