好的,所以我将解释我的情况以及如何使用空手道来实现它。但是我正在寻找一种更好的方法来使我的测试更具可读性,并且还希望使用空手道的api而不是过多的javascript。
方案:我正在测试的api端点有一个过滤器参数,此过滤器参数采用键-值对的json对象。所以我做了以下:
function() {
var filter_params = {
jobId:null,
customerIds:[],
filterValues1:[],
filterValues2:[],
};
return filter_params;
}
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请求。
我希望了解的是:
karate.map()
,karate.forEach()
来简化测试。非常感谢您的帮助和指导。
答案 0 :(得分:0)
据我了解,我在下面简化了您的方案:
* def filter_vals_list = [ 1001, 1002 ]
* def job_id = 'foo'
* def filter_template =
"""
{
jobId: '#(job_id)',
customerIds: [],
filterValues1: '#(filter_vals_list)',
filterValues2: [],
}
"""
让我知道我是否错过了任何事情。请引用嵌入的表达式:https://github.com/intuit/karate#embedded-expressions
现在,通过将最后一步更改为以下内容,您可以轻松地为模板使用可重复使用的JSON,是的-嵌入式表达式即使在可重复使用的JSON文件中也可以使用!
* def filter_template = read('filter-template.json')
尝试使用data-driven Scenario Outline
后,您可能会得到更好的主意。因此,希望可以弄清楚您是如何使JS不必要地复杂化!您甚至不需要karate.map()
等。