只获取带有加载时间的请求/响应> = 1秒Java中的BrowserMob

时间:2017-11-25 07:02:41

标签: java selenium-webdriver browsermob browsermob-proxy har

是否可以过滤加载时间> = 1秒的.HAR的请求/响应?我需要将har对象保存到单独的文件中并上传到har viewer中。下面是我生成.HAR文件的代码。

//BrowserMobProxy
        BrowserMobProxy server = new BrowserMobProxyServer();
        server.start(0);
        server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
        server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
        server.newHar("Bhaskar");

        //PHANTOMJS_CLI_ARGS
        ArrayList<String> cliArgsCap = new ArrayList<>();
        cliArgsCap.add("--proxy=localhost:"+server.getPort());
        cliArgsCap.add("--ignore-ssl-errors=yes");

        //DesiredCapabilities
        String userAgent = "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36";
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
        capabilities.setCapability("phantomjs.page.settings.userAgent", userAgent);
        capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
        capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"D:/req/phantomjs-2.1.1-windows/bin/phantomjs.exe");

        //WebDriver
        WebDriver driver = new PhantomJSDriver(capabilities);
        driver.get("https://www.google.com");

        //HAR
        Har har = server.getHar();
        FileOutputStream fos = new FileOutputStream("D:\\HAR-Information.har");
        har.writeTo(fos);
        server.stop();
        driver.close();

1 个答案:

答案 0 :(得分:0)

你有没有注意到&#34;时间&#34;阻止你的HAR?

该对象描述了请求 - 响应往返中的各个阶段。所有时间都以毫秒为单位指定。

"timings": {
    "blocked": 0,
    "dns": -1,
    "connect": 15,
    "send": 20,
    "wait": 38,
    "receive": 12,
    "ssl": -1,
    "comment": ""
}
  • blocked [number,optional] - 等待队列所花费的时间 网络连接。如果时间不适用于,请使用-1 当前的要求。

  • dns [number,optional] - DNS解析时间。所需的时间 解析主机名。如果时间不适用于,请使用-1 当前的要求。

  • connect [number,optional] - 创建TCP连接所需的时间。 如果时间不适用于当前请求,请使用-1。

  • send [number] - 向服务器发送HTTP请求所需的时间。

  • wait [number] - 等待服务器的响应。接收 [number] - 从服务器读取整个响应所需的时间(或 高速缓冲存储器)。

  • ssl [number,optional](1.2中的新内容) - SSL / TLS所需的时间 谈判。如果定义了该字段,则还包括时间 在连接字段中(以确保与HAR 1.1的向后兼容性)。 如果时间不适用于当前请求,请使用-1。

  • 评论[字符串,可选](1.2中的新内容) - 由评论提供的评论 用户或应用程序。

发送,等待和接收时间不是可选的,必须具有非负值。

如果导出工具无法提供阻止,dns,connect和ssl,则可以省略每个请求的时间。如果不适用,可以提供这些计时的工具可以将其值设置为-1。例如,对于重用现有连接的请求,connect将为-1。

请求的时间值必须等于本节中提供的时间总和(不包括任何-1值)。

如果没有-1值(条目是log.entries中的对象),则必须为true:

  

entry.time == entry.timings.blocked + entry.timings.dns +       entry.timings.connect + entry.timings.send + entry.timings.wait +       entry.timings.receive;

获得完整的HAR对象后,您可以迭代HAR并计算每个元素的总项目,并删除时间> 1000ms的人。然后,您可以将HAR对象保存到文件中。