У меня возникла ситуация, когда мне нужно передать различные переменные типа Date в каратэ. Для этого я создал метод JAVA и вызвал его в файле функций, как показано ниже.
Я читал, что это ограничение огурца, которое не может поддерживать динамические переменные в Scenario Outline. Я также читаю https://github.com/intuit/karate#the-karate-way, но почему-то не понимаю, как решить описанную ниже ситуацию.
Scenario Outline: test scenario outline
* def testData = Java.type('zoomintegration.utils.DataGenerator')
* def meetDate = testData.futureDate(2)
* def jsonPayLoad =
"""
{
"meetingSource": <meetingSource>,
"hostId": <host>,
"topic": <topic>,
"agenda": <topic>,
"startDateTime": <meetingDate>",
"timeZone": "Asia/Calcutta",
"duration": <duration>
}
"""
* print jsonPayLoad
Examples:
|meetingSource|host|topic|duration|meetingDate|
|ZOOM | abc |Quarter meeting|30|0|
|SKYPE | abc |Quarter meeting|30|'1980-08-12'|
|MS | abc |Quarter meeting|30|'2030-12-12'|
Вы, должно быть, что-то упустили, и, похоже, у вас есть несколько опечаток.
Возьмем простой пример, который работает для меня:
Feature:
Background:
* def fun = function(x){ return 'hello ' + x }
Scenario Outline:
* match fun(name) == 'hello foo'
Examples:
| name |
| foo |
Итак, дело в том, что вы можете подключить функцию, которая использует данные из вашей таблицы Examples
, чтобы динамически генерировать больше данных.
Если вы все еще застряли, следуйте этому процессу: https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue
@SunnySachdeva, почему бы и нет. все что возможно в JS, попробуйте и убедитесь
Ниже код работает для меня:
Scenario Outline: test scenario outline
* def testData = Java.type('zoomintegration.utils.DataGenerator')
* def meetDate = testData.futureDate(<meetingDate>)
* def jsonPayLoad =
"""
{
"meetingSource": <meetingSource>,
"hostId": <host>,
"topic": <topic>,
"agenda": <topic>,
"startDateTime": #(meetDate),
"timeZone": "Asia/Calcutta",
"duration": <duration>
}
"""
* print jsonPayLoad
Examples:
| meetingSource | host | topic | duration | meetingDate |
| ZOOM | abc | Quarter meeting | 30 | 1 |
| SKYPE | abc | Quarter meeting | 30 | 2 |
| MS | abc | Quarter meeting | 30 | 3 |
Особенность: протестировать что-то
Схема сценария: схема сценария тестирования * def testData = Java.type('zoomintegration.utils.DataGenerator') * определение даты встречи = testData.futureDate(2)
* def jsonPayLoad =
"""
{
"meetingSource": <meetingSource>,
"hostId": <host>,
"topic": <topic>,
"agenda": <topic>,
"startDateTime": <meetingDate>,
"timeZone": "Asia/Calcutta",
"duration": <duration>
}
"""
* eval if (jsonPayLoad.startDateTime == 0) jsonPayLoad.startDateTime = meetDate
* print jsonPayLoad
Examples:
|meetingSource|host|topic|duration|meetingDate|
|ZOOM | abc |Quarter meeting|30|0|
|SKYPE | abc |Quarter meeting|30|'1980-08-12'|
|MS | abc |Quarter meeting|30|'1999-08-12'|
Спасибо за ваш ответ. Мы не можем использовать здесь условную логику. Я имею в виду, что хочу переопределить значение startDateTime, только если значение моего примера равно 0