charles的Filter功能可以过滤某种host或是url的某个字段;右键选中某个host点击focus,主界面选中过滤栏的focused,会自动筛选出该host的所有请求,常用于不知道关键字的一些请求。响应内容会有JASON格式,内容为图片也可以预览。
http请求不需要安装证书,而https是需要安装证书的。 首先,安装charles上的证书:
按步骤安装证书并信任。
其次,安装移动端的证书,打开浏览器输入chls.pro/ssl下载证书并安装。
打开charles——proxying——proxying settings——proxies设置好端口,勾上框里的勾勾就完成了电脑上的设置,如图所示:
然后,在手机上设置好代理进行抓包,以iphone手机为例,打开手机—设置—无线局域网—选择自己连接的网络右边详情键—HTTP代理选择手动—填写服务器、端口(8888)连接即可。
注意⚠️:因为是将charles运行所在的电脑设置为手机的代理,所以手机上的服务器填写的是电脑的IP。
获取方法:
1.打开终端,输入ipconfig en0,敲回车。
2.打开charles——help——SSL proxying——安装手机证书,弹窗提示中也会有电脑IP。
各种证书、设置安装好之后,打开charles,会弹toast,点击allow即可看到源源不断的请求冒出来。
当然,打开之后你可能会看见如下图的请求:
选中该乱码的请求,右键,你可以看见它的代理状态为disable,选择蓝色区域中的Enable ssl proxying,下回这个host的请求就会变成enable的状态,到时你看到的就不是一串乱码啦~
打开proxying——ssl proxyingsettings,你会看见你允许的host出现在允许的location中。
由于现在测试移动端的缘故,这个功能学会了之后可以轻松地执行一些需要大量数据堆积的特殊case,不用依赖与服务器的同学啦。
举个详细的例子来学习这个功能:
如我们的app有个社区的功能,用户可以对此话题进行点赞评论。当你需要测试点赞数量较大数值时,就需要改动数据库里likeview这个字段的值。charles能让你轻松“拦截”请求,修改字段。
首先,你得把这个接口找到,如图,右键选中该请求,允许将该请求打断点:
>
找到接口之后,把请求中的内容复制出来,放在文本编辑器中,如Sublime Text中。提前看好需要修改的字段,本例中可以看到这条话题的likeNum为2,也就是说点赞的人数为2。下面,我们就用断点的方式,把likeNum改为99999999。
找到该接口之后,需要把这个请求设置为允许断点的情况:
然后在Proxy中找到断点设置:
你可以看到,之前所选中的/community/category/post/get这个接口出现在了断点设置的列表,点击进入断点编辑页面:
把其中的Query清空或输入*,去掉request前面的勾(不然执行的时候得点两次运行)即完成设置。
之前抓到该请求的时候,把请求中的内容复制出来粘在文本编辑器如sublime text等中,找到likeview字段,该数值为0,将其改成你需要的值,如99999999,全部copy。
重新请求该内容,charles会自动拦截该请求,跳转到编辑response内容页面,选择Jason Text形式,讲复制的内容copy进去,点击execute执行。
你将看到客户端的响应内容为你所编辑的内容。注:请求响应有一定的时间,超时就会出现网络不给力的情况,所以这也是为什么需要提前编辑好内容而不是当场找字段修改的原因。
最终,我们可以看到移动端的结果如下:
repeat,顾名思义就是重复请求的意思,一般对于测试人员来说,这个可以用作对服务器的压力测试。试想,同一个接口,同时去请求多次,只要对数值进行设置即可。选中需要重复多次的请求右键,你会看到一个repeat advanced,点击进入设置打压的并发进程和压测的次数。确定之后,再做一次请求,就会新打开一个窗口,一连串冒出你需要重复的请求次数。
很多时候,需要创造弱网环境的测试。可怜公司的测试机一般都没手机卡,很难随时想要的3G/4G网络,这个时候,使用charles,分分钟整出一个弱网环境。
首先找到Proxy——Throttle Setting:
点击进入,当然是允许截流咯,钩上Enable Throttling的勾,下面的Throttle preset可以快速地选择一个网络环境,比如3G。当然,下面的各种宽带、最大传输单元等等,可以自行设置值。
简单轻松,分分钟搞定慢速网络。
注:(明日补充各个网速参数的值)
Meaning | 中文 |
---|---|
BandWidth | 带宽 |
Throtte Preset | 网络预设 |
Utilisation | 采用(%) |
MTU | 最大传输单元 |
其实只要开始预设的网络状态选择正确,下面的参数会随着你的选择而变化,一般默认值就可以。
Map即是某个请求的重定向,用重定向的内容来响应请求的内容。其实个人感觉跟断点修改请求的内容功能有一致性。
Map功能有两种。一种是Map Local,即将请求重定向到本地文件;第二种是Map Remote,即将请求重定向至某个其他的请求。除了重定向的文件位置不同,其他对于js,css,API接口等都可以重定向。
一般,对于移动客户端的测试,API接口的重定向使用较多。当你需要测试web页的时候,这个Map功能也能使用到。
这边主要讲Api的重定向,即,修改/api/接口路径下的请求到对应的测试环境的对应目录的/api/下,修改接口请求的host为测试环境的host。
重定向到本地的文件,其实与打断点的方式差不多,breakpoints可以直接修改某个请求,而重定向到本地文件是本地准备好一个请求内容的文件方便去请求,对于那种需要多次测试的借口,可以考虑设置一个本地文件。
同样来个详细的例子,毕竟测试同学用到很多。
app内有个搜索框,搜索框内默认有配置的搜索词,测试不同长度的搜索词是否会导致服务器挂掉就可以用起来啦。
之前从请求中拿到了/lib/recipe/homepage/get接口的返回内容,保存在本地某个路径下,修改searchkey字段的值为“小绵羊测试”(如图),保存后去charles中使用起Map Local功能!
正式开始Map Local功能的使用!找到某个请求右键,拖到最下选择Map Local进入设置界面:
编辑Mapping:
同样的操作,将Query处的内容删除,Local path写的是本地需要定向文件的路径。case-sensitive是区分大小写的问题,勾与不勾影响不大。
保存后,重新请求这个接口,每次返回的值都会重定向到本地的这个文件,麻麻再也不用担心我去多次设置断点拉!
最终得到结果如下:
总而言之,Map Local功能本地与断点差不多,但是对于重复需要测试的case,map功能减少了很多断点设置,也不用返回去copy内容,一个本地文件轻轻松松搞定。