我需要使用多值param发出请求,它的值必须是一个非常大的数组来测试api param验证。我的一个实现:
Scenario: filter_too_long_multivalue
* def localPath = endPointBase + 'filter'
* def generateLongParam =
"""
function(){
var paramValue = [];
for(var idx = 0; idx<1002; idx++){
paramValue.push('r')
}
var params = {};
params.pl = paramValue;
return params;
}
"""
* def tooLongParam = generateLongParam()
* print tooLongParam
Given path localPath
And params tooLongParam
When method get
Then match response == authorizationSchema.empty
然后请求是: 获取http://XXXXXXXXXXXXX?pl=%5Bobject+Array%5D
我尝试了不同的方法,但总是有相同的结果...... 我怎样才能获得一个成型的请求?
谢谢。
答案 0 :(得分:1)
是的,你遇到了其中一个边缘情况,如果有效,你能告诉我吗,我也会看看是否可以改进。
有时JS函数返回的内容不是 空手道所喜欢的格式。解决方法是使用json
代替def
进行类型转换 - 请参阅doc:https://github.com/intuit/karate#type-conversion
* def fun =
"""
function(){
var temp = [];
for(var i = 0; i < 5; i++) {
temp.push('r');
}
return temp;
}
"""
* json array = fun()
Given url demoBaseUrl
And path 'echo'
And params { pl: '#(array)' }
When method get
Then status 200
导致:
1 > GET http://127.0.0.1:60146/echo?pl=r&pl=r&pl=r&pl=r&pl=r