在做自动化的时候,当遇到某些性能问题导致的超时情况就会出现对象访问超时的问题,遇到这种问题想回溯跟踪问题就比较困难了,如果能有个Fiddler这样的代理服务器来监控多好啊!
browsermob-proxy就是这样的一款基于Java的代理服务,它的具体流程有点类似与Flidder或Charles。即开启一个端口并作为一个标准代理存在,当HTTP客户端(浏览器等)设置了这个代理,则抓取并有能力修改所有的请求细节并获取返回内容。
browsermob-proxy可以将HTTP请求细节数据导出到HAR文件
HAR(HTTP档案规范),是一个用来储存HTTP请求/响应信息的通用文件格式,基于JSON。这种格式的数据可以使HTTP监测工具以一种通用的格式导出所收集的数据,这些数据可以被其他支持HAR的HTTP分析工具(包括Firebug、httpwatch、Fiddler等)所使用,来分析网站的性能瓶颈。
http://horve.github.io/2015/09/08/har-detail/
browsermob-proxy有两种模式,嵌入式模式是利用Java代码来启动代理,并通过Java代码来截取修改请求获取内容。另一种是独立启动模式,可以通过命令行来启动,通过RestAPI来进行操作。
在自动化中添加该模块,maven引用信息
代码语言:javascript复制<!-- https://mvnrepository.com/artifact/net.lightbody.bmp/browsermob-core -->
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-core</artifactId>
<version>2.1.5</version>
</dependency>
POC代码如下
代码语言:javascript复制 BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.start();
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
WebDriver driver=new ChromeDriver(capabilities);//初始化Chrome走代理
proxy.newHar("http://testops.ke.qq.com");//har信息基础域名
driver.get("http://testops.ke.qq.com");
Har har = proxy.getHar();
try {
har.writeTo(new File("testops.ke.qq.com.har"));//写har文件
} catch (IOException e) {
e.printStackTrace();
}
driver.close();
该代码运行后会在代码目录下生成testops.ke.qq.com.har文件,预览该文件可以通过在线的harviewer模块。
在浏览器中访问harviewer网站 http://www.softwareishard.com/har/viewer/,然后将har文件拖拽到页面上即可。
这样无论是在UI自动化还是接口自动化中都可以通过该代理获取详细的请求har文件,当出现响应时间过长的情况时,就可以通过har文件详细定位导致系统响应时间变长的原因。