Функция повтора для карате dsl не работает

Я использовал в своем тесте функцию, которая вызывает функцию повтора для вызова конечной точки.

Раньше он работал нормально, но в последние несколько дней тот же код перестал работать.

мой код:

Feature: Invoke External

Background: 
* configure retry = { count: 5, interval: 5000 }

@parallel=false

Scenario: Invoke gateway

Given url externalGateway

And path domain + '/' + basepath + '/' +  path

And header Authorization = accessTokenforProd

And request 'test'

When method requestMethod

Then retry until responseStatus == externalGatewayResponse

Then print ' response code from Qantas External Gateway: ' , responseStatus

и я вызываю эту функцию со следующим синтаксисом:

Then def responseFromAuthenticatedExternalWSO2Gateway = call read('classpath:examples/Services/InvokeAuthenticatedProdQantasExternalWSO2Gateway.feature') {'domain': '#(domain)' , 'basepath': '#(basepath)' , 'path': '#(path)' , 'externalGatewayResponse': '#(externalGatewayResponse)' , 'method': '#(requestMethod)' , 'accessTokenforSandbox': '#(accessTokenforSandbox)' }

Then match responseFromAuthenticatedExternalWSO2Gateway.responseStatus == 200

Есть ли проблема с синтаксисом? Если нет, то внесли ли мы какие-либо изменения, которые могут повлиять на работу функции повтора?


person Sneha Shukla    schedule 04.03.2019    source источник


Ответы (1)


Прочтите документы: https://github.com/intuit/karate#retry-until

Вы ошиблись, часть retry until должна быть перед шагом method.

В связи с этим, особенно когда я вижу requestMethod как переменную, я чувствую, что вы чрезмерно перестроили свои тесты, от чего я настоятельно не рекомендую. Избегайте использования call, за исключением настроек, иначе вам будет сложно поддерживать тесты.

Подробнее см. В этом ответе: https://stackoverflow.com/a/54126724/143475

person Peter Thomas    schedule 04.03.2019
comment
Большое спасибо, Питер :-) - person Sneha Shukla; 06.03.2019
comment
На самом деле я использую некоторые функции в качестве основных функций, которые содержат мои тесты и некоторые функции в качестве службы / помощников. Таким образом, поток выглядит примерно так: Основные функции запускают тестовый пример - ›тестовый пример вызывает помощников -› помощник выполняет такие действия, как получение идентификатора API или вызов URL-адреса, получение ответа и отправка обратно основным функциям с результатом - - ›Тест продолжается в основном файле функций с помощью вспомогательных служб формы результатов. - person Sneha Shukla; 06.03.2019
comment
Для этого я использую функцию вызова и параметризую requestMethod, потому что вызовы различаются для разных тестов, и я хотел сохранить один единственный файл справки для вызова, который может обрабатывать любой вызов метода (get, post, put и т. Д.). - person Sneha Shukla; 06.03.2019
comment
Рад услышать вашу рекомендацию по этому поводу. - person Sneha Shukla; 06.03.2019
comment
@SnehaShukla Я уже давал свою рекомендацию в ссылке, прочтите ее еще раз, если нужно. повторное использование сверх определенной степени дает вам отрицательную пользу. и, на мой взгляд, попытка обобщить сообщение "получить И" просто напрашивается на неприятности. - person Peter Thomas; 06.03.2019