编程多值参数

Programally multi-value param

我需要用多值参数发出请求,它的值必须是一个非常大的数组来测试 api 参数验证。我的实现之一:

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

我试过不同的方法,但总是一样的结果... 我怎样才能得到一个weel格式的请求?

谢谢。

是的,您遇到了其中一种极端情况,能否告诉我这是否可行,我也会看看是否可以改进。

有时 JS 函数返回的内容不完全是空手道喜欢的格式。解决方法是使用 json 而不是 def 进行类型转换 - 请参阅文档: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