Хорошо, я собираюсь объяснить, каков мой сценарий и как я реализовал его, используя каратэ.Но я ищу лучший способ сделать то, что делает мои тесты более читабельными, а также я хочу использовать API каратэ, а не слишком много JavaScript.
Сценарий: у меня есть параметр фильтра для конечной точки APIчто я тестирую, и этот параметр фильтра принимает json-объект пар ключ-значение.Итак, я сделал следующее :
- Создали filter-template.js, как показано ниже:
function() {
var filter_params = {
jobId:null,
customerIds:[],
filterValues1:[],
filterValues2:[],
};
return filter_params;
}
Я прочитал этот шаблон в моем сценарии каратэ и, поскольку это шаблон, во время выполнения я устанавливаю значения в этом шаблоне и запускаю тест.У меня будут разные значения для пар ключ-значение, поэтому каждый тест будет устанавливать свое собственное условие фильтра.Это делается путем написания пользовательской функции js, которая принимает шаблон в качестве аргумента, а также значения условий фильтра (см. Аргумент функции arg ниже), устанавливает переданные условия для определенных ключей и затем возвращает объект json.Код ниже:
Scenario: Set filter scenario
* def filter_template = call read('filter-template.js')
* def filter_vals_list = [1001,1002]
* def filter_condition = { cnd1: 'foo', cnd2: '#(filter_vals_list)' }
* def setFilter =
"""
function(arg) {
var i;
var filter = arg.template;
filter.jobId = arg.condition.cnd1;
for(i=0;i<arg.condition.cnd2.length;i++)
{
filter.filterValues1.add(arg.condition.cnd2.get(i));
}
return filter;
}
"""
* def getFilter = call setFilter { template: '#(filter_template)',
condition: '#(filter_condition)' }
Затем я передаю getFilter в качестве параметра моего запроса API.
Я надеюсь понять следующее:
- Как мне избежать использования вышеуказанных циклов JS при настройке фильтра?
- Используйте встроенные функции каратэ, такие как
karate.map()
, karate.forEach()
, чтобы упростить тесты. - Любой лучший подход, есливозможно решение этого сценария.
Помощь и руководство очень ценятся.