基于browsermob-proxy的自动化性能监控

2022-04-04 10:13:07 浏览数 (1)

在做自动化的时候,当遇到某些性能问题导致的超时情况就会出现对象访问超时的问题,遇到这种问题想回溯跟踪问题就比较困难了,如果能有个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文件详细定位导致系统响应时间变长的原因。

0 人点赞