Получить только запрос/ответ со временем загрузки = 1 сек BrowserMob в Java

Можно ли отфильтровать запрос/ответ от .HAR, время загрузки которого >=1 сек? Мне нужно сохранить объект har в отдельный файл и загрузить в программу просмотра har. Ниже приведен мой код для создания файла .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();

person devloper    schedule 25.11.2017    source источник


Ответы (1)


Вы заметили блок «тайминги» в своем HAR?

Этот объект описывает различные этапы двустороннего обмена запрос-ответ. Все время указывается в миллисекундах.

"timings": {
    "blocked": 0,
    "dns": -1,
    "connect": 15,
    "send": 20,
    "wait": 38,
    "receive": 12,
    "ssl": -1,
    "comment": ""
}
  • заблокировано [число, необязательно] — время, проведенное в очереди в ожидании подключения к сети. Используйте -1, если время не относится к текущему запросу.

  • dns [число, необязательный] — время разрешения DNS. Время, необходимое для разрешения имени хоста. Используйте -1, если время не относится к текущему запросу.

  • connect [число, необязательно] — время, необходимое для создания TCP-соединения. Используйте -1, если время не относится к текущему запросу.

  • send [число] — время, необходимое для отправки HTTP-запроса на сервер.

  • wait [число] - Ожидание ответа от сервера. получить [число] — время, необходимое для чтения всего ответа с сервера (или кэша).

  • ssl [число, необязательно] (новое в версии 1.2) — время, необходимое для согласования SSL/TLS. Если это поле определено, время также включается в поле подключения (для обеспечения обратной совместимости с HAR 1.1). Используйте -1, если время не относится к текущему запросу.

  • comment [строка, необязательно] (новое в версии 1.2) — комментарий, предоставленный пользователем или приложением.

Тайминги отправки, ожидания и получения не являются необязательными и должны иметь неотрицательные значения.

Инструмент экспорта может опускать заблокированные, DNS, подключения и ssl тайминги для каждого запроса, если он не может их предоставить. Инструменты, которые могут предоставить эти тайминги, могут установить их значения на -1, если они не применяются. Например, connect будет равен -1 для запросов, которые повторно используют существующее соединение.

Значение времени для запроса должно быть равно сумме значений времени, указанных в этом разделе (за исключением любых значений -1).

Следующее должно быть истинным, если нет значений -1 (запись является объектом в log.entries):

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

После того, как у вас есть полный объект HAR, вы можете выполнить итерацию по HAR и вычислить общий элемент каждого элемента, а также удалить те, у которых есть время > 1000 мс. Затем вы можете сохранить объект HAR в файл.

person Aviral Srivastava    schedule 12.12.2017