Аннотация : как разработчики TEST интеграции таймауты для запросов http?
Предыстория : У моей команды есть проблемы, связанные с необычно продолжительными HTTP-запросами. Мы используем commons-httpclient
версию 3 от Apache. Код выглядит примерно так:
PostMethod post = new PostMethod(endpoint);
post.getParams().setSoTimeout(someInt);
httpClient.executeMethod(post);
Время для выполнения этого запроса обычно приемлемо (2 секунды или около того), но иногда мы видим 50-60 секундные запросы, несмотря на то, что наш тайм-аут SO установлен на 4 секунды. Это побудило меня провести некоторое исследование и обнаружило, что большинство людей устанавливают тайм-ауты подключения ANNNNND ТАК. Похоже, что тайм-ауты SO должны быть установлены ниже (так как они просто измеряют расстояние между байтами в пути), и тайм-аут соединения - это то, что мы изначально планировали использовать (т.е. первоначальная задержка между запросом и возвращением 1-го байта).
Вот код, который мы использовали и планируем использовать:
httpClient.getHttpConnectionManager().getParams()
.setConnectionTimeout(someInt);
httpClient.getHttpConnectionManager().getParams()
.setSoTimeout(someInt);
Основная проблема в том, что мы не можем провести интеграционное тестирование этого изменения. Точнее, мы запутались в том, как интегрировать тестирование задержек, связанных с подключением сокетов к стороннему серверу. Покопавшись commons-httpclient
, я вижу защищенные и закрытые классы, которые нам придется воспроизвести (поскольку они не могут быть расширены и непригодны для использования вне класса), смоделировать и связать вместе классы, чтобы в конечном итоге перейти к классу сокетов в java ( который опирается на java native
метод - который нам также нужно будет воспроизводить и вводить с помощью насмешек - что я часто не вижу на этом уровне).
Причина, по которой я обращаюсь к Stack Overflow, состоит в том, чтобы посмотреть, как другие тестируют это / не тестируют это. Я хочу избежать тестирования этой функциональности в среде производительности любой ценой.
Еще одной моей мыслью было настроить mockserver для ответа httpclient с программируемой задержкой. Я еще не видел такого примера.