Как десериализовать полезную нагрузку json, переданную в другой файл функций, который принимает несколько аргументов - PullRequest
1 голос
/ 28 марта 2019

Я посылаю несколько аргументов в файл .feature. Одним из аргументов является запрос json payload, сгенерированный с использованием таблицы каратэ. Как выполнить итерацию полезной нагрузки запроса, чтобы пост-запрос получал одну полезную нагрузку за раз.

Scenario: post booking

* table payload
| firstname | lastname | totalprice | depositpaid | 
| 'foo'    | 'IN'      | 10     | true      |
| 'bar'    | 'out'     | 20     | true          | 

#date will calculate using js function in background and baseURL is configured in karate.config.js file

* set payload[*].bookingdates = { checkin: '#(date())', checkout: '#(date())' }
* def result = call read('createrecord.feature') {PayLoad: #(payload) , URL: #(baseURL)}

######################################
createrecord.feature file will have 

@ignore
Feature: To create data

Background: 
* header Accept = 'application/json'

Scenario: 
Given url __arg.URL
And path 'booking'
And request __arg.PayLoad
When method post
Then status 200

Здесь, в файле createrecord.feature, я могу выполнить итерацию по переданной полезной нагрузке, чтобы единая полезная нагрузка была передана в пост-запрос.

1 Ответ

1 голос
/ 28 марта 2019

Простое правило, которое вам не хватает, состоит в том, что если аргумент call является массивом JSON (из объектов JSON), он будет повторяться автоматически.

Внимательно прочитайте документы: https://github.com/intuit/karate#data-driven-features

Итак, внесите это изменение:

* def result = call read('createrecord.feature') payload

И baseURL будут доступны в createrecord.feature, поэтому вам не нужно беспокоиться о его передаче.

Обратите внимание, что это может не сработать: * set payload[*].bookingdates см. Этот ответ: https://stackoverflow.com/a/54928848/143475

...