Charles 抓包工具教程(五) Charles 如何进行Mock

本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~

Charles 如何进行Mock ,有三种方式

一、Map Local

知识点讲解

作用:用一个本地文件内容替换 匹配拦截到的接口的响应数据
路径:Tools > Map Local ,会打开 Map Local Setting 弹框,勾选 Enable Map Local ,点击add ,填写接口匹配拦截规则,以及替换的本地文件,如下图所示:
在这里插入图片描述
接口匹配规则:

  • Protocol :协议,选项有HTTP 、HTTPS
  • Host : 域名,或 服务器的IP地址
  • Port :端口
  • Path :接口的路径
  • Query: URL 中 ? 后面拼接的查询参数

【敲黑板知识点】
以上字段支持通配符,比如说Path ,填写 /test/api1 ,只支持拦截/test/api1 这一个接口,是全匹配,比如无法匹配 /test/api1/apis ;如果填写/test/* ,就能够匹配以/test/开头的所有接口,比如 /test/api1 、/test/api1/apis

选择本地替换文件:

  • 文件的格式可以是 .txt 、 .json
  • Case-sensitive :区分大小写,勾选说明填写的文件路径区分大小写,不勾选,文件路径不区分大小写;如上图所示,我填写的文件名称是Assert.json ,实际上文件的真实名称为 assert.json ,依然可以找到文件,因为不区分大小写。

在这里插入图片描述

实战

  • 选择的接口信息,如下图所: 响应数据的根节点是 lotto
    在这里插入图片描述
  • 本地文件的内容是把根节点的数据调整为 lottozxt ,让两者做一下区分。打开 map local ,再次发出请求


如下图所示,根节点变为 lottozxt ,map local 拦截请求修改数据成功!
在这里插入图片描述

二、Map Remote

作用:将一个请求映射到另一个地址上,比如说 访问百度www.baidu.com 映射到CSDN博客 www.csdn.net 上
路径:Tools > Map Remote ,会打开 Map Remote Settings 弹框,勾选 Enable Map Remote ,点击add ,填写映射规则,如下图所示:
在这里插入图片描述

把 http://localhost:9999/test/restAssured 接口指向 http://localhost:9999/test/info ,mapTo 只填写了Path ,其他选项默认和Map From 保持一致。 两个接口的详细信息,如下图所示:
在这里插入图片描述
打开Map Remote ,请求http://localhost:9999/test/restAssured ,查看响应数据 是否是 /test/info 的响应数据 :
在这里插入图片描述
如上图所示,响应的是接口test/info的返回内容,并且URL 已经变成了 /test/info 但是Overview > Notes 中标明了是从 /test/restAssured 转过来的。

三、Rewrite

知识点

作用:字面意思 Re - write 重写,可以重写、重新修改请求,上面两个Mock方式, Map Local 和 Map Remote 都是修改响应数据 ,而 Rewrite 即可以修改响应数据(响应头和响应体), 又可以修改 请求数据 (请求头 和 请求体)。
路径:Tools > Rewrite
在这里插入图片描述

在这里插入图片描述

接口的匹配规则和 Map Local 中接口的匹配规则一致 (整个charles 所有接口的匹配规则都是一样的) 。
重写规则中的type类型比较多:

  • Add Header : 新增header 信息(原来没有此信息),where 选择的是request ,则新增是请求头信息 ,where 选择的是 response ,则新增是 响应头信息;
  • Modify Header : 修改原有的header信息
  • Remove Header : 删除掉原有的header信息
  • Host : 修改HOST 信息,仅仅替换Host,可以把请求指向另一个域名,和 Map Remote 的功能差不多
  • Path : 修改接口的路径
  • URL :修改URL,替换整个URL,可以把请求指向其他的地址,和 Map Remote 的功能差不多
  • Add Query Param :在URL ? 之后新增参数
  • Modify Query Param :修改URL ? 之后的参数内容
  • Remove Query Param :删除URL ? 之后的参数内容
  • Response Status :修改响应状态,比如把code码 由200 调整为 404
  • Body :where 选择的是request ,则是请求体 ,where 选择的是 response ,则是 响应体;

实战

在这里插入图片描述
如上图所示:拦截 localhost:9999/test/info ,路径 /test/info 重写为 /test/restAssured ,接口就重新指向了localhost:9999/test/restAssured

在这里插入图片描述

如上图所示,把请求头中的Postman-Token 重写为 editPostmanToken ,再次发起请求查看修改结果,请求头已成功替换。
在这里插入图片描述
如上图所示,修改响应体中的 userid 为 USERID 。Body 的修改只能是找对应的字符串内容并进行修改,没有办法进行keyi-value 的替换,比如不能将 name 的值 zhangxiaotian 调整为 zxt , 若想修改,只能是修改 zhangxiaotian 这个字符串 为 zxt ,其实在工作中 name 这个key 一般不会变,而zhangxiaotian 可能会随时变动,所以这种rewrite 就不再适合。

{
    
    
    "name": "zhangxiaotian",
    "USERID": "8888"
}

总结:
三种Mock 方式各有各的使用范围,我们需要根据自己的使用场景进行灵活的选择。


文末说明
推荐博文:接口测试经典面试题:Session、cookie、token有什么区别?

猜你喜欢

转载自blog.csdn.net/qq_15283475/article/details/127792734