Как исправить «NoHttpResponseException» при запуске Wiremock на Дженкинс? - PullRequest
1 голос
/ 11 апреля 2019

Я запускаю сервер Wiremock в интеграционном тесте.

Передача ИТ в моем локальном НО в некоторых случаях произошел сбой на сервере Дженкинса , ошибка

localhost:8089 failed to respond; nested exception is org.apache.http.NoHttpResponseException: localhost:8089 failed to respond

Я пытаюсь добавить sleep(3000) в моем тесте, который может решить проблему, но я не знаю причину проблемы, поэтому обходной путь не очень хорошая идея

Я также пытаюсь использовать @AutoConfigureWireMock(port=8089) для замены WireMockServer для запуска сервера Wiremock, который может решить проблему, НО я не знаю, как выполнить какую-либо настройку сервера Wiremock с помощью аннотации @AutoConfigureWireMock(port=8089).

Вот мой код для запуска сервера Wiremock, любые предложения по исправлению «NoHttpResponseException»?

@ContextConfiguration(
initializers = ConfigFileApplicationContextInitializer.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class BaseSpec extends Specification {
@Shared
WireMockServer wireMockServer

def setupSpec() {

wireMockServer = new WireMockServer(options().port(PORT).jettyHeaderBufferSize(12345)
.notifier(new ConsoleNotifier(new Boolean(System.getenv(“IT_WIREMOCK_LOG”) ?: ‘false’))) 
.extensions(new ResponseTemplateTransformer(true)))

wireMockServer.start()

}

1 Ответ

1 голос
/ 30 апреля 2019

Apache HttpClient время от времени страдает от NoHttpResponseException. Это очень старая проблема.

В любом случае, я полагаю, что в вашем случае проблема может быть вызвана перезапуском сервера WireMock между тестами, и в то же время Apache HttpClient объединяет HTTP-соединения и пытается повторно использовать их между тестами. Если это так, есть два решения:

  1. Отключите пул HTTP-соединений в ваших тестах. Это имеет смысл, поскольку считается нормальным, что сервер WireMock может быть перезапущен во время выполнения тестов. В качестве альтернативы, можно создать свои заглушки WireMock, чтобы всегда отправлять "Connection": "close" между заголовками. Результат будет таким же.

  2. Переключение с Apache HttpClient на Square OkHttp. OkHttp, хотя по умолчанию пул подключений http, всегда может корректно восстановиться в ситуациях, таких как устаревшее соединение. К сожалению, библиотека от Apache не такая умная.

...