Retrying endpoint calls
Add parameters to retry endpoint in case of error. Like this:
- name: 00002.01 check for event occurrence
pause: 10
retry_count: 10
retry_frequency: 2s
method: GET
path: /v1/event/{{ $newEventID }}
...
А что за кейс у вас? Зачем ретрай?
Стартуют два сервиса: один - REST, второй - фоновый. Первым запросом через REST создаётся задание. Задание выполняется фоновым сервисом. После выполнения задания мы вторым запросом через REST проверяем результат.
Фоновый сервис выполняет задание почти сразу, но в пайплайне время выполнения может затягиваться до 10 - 30 секунд. Чтобы тест по второму запросу прошёл - надо дождаться выполнения задания фоновым сервисом. Если делать паузу на 30 секунд - все тесты будут выполняться долго. Мы делаем паузу на наиболее вероятную задержку, и потом несколько попыток, пока задание выполняется фоновым сервисом. Для этого используем retry.
И ещё момент: я в одном из форков уже встречал реализацию ретрая, но сейчас почему-то не могу найти этот форк.
@molotkovserguei , можете использовать мой форк, там это все реализовано https://github.com/lansfy/gonkex
@lansfy , Спасибо!
Стартуют два сервиса: один - REST, второй - фоновый. Первым запросом через REST создаётся задание. Задание выполняется фоновым сервисом. После выполнения задания мы вторым запросом через REST проверяем результат.
КМК, вы тут уже два сервиса тестируете а не один. В концепции Gonkey, все внешние зависимости мокаются, соответсвенно добавлять ретрай нет смысла.
Да, вы правы, мы тестируем два сервиса. Если рассматривать моки - то у меня сразу два вопроса:
- Сервисы общаются через базу, поэтому я просто не представляю, как замокать второй сервис.
Но и это не самое главное :-) Основная трудность - протестировать именно второй, фоновый сервис, у которого нет REST-API. Т.е. мы этот второй сервис запускаем, пишем что-то в базу и потом смотрим, правильно он отработал или нет. Отсюда второй вопрос:
- Как тестировать сервис без REST-API в концепции gonkey?
Ну и да, насчёт моков: для второго сервиса, который без REST-API, мне действительно потребуется замокать внешние сервисы, которые он вызывает. Как это сделать - я ещё не придумал, но подобный запрос уже был до меня: https://github.com/lamoda/gonkey/issues/35
В похожих случаях, использовал фикстуры и запрос на liveness/readiness url сервиса (это если очень надо именно через Gonkey). Фикстура загружает нужные данные в базу, сервис их видит и обрабатывает, результат проверяем. Запрос на url нужен просто для того чтобы тест сработал.