程序化的多值参数

时间:2018-01-05 12:55:07

标签: karate

我需要使用多值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

我尝试了不同的方法,但总是有相同的结果...... 我怎样才能获得一个成型的请求?

谢谢。

1 个答案:

答案 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