本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
Charles 如何进行Mock ,有三种方式
作用:用一个本地文件内容替换 匹配拦截到的接口的响应数据
路径:Tools > Map Local ,会打开 Map Local Setting 弹框,勾选 Enable Map Local ,点击add ,填写接口匹配拦截规则,以及替换的本地文件,如下图所示:

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



如下图所示,根节点变为 lottozxt ,map local 拦截请求修改数据成功!

作用:将一个请求映射到另一个地址上,比如说 访问百度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 转过来的。
作用:字面意思 Re - write 重写,可以重写、重新修改请求,上面两个Mock方式, Map Local 和 Map Remote 都是修改响应数据 ,而 Rewrite 即可以修改响应数据(响应头和响应体), 又可以修改 请求数据 (请求头 和 请求体)。
路径:Tools > Rewrite


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

如上图所示:拦截 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有什么区别?