WireMock неожиданно возвращает Null

При использовании WireMock для имитации конечной точки, которая, как ожидается, вернет JSON, я столкнулся с проблемой, когда она не вернет ожидаемый JSON. Запрос WireMock для его заглушек покажет правильный JSON в ожидаемой конечной точке.

При проверке нескольких точек данных против моей теории я обычно получаю 7 успешно пройденных тестов, прежде чем возникает эта проблема, и тест не проходит. Однако добавление сна около 5 секунд в верхней части теории позволяет пройти все тесты. Обертывание содержимого теста в цикл приведет к тому, что он будет запускать одну точку данных несколько раз, что в конечном итоге приведет к сбою. Добавление сна позволит ему работать дальше, но в конечном итоге он выдаст нуль.

Это известная проблема? Есть ли подходящий обходной путь?


person Tott    schedule 16.08.2016    source источник
comment
Как мы можем помочь, если вы не показываете код..   -  person Javant    schedule 16.08.2016
comment
@Javant Проблема, похоже, проявляется только в полном проекте. Каждый написанный мной небольшой тест проверки концепции, использующий один и тот же конвейер, проходит успешно. Я должен был бы предоставить весь проект, что я не могу сделать.   -  person Tott    schedule 17.08.2016
comment
Вы добавляете заглушку динамически (есть ли возможность утечки памяти)? Можете ли вы определить неудачные запросы? Посмотрите, может ли запрос вручную воспроизвести проблему. Если нет, попробуйте смоделировать сценарий высокой нагрузки с тем же запросом.   -  person Eugene A    schedule 18.08.2016
comment
@EugeneA Заглушка добавляется динамически, но количество добавлений заглушки не имеет значения. То есть очистка заглушек и чтение их в Before, BeforeClass или самой теории не меняет ее поведения. Неудачный запрос является восьмым, если не добавлены спящие места. Это справедливо даже для другого компьютера, на котором точки данных выполняются в другом порядке (что означает сбой на другой точке данных).   -  person Tott    schedule 18.08.2016
comment
Попробуйте запустить Wiremock в режиме отладки и посмотрите, вызывает ли это значение null исключение в журналах. Если это так, не составит труда отладить Wiremock и посмотреть, какие условия приводят к нулевому ответу.   -  person Eugene A    schedule 19.08.2016


Ответы (1)


Оказывается, это было короткое замыкание Хайстрикса. Каждый тестовый пример заглушал одну из трех конечных точек, а две другие терпели неудачу. После седьмого теста это был 21 звонок, и 2/3 из них были неудачными. Короткое замыкание срабатывает после 20 вызовов, из которых половина терпит неудачу.

hystrix.command.default.circuitBreaker.requestVolumeThreshold=100

Это предотвратит переход прямо к запасному варианту.

person Tott    schedule 19.08.2016