简介

Charles是目前最强大最流行的http抓包调试工具,Mac、Unix、Windows各个平台都支持。特别是做APP开发,调试与服务端的通信,Charles是必备工具。我们在进行APP开发或测试时,经常需要知道APP的每一步操作调用的是哪个接口,请求参数是什么,返回值是什么,那么Charles就是一个很好用的利器。

工作原理

Charles本质就是一个http抓包分析工具,在使用过程中将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现网络包的截取和分析。

安装和

使用

Charles的安装和使用这里就不介绍了,网上有很多详细的安装和使用方法。

Charles在APP测试中简单的使用场景

1、确认调用的接口。在测试过程中,使用Charles抓包工具可以知道APP的每一步操作调用的是哪个接口,请求参数是什么,返回值是什么。在测试过程中根据服务端接口文档还可以初步定位问题。

2、Mock数据验证。这种是在APP测试过程中使用最多的情况,在测试过程有很多异常情况、边界情况以及正常情况的验证,构造测试数据是测试过程中重要的一环。作为APP前端测试这种验证正常流程就需要后端接口返回某种特定场景,然后再在前端验证逻辑。我们知道一个复杂的系统可能和很多其他系统交互,对其他交互系统的逻辑可能不太清楚,就导致构造测试数据变得比较麻烦,在一定程度上影响了测试的进度。为了解决这个问题,Charles发挥了重要的作用。下面几个是在APP测试过程使用的其中几个场景:

2.1)Mock状态的验证;比如APP测试中刚出借的团还在锁定期不能直接发起债权转让,要验证债转中时前端的展示逻辑,可以通过mock债转中时字段的状态来实现。首先需要了解前端调用服务端的接口信息,债转中状态前端是通过两个接口来实现的,因此要mock这两个接口对应的状态,

上面两个截图接口中是正在出借中状态且"transferStatus": "HOLDING",要显示债转中状态可以通过Charles设置断点来修改接口中"transferStatus"字段的值,改成"TRANSFERING"即可实现。

2.2)边界值验证;一般情况下接口返回的内容较短在前端可以正常显示,当接口返回的内容过长时前端就需要做特殊的处理,不然前端展示的格式就不友好,影响用户使用效果。这时我们可以通过Charles来Mock接口中对应字段值的长度来进行边界情况的验证。

2.3)不同类型值的验证;例如接口中某些字段返回不同的类型值时,前端需要显示接口中对应字段的内容。这时就可以通过Charles修改接口返回值中字段对应不同的类型来验证前端的展示是否正确。

2.4)接口返回为空前端没有数据时验证;在测试过程中经常会遇到接口返回为空导致前端数据不显示,从而不能进行后续的测试验证。例如APP测试中要验证散标的出借流程,散标列表中返回为空,Charles抓取数据如下图:

我们在知道接口返回数据格式情况下可以在响应中添加可用的散标数据,修改后的数据如下:

通过Charles设置断点编辑接口返回,这样前端就能展示数据了,即可进行后续流程的测试。

3、设置断点方式遇到接口返回超时;在执行过程中通过设置断点后编辑请求或响应,这种方法在编辑请求或响应的过程中可能时间占用比较长导致接口请求超时,为了解决这种问题,我们可以通过设置Map Local,将接口response信息修改后在本地,设置接口访问时返回的数据指向本地的文件即可。如下图是测试过程中使用Map Local的一个应用,截图中上面是接口信息,修改后的接口返回信息保存在txt文档中,

4、初步分析定位问题的原因。移动互联网时代,我们开发的客户端必然包括Android和iOS版本,相同的功能必然在不同的客户端都有实现,比如同样的功能Android能用,而iOS不能用,作为测试人员我们如果只是简单的提个bug给iOS开发,描述说某个功能不能使用请开发人员解决。开发人员为了解决该问题首先需要重现问题,可能还需要和测试人员再次沟通,然后模拟同样的数据进行复现,这样沟通成本就增加了,降低了工作效率。为了提高效率我们在测试过程中遇到问题时,首先使用Charles抓包工具将数据抓取下来,然后比较下两个平台发送的请求参数和返回的数据有什么不同,如果请求参数不同,测试人员通过模拟工具,把缺少的参数加上,那么返回的数据是不是就正确了呢?如果参数相同,返回的数据不同,或者是参数相同,返回的数据相同,这样的话,问题就显而易见了,测试人员在提bug时将抓取和分析的数据提交给开发人员。不但可以提高测试人员的自身技能,而又提高了解决问题的效率。

最后:

Charles是一个非常强大的抓包工具,还用很多其他重要功能没有介绍,在后续的测试过程会加强对其了解,更好的利用Charles。

查看原文 >>
相关文章