Charles工作原理
任何通过App端/Web端发送给后端的接口都会被Charles拦截再转发给后端,返回也是一样经由Charles转发给客户端。
在日常手工测试过程中,我们除了通过页面操作验证功能是否正确外,还需要验证接口的返回是否正确。有时候为了测试某些特殊的测试场景,还不得不去更改服务端的返回值,这部分操作就必须用到测试工具。
验证接口正确性,对于QA来说,可以对发现的问题进行简单的归因判断,提升手动测试效率。
搭建代理环境-Web端
1. 下载Charles, https://www.charlesproxy.com/,下载成功并安装根证书Help ->SSL Proxying ->Install Charles Root Certificate, 选择始终信任;
2. 证书安装成功,打开Proxy ->MacOsProxy,且打开recording, 当你在浏览器里面访问网页的时候,就能看到web端发送的所有请求;
3. 当前大多数请求是Https, 如果想抓取Https的请求,还需要在Proxy ->SSL Proxying Settings中进行如下设置,Enable SSL Proxying ->Add host *+Port 443;
搭建代理环境-App端
1. 先设置端口号,在Proxy ->Proxy Settings中设置端口号,默认是8888也可以定义为其他的端口号,同时勾选下面的两个子选项;
2. 确定手机代理地址。Charles客户端 打开Help ->SSL Proxying-> Install Certificate Root Certificate on a Mobile Device or Remote Browser ;
接下来需要在App下载证书和设置代理,设置->无线局域网->连接电脑所在WiFi->ⓘ->配置代理->手动->服务器(可通过Charles-Help-Local IP Address或打开网络偏好设置查看)->端口:8888;
3. App浏览器进入chls.pro/ssl,下载证书,要注意的iOS10以后的版本需要在设置->一般->关于->证书,选择信任所下载的证书并安装;
4. 根据提示进入App端网络设置,保证和charles同一网络环境,设置VPN IP和端口如图中一致;
5. 启动App, 在Charles中检查是否有请求。
接口过滤、拦截和修改
因为所有的信息都会被我们抓取,如果过多会对我们造成干扰,所以我们可以过滤接口请求。
1. 直接过滤,在Filter中填写想要过滤的关键词,如下图所示我只抓取域名包含Charles相关的请求,其他的请求不显示;
2. 拦截,Proxy-> Proxy settings ->Include or Exclude ->add, 在请求量多的情况下,可以只抓取你想要拦截的特定请求;
3. 修改,Proxy-> Breakpoints settings-> Add,通过添加断点的方式,模拟接口返回数据,比如想要检查界面在空数据或者大数据的情况下UI的展示,就可以通过修改返回数据的方式达到期望效果,根据业务需求来做调整;
或者一个简单的方式鼠标右键在请求添加Breakpoints,同上,当这个请求再次被触发时就会被拦截,可以选择EditRequest看到这个请求所有的参数,点击Excute请求就会被发送出去;同时EditReponse也可以更改服务端返回的所有参数,更改完之后点击Excute服务端返回的内容就变成了更改后的。
设置完成之后可选择是否Enable Breakpoints, 不勾选将不会被应用。
远程映射
用户客户端或者服务端,对返回的请求有超时判断,或者需要更改太多服务端返回值时使用。有时候通过打断点数据还没修改完可能已经超时了,这个时候远程映射就非常方便。
1. 打开Tools ->Map Local, 勾选Enable Map Local, Add打开设置对话框;
2. Map From是原始请求,Map To是期望的结果,这个结果可以存在本地文件以Text或者Json的格式保存,保存后当有目标发生请求时,Charles直接将你提供的文件内容当做返回值返回,这样就不需要手工去修改了。
慢网络模拟
检查客户端在不同网络环境下的表现,Charles可以轻松做到。
1. Proxy ->Throttling Setting, 选择不同的网络环境,指定到特定测试网址,根据需要选择不同的网络环境。
微服务分支测试
现在很多应用都是微服务架构,在微服务发布上线前如何尽心测试呢?当前分支有一个独立的标记来证明我在这个分支下测试,既然如此我们可以以给定的请求添加Header的方式在Charles里面进行微服务分支测试,
在菜单Tools ->Rewrite,Add Location, *号代表任何地址都会被Rewrite
Add Rewrite Rule,设置Rewrite的各项规则,如下图表示我要测试服务,它有一个可标识的Key是Header123,value值是SW。
简单接口并发测试
测试某个接口基本的性能如何,选中接口右键 Advanced Repeat, Iterations表示并发轮次数,进行多少轮的测试;Concurrency表示并发线程数,每轮多少个请求同时发;Repeat Delay可以设置轮次之间的时间间隔。
通过观察服务端的响应时间,来判断最基本的性能是否达标。
Charles应用常见问题
1. 打开Charles发现没有请求数据? —— 检查是否连接了VPN,如果有先断开VPN连接charles再连接VPN
2. 配置好Charles,浏览页提示“您的连接不上私密连接” ——检查是否打开/Enable SSL Proxying Setting
3. Charles关闭,电脑就无法上网了 ——打开电脑网络设置 ->高级 ->代理,检查并取消勾选Http和Https代理选项
4. App开启了代理,但Charles没出现“允许”的选项 ——App和电脑需要再同一个网络
5. 手机上抓包返回显示unknown ——iOS比较常见,查看手机上是否信任了证书