gonkey icon indicating copy to clipboard operation
gonkey copied to clipboard

Retrying endpoint calls

Open molotkovserguei opened this issue 9 months ago • 7 comments

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 }}
  ...

molotkovserguei avatar Mar 27 '25 11:03 molotkovserguei

А что за кейс у вас? Зачем ретрай?

leorush avatar Mar 27 '25 12:03 leorush

Стартуют два сервиса: один - REST, второй - фоновый. Первым запросом через REST создаётся задание. Задание выполняется фоновым сервисом. После выполнения задания мы вторым запросом через REST проверяем результат.

Фоновый сервис выполняет задание почти сразу, но в пайплайне время выполнения может затягиваться до 10 - 30 секунд. Чтобы тест по второму запросу прошёл - надо дождаться выполнения задания фоновым сервисом. Если делать паузу на 30 секунд - все тесты будут выполняться долго. Мы делаем паузу на наиболее вероятную задержку, и потом несколько попыток, пока задание выполняется фоновым сервисом. Для этого используем retry.

И ещё момент: я в одном из форков уже встречал реализацию ретрая, но сейчас почему-то не могу найти этот форк.

molotkovserguei avatar Mar 28 '25 18:03 molotkovserguei

@molotkovserguei , можете использовать мой форк, там это все реализовано https://github.com/lansfy/gonkex

lansfy avatar Mar 28 '25 19:03 lansfy

@lansfy , Спасибо!

molotkovserguei avatar Mar 28 '25 19:03 molotkovserguei

Стартуют два сервиса: один - REST, второй - фоновый. Первым запросом через REST создаётся задание. Задание выполняется фоновым сервисом. После выполнения задания мы вторым запросом через REST проверяем результат.

КМК, вы тут уже два сервиса тестируете а не один. В концепции Gonkey, все внешние зависимости мокаются, соответсвенно добавлять ретрай нет смысла.

leorush avatar Mar 28 '25 19:03 leorush

Да, вы правы, мы тестируем два сервиса. Если рассматривать моки - то у меня сразу два вопроса:

  1. Сервисы общаются через базу, поэтому я просто не представляю, как замокать второй сервис.

Но и это не самое главное :-) Основная трудность - протестировать именно второй, фоновый сервис, у которого нет REST-API. Т.е. мы этот второй сервис запускаем, пишем что-то в базу и потом смотрим, правильно он отработал или нет. Отсюда второй вопрос:

  1. Как тестировать сервис без REST-API в концепции gonkey?

Ну и да, насчёт моков: для второго сервиса, который без REST-API, мне действительно потребуется замокать внешние сервисы, которые он вызывает. Как это сделать - я ещё не придумал, но подобный запрос уже был до меня: https://github.com/lamoda/gonkey/issues/35

molotkovserguei avatar Mar 28 '25 19:03 molotkovserguei

В похожих случаях, использовал фикстуры и запрос на liveness/readiness url сервиса (это если очень надо именно через Gonkey). Фикстура загружает нужные данные в базу, сервис их видит и обрабатывает, результат проверяем. Запрос на url нужен просто для того чтобы тест сработал.

leorush avatar Mar 29 '25 20:03 leorush