测试人社区

代理技术哪家强?接口 Mock 测试首选 Charles!

作为一名测试工程师,抓包是最常用的分析问题手段。Charles 则是最常用的代理工具,而且对于 Windows 和 Mac 也非常友好。之所以这么受欢迎还有以下几个原因:

  • 代理功能
    • HTTP/HTTPS、Socks5
    • 限速模拟
    • 断点调试
  • 转发
    • 映射:让发往a网站的请求返回b网站的内容
    • 重写:自动把请求和内容篡改掉
  • 工具:拼装请求、重放请求、重读请求

Charles 代理工具的每个知识点都值得认真研究。

远程服务 Mock(Map Remote)

作为测试工程师可能需要各种"天马行空"的数据,当接口返回数据不能满足你需要时,怎么办?当想在真实环境中测试 H5,而新版本还未上线,怎么办?

在测试过程中,对于某些不容易构造或者不容易获取的对象,我们需要”自己动手,丰衣足食“;拦截请求、篡改请求、转发请求——Mock 助你想你所想,要你所要;而实现Mock 有很多方法,这里介绍以 Charles 工具实现的方法。这里以访问百度首页,然后将请求转发至 TesterHome 首页为例。

备注:以下操作默认已经安装 Charles 并且设置好信任证书,可以成功代理。

1)在 Charles-Tools 中选中 Map Remote

2)打开后勾选 Enable Map Remout,再点击 Add

3)设置映射自(Map From)的路径、协议(不选默认 HTTP/HTTPS 都支持)和映射至(Map To)的路径、协议;完成后点击 OK

4)这个时候我们在浏览器中输入 www.baidu.com 进行访问,发现实际访问的是 TesterHome,从抓包也可以看出来显示为

Mapped from remote URL: https://www.baidu.com/

Rewriting traffic with Breakpoints

利用 Breakpoints,可以对指定的 HTTP 或 HTTPS 请求在到达客户端之前进行拦截暂停,暂停后可以对原数据进行修改,例如对返回值进行修改,修改完成后再将请求发送至客户端。

有时候我们对界面进行检查,可能会涉及字段长度、数字位数、不同数值对应不同颜色或标识图片的展示等,如果纯依靠后端来构造复杂的数据可能没有那么方便,也可能会有大量脏数据产生,并且我们测试的目的只是为了验证前端的展示,所以这个时候可以利用 Charles 的 rewrite 功能来完成数据的 mock;

1)在需要拦截的请求上右击选中“ Breakpoints ”

2)在 Proxy->Breakpoint Settings 中勾选 Enable Breakpoints,然后双击请求弹出 Edit Breakpoint 框,选中 Response 后 OK 。

3)这个时候我们访问 TesterHome 首页,会发现者请求被拦截了,网站也一直处于加载等待响应阶段。

图片

4)选中 Edit Response,修改原标题栏中"社区"字段为" Charles 社区",点击 Execute。

5)查看 TesterHome 首页,发现原标题字段已被成功修改。

Rewriting traffic with the Rewrite tool

Breakpoint 快速的实现接口拦截修改,但是如果每次都想要以相同的方式进行拦截修改就需要每次都进行手动触发,这样就很不方便,影响效率;因此我们可以使用 Tools 中的 Rewrite 功能来完成提前定义好接口数据的篡改规则,这样每次访问的时候就会自动拦截修改发送

1)Tools 中选中 Rewrite,然后设置需要拦截的请 URL

图片

2)再选择 Add 一个重写规则,将返回值中的“ TTF榜单 ”替换为“ 11111榜单 ”

重新访问 TesterHome 首页

上述 Rewrite 功能,不仅可以对 Response 进行修改,还可以对 Request 进行修改,只是较为常用的就是对 Response 进行修改。

上述例子中都是以 Web 端做了演示,移动端的用法和此原理一致,要注意的是 Android6.0 以上的版本默认不支持代理抓包了,需要让开发在 App 中添加两个配置项。

参考文档:

  • Charles 官网:

https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

  • 国外博客文章: