Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

BrowserMob Proxy взять полностью всё тело.

selenium
webdriver
Теги: #<Tag:0x00007fedc7497228> #<Tag:0x00007fedc7496fd0>

(t62) #1

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


(rmerkushin) #2

Посмотрите это:


(Taras) #3

browserMobProxyInstance.getHar().getServer().getHar().getLog().getEntries().stream().filter(some filter Predicate for example).findFirst().get(). … и тут Вам будет вся АРІ для getRequest, getResponse и все что угодно


(t62) #4

скорее это ответ на мой вопрос - https://github.com/lightbody/browsermob-proxy#http-request-manipulation
нужно настроить фильтры - addRequestFilter, addResponseFilter
на данном этапе можно редактировать запросы и ответы.


(Taras) #5

ви можете начать писать вес трафик HAR архив и в конце теста извлечь его, так как я показал више


(t62) #6

да, но я хочу ловить/редактировать/ и слать дальше сообщения на сервер и с него. так что har мне не до конца подходит, но спасибо за помощь


(Crazyk2) #7

Нужно изначально ставить корректно вопрос, что Вы хотите не столько просматривать, сколько манипулировать данными во время теста и влиять соответственно на него.
Для этого Вам действительно нужно настраивать свои фильтры
вот так, например, делали задержку

 public static void regDelayFor(String apiSign, long delayInMs) {

        ResponseFilter filter = (response, contents, messageInfo) -> {
            if (messageInfo.getOriginalUrl().contains(apiSign)) {
                try {
                    Thread.sleep(delayInMs);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        ProxyFactory.get().addFirstHttpFilterFactory(new ResponseFilterAdapter.FilterSource(filter, 16777216));
    }

а так складывали ответы в Мапу для прикладывания потом в логи (систем аут для отладки)

public static void regCatcherFor(String apiSign) {
        ResponseFilter filter = (response, contents, messageInfo) -> {
            System.out.println("filter url " + messageInfo.getOriginalUrl());
            System.out.println("filter url " + messageInfo.getOriginalUrl().contains(apiSign));
            if (messageInfo.getOriginalUrl().contains(apiSign)) {
                System.out.println("regCatcherFor " + contents.getTextContents());
                responseMap.put(apiSign, contents.getTextContents());
                System.out.println(id);

            }
        };
        ProxyFactory.get().addFirstHttpFilterFactory(new ResponseFilterAdapter.FilterSource(filter, 16777216));
    }

Таким образом можно передать и JSON внутрь на какой ты хочешь подменить ответ.

Почему именно такой код не спрашивай, со временем к этому пришли, изначально по документации добавить фильтр можно в пару строк, но это влекло свои проблемы при тестировании именно нашего проекта


(t62) #8

спасибо, но вопрос уже давно не актуален, и данный способ уже давно юзается.


(Crazyk2) #9

Если семь дней для Вас уже “давно”, могу предположить, что Вы уже построили космический корабль.


(t62) #10

ну как сказать, построил систему подмены нужных параметров на запрос и ответ от сервера, + ещё пару фичей + переписал фрейворк , то как уже собралось много костылей и нужно было более стабильную версию.
(P/S, я дев.)