Как передать переменную во вложенном json в теле запроса

Я пытаюсь передать переменную в тело моего запроса, в котором есть вложенный json, но я не могу это сделать.

 Given path 'url'
 * request {abc:'ab',pqrs:'{"mno":"data","ijk":"data"}',dcb:'tata'} // Double quotes are required for 'pqrs' because thats the format of the service.
 When method post
 Then status 200
 * def test = response.lmn
 * print lmn
 * def browser = Java.type('file path') 
 * def testing = browser.do(parameter) // 'do' function will call a java file which will return a String parameter
 * print testing 


Given path 'url'
 * def nested = {uvw:"value",xyz:'#(testing)',ght:} //We tried storing nested variable in json format but that didn't work.
 * request { abc:'ab',pqr:'#(nested)',dcb:'tata' }
 When method post
 Then status 200

После нажатия вышеупомянутого запроса появляется ошибка «Недопустимый объект pqr». Пожалуйста, предложите решение.


person Rahul    schedule 06.12.2017    source источник
comment
Привет, я принял ответ на последний вопрос, пожалуйста, предложите ответ на вышеупомянутый вопрос   -  person Rahul    schedule 06.12.2017


Ответы (1)


Похоже, вы делаете базовые ошибки при формировании JSON, вот и все. Например, поле ght не имеет ничего после него выше. Я сосредоточусь только на второй части вашего сценария. Вы можете вставить приведенное ниже в Scenario и увидеть, кстати, как это работает - это хороший совет: вы можете быстро поэкспериментировать, не отправляя HTTP-запросы в отдельный файл.

* json testing = '{"helo":"world","test":"done"}'
* def nested = { uvw: 'value', xyz: '#(testing)', ght: null }
* def temp = { abc: 'ab', pqr: '#(nested)', dcb: 'tata' }
* print temp

И результат:

[print] {
  "abc": "ab",
  "pqr": {
    "uvw": "value",
    "xyz": {
      "helo": "world",
      "test": "done"
    },
    "ght": null
  },
  "dcb": "tata"
}

Так что все работает как положено.

Изменить: показано, как можно взять строку и при необходимости преобразовать ее обратно в JSON. Обратитесь к документации по преобразованию типов, как правило, вам это не нужно, но похоже, что ты делаешь.

person Peter Thomas    schedule 06.12.2017
comment
Извините, что у ght есть значение, которое я пропустил, чтобы добавить его. - person Rahul; 06.12.2017
comment
Привет, Питер. Спасибо за ответ. В моем случае тестирование представляет собой строку json, поэтому это похоже на testing = {'helo': 'world', 'test': '# (done)'}, а не на строку, как показано в вашем примере. При печати он дает массив, и нам нужно, чтобы это был объект json. - person Rahul; 06.12.2017
comment
Я попытался преобразовать String в JSON, это не сработало. Ниже мой запрос, пожалуйста, посмотрите * def nested = {'data4': 'ehjfberhjbf', 'data5': '# (parameter)'} // Где параметр - это переменная и содержит строку, возвращаемую файлом Java . * request {data: 'data1', data2: '# (nested)', data3: 'data'} Теперь, нажимая на это, я получаю сообщение об ошибке как недопустимый объект data2 - person Rahul; 06.12.2017
comment
@ Рахул, извини, я не думаю, что ты вообще читал этот документ, пожалуйста, попробуйте еще раз. Пожалуйста, воспользуйтесь помощью кого-нибудь поблизости, кто знает JS. Если вы все еще застряли, нам понадобится полный рабочий пример: stackoverflow.com/help/mcve - всего наилучшего! - person Peter Thomas; 06.12.2017