Charles 常用的功能:弱网、mock请求和返回

2024-03-12 12:10

本文主要是介绍Charles 常用的功能:弱网、mock请求和返回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

Charles提供了许多可以帮助测试同学模拟环境和数据的功能。这里记录一下常用的几个:

  1. 模拟弱网
  2. mock请求参数
  3. mock返回数据
  4. 模拟请求超时

 

模拟弱网

在 Charles 的菜单上,选择 “Proxy”->”Throttle Setting” 项

弹出的对话框中,勾选上 “Enable Throttling”

设置 Throttle Preset 的类型

 

如果只想模拟指定网站的弱网,可以再勾选上图中的 “Only for selected hosts” 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。

 

mock请求参数

Charles 提供了网络请求的修改和重发功能。只需要在任意已有的网络请求上点击右键,选择 “Edit”,即可创建一个可编辑的网络请求。如下所示:

我们可以修改该请求的任何信息,包括 URL 地址、端口、参数等,之后点击 “Execute” 即可发送该修改后的网络请求(如下图所示)。

 

Mock 返回数据

有时需要测试一些服务器返回不同内容、或指定内容的场景,尤其是前端页面的展示,例如页面内容为空的情况,数据异常的情况,数据太多换行或分页的情况,部分耗时的网络请求超时的情况等。Charles 提供了相关的功能,可以大大减少我们去db或者服务端mock数据的复杂度。

Map、Rewrite、Breakpoints 功能,都可以达到修改服务器返回内容的目的。这三者在功能上的差异是:

Map 功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。

Rewrite 功能适合对网络请求进行一些正则替换。

Breakpoints 功能适合做一些临时性的修改。

Map 功能

Charles 的 Map 功能分 Map Remote 和 Map Local 两种。

Map Remote :将指定的网络请求重定向到另一个网址请求地址。

Map Local :将指定的网络请求重定向到本地文件。

在 Charles 的菜单中,选择 “Tools”->”Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面。

 

对于 Map Remote 功能,我们需要分别填写网络重定向的源地址和目的地址,对于不需要限制的条件,可以留空。下图是一个示例,我将所有 ytk1.yuanku.ws(测试服务器)的请求重定向到了 www.yuantiku.com(线上服务器)。

 

对于 Map Local 功能,我们需要填写的重定向的源地址和本地的目标文件。对于有一些复杂的网络请求结果,我们可以先使用 Charles 提供的 “Save Response…” 功能,将请求结果保存到本地(如下图所示),然后稍加修改,成为我们的目标映射文件。

 

下图是一个示例,我将一个指定的网络请求通过 Map Local 功能映射到了本地的一个经过修改的文件中。

 

Map Local 在使用的时候,有一个潜在的问题,就是其返回的 Http Response Header 与正常的请求并不一样。这个时候如果客户端校验了 Http Response Header 中的部分内容,就会使得该功能失效。解决办法是同时使用 Map Local 以下面提到的 Rewrite 功能,将相关的 Http 头 Rewrite 成我们希望的内容。

Rewrite 功能

Rewrite 功能功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。

例如,我们的客户端有一个 API 请求是获得用户昵称,而我当前的昵称是 “tangqiaoboy”,如下所示:

 

我们想试着直接修改网络返回值,将 tangqiaoboy 换成成 iosboy。于是我们启用 Rewrite 功能,然后设置如下的规则:

 

完成设置之后,我们就可以从 Charles 中看到,之后的 API 获得的昵称被自动 Rewrite 成了 iosboy,如下图所示:

 

Breakpoints 功能

上面提供的 Rewrite 功能最适合做批量和长期的替换,但是很多时候,我们只是想临时修改一次网络请求结果,这个时候,使用 Rewrite 功能虽然也可以达到目的,但是过于麻烦,对于临时性的修改,我们最好使用 Breakpoints 功能。

Breakpoints 功能类似我们在 Xcode 中设置的断点一样,当指定的网络请求发生时,Charles 会截获该请求,这个时候,我们可以在 Charles 中临时修改网络请求的返回内容。

下图是我们临时修改获取用户信息的 API,将用户的昵称进行了更改,修改完成后点击 “Execute” 则可以让网络请求继续进行。

 

需要注意的是,使用 Breakpoints 功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时。

 

这个页面本来应该返回的字段信息是这样的:

手机上展示一个名称叫“产品说明书”的文本,点击后可以跳转到这个链接

a、选择想要mock数据的接口设置断点,如图:

  

b、设置了断点后,再次触发访问该接口。

c、先会弹出页面问是否要修改request,即是否修改请求的传参。

此时不需要修改请求参数,可以直接点击“Execute”执行

d、接着会弹出Response修改的页面,点击Json Text

这里的有好几种查看的方式,但是推荐使用JSON Text看的比较清楚。 

e、现在我们对拦截回来的数据进行修改,把返回的跳转链接改成https://www.baidu.com,然后点击“Execute”

 

更改后的数据就会像正常返回回来的数据那样显示到,APP的页面上展示。点击后就跳转到www.baidu.com页面了。

 

那么一般情况下,什么时候会用到mock数据测试呢。

1、测试接口的时候,模拟接口返回的不同信息,为空,或者不同code

 

举个例子:比如有个订单状态接口 orderstate,有已支付、待支付、已关闭等多个状态返回,如果是在没有mock的情况下,我们需要实际造多个状态的订单数据,甚至去修改数据库订单字段状态来看前端订单显示情况。

但是利用Charles的Mock方法,可以打断点,截取接口返回的response的json数据,进行一些模拟:比如

订单接口返回不同状态时对应前端的展示
订单接口返回状态为空时对应前端的展示
订单数据出现异常时对应前端的展示
订单接口请求超时对应前端的展示


2、测试页面展示以及兼容的时候,想知道某一个字段内容长或者短,或者是空白的时候怎么展示,或者一个图片尺寸大了或者小了怎么展示

拿刚才看到的name“产品协议”文本举例,可以通过断点及模拟返回的数据,进行一些模拟测试

文本内容为空时对应前端的展示

文本内容包含特殊字符时对应前端的展示

文本内容较长超出一行时对应前端的展示

 

3、定位前后端问题的时候,更直观

比如当前端点击跳转没有反映时,可以将链接地址拷贝到浏览器中看看是否打开,看是地址本身的问题,还是前端无法调起手机浏览器的问题

 

反向代理

Charles 的反向代理功能允许我们将本地的端口映射到远程的另一个端口上。例如,在下图中,我将本机的 61234 端口映射到了远程(www.yuantiku.com)的80端口上了。这样,当我访问本地的 61234 端口时,实际返回的内容会由 www.yuantiku.com 的 80 端口提供。

 

给服务器做压力测试

我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下。

我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项,如下所示:

 

接着我们就可以在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。

 

悄悄说一句,一些写得很弱的投票网站,也可以用这个办法来快速投票。当然,我也拿 Charles 的 Repeat 功能给一些诈骗的钓鱼网站喂了不少垃圾数据,上次不小心还把一个钓鱼网站的数据库打挂了,嗯,请叫我雷锋。

这篇关于Charles 常用的功能:弱网、mock请求和返回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/801211

相关文章

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A