强大的Charles的使用以及Mock数据 for iOS & (牛逼的)测试工程师

我是你东哥哥· 2019-09-12

安装软件

百度搜索charles,第一个地址官方链接了:https://www.charlesproxy.com,下载安装便可。

设置网络,进行抓包

  • 将移动设备和电脑设备设置为同一个网络,即连接同一个Wi-Fi。
  • 利用电脑查询IP地址,如下图:

  • 或者通过Mac的终端查询,打开终端,输入ifconfig,如下图:

  • 设置移动设备的网络代理模式 进入连接的无线网的高级模式,上滑倒最底层,进入HTTP代理模式,然后选择手动,并在服务器中填写自己查到的IP地址,然后在端口中填写8888,最后存储设置。

  • 然后用手机打开你要抓包或者mock的App,电脑端会显示一个弹窗,然后选择 allow

再进行手机操作,每个请求都会被拦截,使用Charles可查看。

证书配置,拦截HTTPS请求

对于https的请求,拦截的是乱码,如下图,需要做一些额外的操作。

需要设置SSL Proxying Settings,将对应的域名以及端口添加进去,使用*:*即可,如下图

另外还有相关证书的配置,通过help->SSL Proxying去安装证书,Mac与iPhone都要进行安装并且信任,如下图

配置电脑端证书,选择install Charles Root Certificate,然后安装,最后选择始终信任

配置手机端证书,选择install Charles Root Certificate on a Mobile Device or Remote Browser,然后在手机浏览器里输入chls.pro/ssl下载,进行安装。最后一步就是进入手机设置,通用->关于本机->证书信任设置,然后信任刚刚安装的证书即可。

这样就可以成功的拦截https的请求。

Mock链接的数据

截取到链接的数据是这样的:

如果列表有很多的请求,可以通过左下角的Filter:进行筛选

方法一

首先要选择出想要mock数据的接口,设置断点

然后需要再次触发访问该接口。Charles会停留在断点接口,提供一个Edit Requese页,可提供修改参数以及请求类型、请求链接的校验。

接着点击Execute进行执行下一步,选择JSON Text可以看到断点链接返回的参数,这个时候就可以改动返回值的结果,以达到想要测试的目的。

比如这里修改的是参数 "Community": "东方御花园一期",改成 "Community": "测试Mock数据",执行Execute,便可看到下面结果(确保没有请求超时)。

方法二

按照方法一的步骤,获取到断点链接返回的数据后,把数据源拷贝出来,本地新建一个JSON类型的文件,把返回的数据复制到该文件中。 具体步骤如下:

打开软件Sublime Text

把数据源复制,然后选择JSON类型,保存,如下图:

把保存好的json文件放置在桌面,同时修改你要mock的数据,同样这里修改的是参数 "Community": "东方御花园一期",改成 "Community": "测试Map Local"

在你需要调试的接口,右键有个Map Local

选择你在本地提前写好的json文件,然后点OK

最后再次触发该请求即可。

以上是两种方法Mock数据,个人感觉第二种更方便一点,毕竟网络请求一般都是会有超时情况,如果Mock数据需改比较麻烦的话,会带来不便。

最后如果需要取消断点Breakpoint或者Map Local,可以进行下面的操作。

限速

利用上面的小乌龟,可以达到控制网速的效果,不过需要设置一下代理模式。 步骤如下:

进行网络请求限制网络时,可调节Download的相关参数;如果要限制上传速度的话,可调节Upload的相关参数。

相关设置搞定以后,点击OK进行保存,便可以进行各种弱网测试,此时你也会发现,小乌龟变绿了,貌似在睡觉,表示限制网络了。

重写功能

Charles的Rewrite功能非常强大,可以重写接口所有元素的内容,例如:header、host、url、path、query、param、response status、body。

首先选择Tools->Rewrite,会弹出下面弹窗,选中Enable Rewrite以及点击左下角的Add

具体需要重写的对象,可以在Location下点击Add去添加。具体重写操作可点击右下侧add按钮进行添加。

当所有都添加完毕,点击OK保存即可。

最后感谢好友 @倩楠 的帮助,让我从陌生到了解的认识Charles。