У меня есть основной файл функций, который вызывает макет и вызывает API. Этот основной API будет вызывать другой API в фоновом режиме, который переходит на мой фиктивный сервер карате. Я также могу проверить входящий запрос и отправить ответ. В этом входящем запросе на макет я получаю transactionRef, который затем появляется в ответе моего основного API.
Поток примерно такой
API1 Request
API2 Request (transactionRef) -> API2 Response
API1 Response (transactionRef)
Что я хочу проверить, так это то, что они оба одинаковы. Это возможно? Я попытался установить переменную в фиктивной функции, но не смог получить к ней доступ в основной функции.
Feature: stateful mock server
Background: Mock
Scenario: pathMatches('/abcd') && bodyPath('/Envelope/Body/infoRequest')!= null
* match karate.typeOf(request) == 'xml'
* xml respInfo = read('classpath:org/xbspro/hos/payloads/infoResponse.xml')
* def tranRef = $request/Envelope/Body/infoRequest/transactionId
* set respInfo/Envelope/Body/infoResponse/transactionId= tranRef
* def response = respInfo
Выше моя фиктивная функция. Ниже моя главная особенность
* call read('classpath:Abstract.feature')
* xml remResp = response
* match remResponse //transactionId == tranRef
У вас есть 2 варианта.
Вы уже знаете, как зафиксировать состояние макета с помощью глобальных переменных. Просто добавьте пользовательскую конечную точку, которую вы можете вызвать из своего теста API, чтобы получить ее. Обратитесь: https://stackoverflow.com/a/63512034/143475
Обратитесь к этому примеру, где вы можете использовать Java для «подключения» макета и теста: https://twitter.com/getkarate/status/1417023536082812935
@ shrik18 да, это так
Спасибо, это решение определенно сработает для меня. Но я предполагаю, что во время параллельного выполнения он может перепутаться. Эта ветка безопасна?