本篇文章将会绍如何获取测试期间移动设备发出的网络请求。如果我们可以从测试代码中访问网络请求,那么就可以根据发送到服务器的特定请求做出断言判断,或者断言网络响应中的数据是否显示在UI中。我们还可以捕获网络数据,以便在测试失败时帮助调试问题。我们还可以通过检查请求和响应之间的时间来判断网络调用的性能。

从chrome和safari浏览器中中获取网络日志相对容易,因为浏览器驱动提供了该类型的信息可以进行api调用,但如果我们想获取来手机机应用程序的请求,该怎么做呢?

解决方案是man-in-the-middle proxy(mitmproxy),这个代理程序设置在设备和互联网之间,我们配置移动设备通过我们的代理服务器完成路由所有请求,代理服务器记录通过时的流量。mitmproxy不仅可以记录流量,还可以对流量进行修改。这个能力丰富了自动化测试的用途:我们可以在某些URL无法访问时测试脚本失败,我们可以修改响应以满足对特殊场景的校验需求。

接下来我们将会介绍使用mitmproxy-java来完成对网络流量的捕获,mitmproxy-java还提供了以下功能:

  • 可以通过后台启动的方式运行代理服务器
  • 可以传入lambda函数,对所有截获的消息都会调用该函数
  • 可以修改来自代理的响应

环境配置

首先我们需要安装mitmproxy,以使mitmproxy-java来对代理服务器进行操作:

Copy to Clipboard

mitmproxy-java

在Pom.xml中添加一下信息:

Copy to Clipboard

启动mitmproxy:

Copy to Clipboard

演示代码:

Copy to Clipboard