一、背景
抓包工具的使用,是测试工作中高频使用必备的技能之一,charles因其功能强大,页面清爽,成为了目前主流且非常好用的抓包工具。之前有写过一篇文章:Charles抓取https请求及常见问题解决,刚入门的同学可以先看这一篇。
但会抓包只是第一步,抓到请求之后,能对请求做对应的操作,以满足我们不同测试场景的需要,才是核心难点。因此今天主要是charles的进阶使用技能讲解,主要包括以下几点:
- 如何过滤请求
- 如何串改请求入参&响应结果
- 如何模拟请求上行/下行超时
- 如何模拟弱网环境
二、过滤请求
运行Charles抓包后,我们所有的网络请求都会显示在Charles页面上,请求太多,不方便找到自己关注的请求:
这个时候就需要用到过滤请求这个功能,在下方“Filter” 文本框内输入你关注的请求的域名,这样页面上就只会展示该域名相关的请求信息了:
三、临时串改请求
很多时候我们需要串改请求的入参、响应内容,以达到想要的测试效果。有多种方式可以达到串改请求的效果,如果是每次都临时改造入参、响应内容,那么可以使用断点。在请求上鼠标右键,然后选择“Breakpoints”:
然后你会发现工具栏的断点图标变为了红色,表示断点已启用:
此时我们再次访问草料二维码的登录页面,charles则会给该请求打上断点,拦截该请求。首先弹出的修改入参页面:
有3个按钮,分别的作用是:
- Cancel,表示不修改入参,跳过修改入参,直接进入修改响应内容页面
- Abort,表示取消该次请求,本次登录请求会失败
- Execute,表示执行本次的修改内容,然后跳转进入到下一步“修改响应内容页面”
比如我们本次将登录窗口的文案从“微信扫码登录”改为“微信扫码登录被串改啦哈哈”:
点击Execute,执行本次修改,查看修改后的效果,会发现登录窗口文案确实被修改了:
四、长期串改请求
打断点的方式适合每次临时手动修改请求入参和响应,但有的时候,我们不想每次都手动修改,想让某个请求一直自动被串改,这个时候就需要用到“重写”功能。
同样是登录请求,我们在charles菜单栏选择Tool > Rewrite…
然后勾选上“Enable Rewrite”,添加一个规则,比如我们取名叫“changeLogin”,填写我们要修改的请求是哪一个请求:
然后再添加要修改的内容是request还是response,本次我们修改response,将response中body中的“微信扫码登录”文案修改为“我试试微信登录啊啊”:
点击OK保存好之后,重新请求草料二维码登录页面,会发现登录页面的文案已被修改
并且多次请求登录页面,会发现每次页面都被自动修改了,不再需要像打断点的方式每次都手动去修改。如果不想修改请求了,就在菜单栏选择Tool > Rewrite…>Rewrite Settings页面上取消掉“Enable Rewrite”选项的勾选就行了:
取消勾选后,再次请求登录页面,页面恢复正常原样显示啦:
五、请求上行下行超时
有时候我们需要测试请求超时的情况下,程序的表现是否符合预期。超时又分为请求上行超时和请求下行超时,通过Charles同样可以实现该功能。做法依然是使用前面说过的断点,给请求打上断点后,我们可以点击菜单栏的Proxy > Breakpoint Settings…
在弹出的断点设置窗口上双击请求,会出现“Edit Breakpoint”窗口,窗口上只勾选"Response", 则表示请求不拦截,只拦截响应:
保存后,再次请求登录,charles收到响应后会拦截,自动跳到修改请求响应内容界面:
- 如果是让它超时,可以停留在这个状态等程序触发超时,或者点【Abort】直接触发请求失败;
- 如果想让它等一会再返回或想修改响应结果,可以在合适的时机,点【Execute】;
- 如果不想拦截了,放过它,就点【Cancel】
登录请求失败后,页面显示如下:
同理,如果要测试请求上行超时,则在断点编辑弹窗页面上只勾选“request”即可:
六、模拟弱网限流
有时候我们需要测试在网络很差,即通常说的弱网情况下,程序的表现是否符合预期。这个时候同样可以通过Charles来实现该功能。点击菜单栏的Proxy > Throttle Settings…
勾选“Enable Throttle”, 勾选“Only for selected hosts”,设置对“https://user.cli.im”域名的请求限流:
点击Throttle preset下拉选项中预设了一些常用的网速设置,可以直接选择,也可以自己手动在下方去修改设置:
网络限流的每一项代表的含义,我找了一个中文版帮助大家参照对比理解各选项的意思:
最后我们来看看弱网后的效果,本次登录请求总共耗时11.71秒才加载完成:
============================================================================
以上就是本次的全部内容,如果对你有帮助,麻烦点个赞+收藏+关注,一键三连啦~ 欢迎关注下方我的公众号:程序员杨叔,更多文章会第一时间在上面发布,持续分享各类测试开发知识干货,你的支持就是作者更新最大的动力。