Как реализовать интеграционный тест, чтобы проверить, вызывается ли откат моего выключателя?

В моем приложении мне нужно вызвать внешнюю конечную точку, и если она слишком медленная, активируется резервная копия.

Следующий код - это пример того, как выглядит мое приложение:

@FeignClient(name = "${config.name}", url = "${config.url:}", fallback = ExampleFallback.class)
public interface Example {
@RequestMapping(method = RequestMethod.GET, value = "/endpoint", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    MyReturnObject find(@RequestParam("myParam") String myParam);
}

И его резервная реализация:

@Component
public Class ExampleFallback implements Example {

    private final FallbackService fallback;

    @Autowired
    public ExampleFallback(final FallbackService fallback) {
        this.fallback = fallback;
    }

    @Override
    public MyReturnObject find(final String myParam) {
        return fallback.find(myParam);
    }

Кроме того, настроенный тайм-аут для автоматического выключателя: hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

Как я могу реализовать интеграционный тест, чтобы проверить, работает ли мой разрыв цепи, т. Е. Работает ли моя конечная точка (в данном случае имитируемая) или она возвращает ошибку типа 4xx или 5xx?

Я использую Spring Boot 1.5.3 с Spring Cloud (Feign + Hystrix)


person leonnardo    schedule 28.11.2017    source источник


Ответы (1)


Обратите внимание, я не знаю Feign или Hystrix.

На мой взгляд, проблематично реализовать автоматизированный интеграционный тест, который имитирует различные детали реализации Feign + Hystrix - эта деталь реализации может измениться в любое время. Существует много различных типов сбоев: первичная конечная точка недоступна, недопустимые данные (т.е. получение сообщения об ошибке html при выражении данных xml в специальном формате), заполнение диска, .....

если вы имитируете конечную точку, вы делаете предположение о деталях реализации Feign + Hystrix, как конечная точка ведет себя в ситуации ошибки (т.е. возвращает ноль, возвращает какой-то конкретный код ошибки, генерирует исключение типа Xyz ....)

Я бы создал только один автоматический интеграционный тест с реальной первичной конечной точкой с недостижимым URL-адресом и имитируемой резервной конечной точкой, где вы проверяете, что обработанные данные поступают из макета. Этот автоматический тест предполагает, что обработка сообщения «слишком медленное сетевое соединение» совпадает с обработкой «url-notfound» с точки зрения вашего приложения.

Для всех остальных тестов я бы создал тонкий интерфейс-оболочку вокруг Feign + Hystrix, где вы имитируете Feign + Hystrix. Таким образом, вы можете автоматически проверить, например, что произойдет, если вы получите 200 байт от основного интерфейса, а затем получите запрос.

Подробнее о сокрытии внешних зависимостей см. onion-architecture

person k3b    schedule 28.11.2017