Не удалось захватить предыдущий ответ API и добавить ответ в URL-адрес API пост-запроса.

Я пытаюсь выполнить запрос API POST, где я получаю ответ API как

"d": { "__metadata": { "uri": "http://ev-qa02.zs.local/IncentiveManager/0002i1/wcf/v5.svc/InDataRequestCreators('9f31c6da-ec56-4360-8589-d21b6320f99b' )", "type": "ZSAssociates.Javelin.ETL.Rest.v5.InDataRequestCreator" }, "ScenarioId": "9f31c6da-ec56-4360-8589-d21b6320f99b", "CallbackUrl": "", "DataExpiresOnUtc": " /Date(4103913600000)/", "CreateScenarioIfMissing": false, "AdapterId": "0fcbd8d2-f5cb-4e2a-bda8-bb37037b022d", "InDataRequestIdOut": "eb36f8a9-5b7d-4835-88f6-4af67830cRe9", "lOutData": "/InDataRequests('eb36f8a9-5b7d-4835-88f6-4af67830c1e9')" } }

Теперь я пытаюсь выполнить другой запрос API, где мой URL-адрес будет выглядеть как http://ev-qa02.zs.local/IncentiveManager/0002i1/WCF/V5.svc/InDataRequests('eb36f8a9-5b7d-4835-88f6-4af67830c1e9')/FileCreator

*InDataRequests('eb36f8a9-5b7d-4835-88f6-4af67830c1e9') Это случайное число генерируется из приведенного выше значения ответа "InDataRequestIdOut"

Как я могу добавить URL-адрес, взяв предыдущий ответ API и добавив его во второй запрос POST. Я не могу зафиксировать свой ответ и использовать его в другом запросе API POST? Я был бы очень признателен, если бы вы могли мне помочь здесь, я застрял в этой проблеме уже пару дней, я также просмотрел документ и примеры, но не смог решить эту проблему. Я также прикрепил скриншот. PostUrlFailureScreenshot Моя основная проблема - строки 26 и 27 на скриншоте eclipe

введите здесь описание изображения

Scenario: Verify that JIM Idr request ofr Post
Given header Content-Type = 'Application/JSON'
And header Accept = 'Application/JSON'
And header Authorization = 'Basic 
UUEwMl9JbmNlbnRpdmVNYW5hZ2VyXzAwMDJpMTpZWkxaRjlGclR1eWhlcVNJbXlkTlBR'
Given path 'InDataRequestCreators'
* def user =
"""
{
 "ScenarioId":"9f31c6da-ec56-4360-8589-d21b6320f99b",
 "AdapterId":"0fcbd8d2-f5cb-4e2a-bda8-bb37037b022d",
 "DataExpiresOnUtc":"2100-01-18T00:00:00",
 "CreateScenarioIfMissing":"false"

 }
"""
And request user
When method post
Then status 201
* print 'the value of response is:', response
And def app = response
And path 'app.InDataRequestIdOut' + '/FileCreators'
* def body =
"""
{
 "InDataRequestId": "1d6326a2-d25f-41d2-9303-8a6e6101efcc",
 "ProcedureName": "",
"SourceWorkspacePath": ""
}
"""
And request body
When method post
Then status 201

person Sailesh Joshi    schedule 02.11.2017    source источник


Ответы (1)


Во-первых, мне кажется, что вы используете неправильный плагин Eclipse для Cucumber, обратитесь к этой проблеме и убедитесь: https://github.com/intuit/karate/issues/90

Есть так много вещей, которые вы делаете неправильно. Например, это должно быть application/json (нижний регистр). В приведенном выше описании есть много мест, где вы смешиваете прописные и строчные буквы, пожалуйста, будьте осторожны.

И без этого невозможно понять, как настраивается URL - я не могу оказать надлежащую помощь.

У вас есть фундаментальное непонимание того, как использовать выражения каратэ, например, это просто объединение двух строк:

And path 'app.InDataRequestIdOut' + '/FileCreators'

Это может дать вам некоторые подсказки вместо приведенного выше:

When url baseUrl
And path "InDataRequests('" + response.InDataRequestIdOut + "')/FileCreator"

И это FileCreator или FileCreators. Вы видимо совсем невнимательны :(

person Peter Thomas    schedule 02.11.2017
comment
пожалуйста, поработайте с кем-нибудь, кто разбирается в программировании, вы решите свою проблему за 5 минут - person Peter Thomas; 03.11.2017
comment
Спасибо @Peter, я решил несколько вещей, о которых вы упомянули, но я все еще сталкиваюсь с проблемой при захвате/сохранении ответа и использовании его в URL-адресе. Это выдает мне нуль. В настоящее время я получаю POST ссылка Я заменил предыдущий скриншот новым выше. И def app = response Когда url baseUrl And path InDataRequests(' + app.InDataRequestIdOut + ')/FileCreator - person Sailesh Joshi; 03.11.2017
comment
@SaileshJoshi не должно быть app.d.InDataRequestIdOut внимательно посмотрите на структуру JSON вашего ответа. воспользоваться помощью кого-л. - person Peter Thomas; 03.11.2017
comment
Спасибо, @Peter, это сработало в URL-адресе, но не сработало в теле запроса, я думаю, что неправильно заявляю, не могли бы вы указать мне здесь. POST ev-qa02.zs.local/IncentiveManager/0002i1/WCF/V5.svc/ * def body = { InDataRequestId: response.d.InDataRequestIdOut, procedureName:, SourceWorkspacePath: Ashwini/test2} Вместо InDataRequestId: response.d.InDataRequestIdOut = InDataRequestId:89cacddf-9fd9-4c08-93f7-516cfa514229 [ожидается] - person Sailesh Joshi; 03.11.2017
comment
Извините, больше ничем не могу помочь, всего наилучшего. - person Peter Thomas; 03.11.2017
comment
:-Это моя последняя просьба :) Пожалуйста, я новичок в программировании и только изучаю основы. Это последнее, что мне нужно для моего проекта.* def body = { InDataRequestId: response.d.InDataRequestIdOut , ИмяПроцедуры: , Путь к SourceWorkspace: Ashwini/test2 } - person Sailesh Joshi; 03.11.2017
comment
Не получил никакой помощи от разработчиков, не могли бы вы помочь мне :(, как я уже упоминал, это работало в URL-адресе, но не работало в теле запроса, я думаю, что неправильно заявляю, не могли бы вы помочь мне здесь POST ev-qa02.zs.local/IncentiveManager/0002i1/WCF/V5.svc/… * def body = { InDataRequestId: response.d.InDataRequestIdOut, procedureName:, SourceWorkspacePath: Ashwini/test2 } Вместо InDataRequestId: ответ. d.InDataRequestIdOut = InDataRequestId:89cacddf-9fd9-4c08-93f7-516cfa514229 [ожидаемый]Вы можете видеть на моем скриншоте выше. Как объявить в теле - person Sailesh Joshi; 07.11.2017
comment
Я получил решение, используемое InDataRequestId: '#(response.d.InDataRequestIdOut)', в любом случае спасибо @Peter - person Sailesh Joshi; 07.11.2017