邮递员在发送请求前先更新被黑的数据

时间:2020-04-23 07:57:02

标签: javascript postman postman-collection-runner postman-pre-request-script postman-testcase

我正在尝试在将请求主体数据发送到服务器之前对其进行修改。所以我选择了请求前脚本部分进行修改。

场景:在请求正文中,很少有字段作为数组输入以url编码。 在邮递员中手动运行时,我曾经根据需要像下面一样复制该字段。

input_data[] = "a"
input_data[] = "b"
input_data[] = "c"

但是input_data的计数是动态的,并且基于另一个输入值。

当我准备测试脚本以从迭代数据中读取其计数和值列表的数据时。 在集合运行器中加载数据时,动态计数来自json文件。 因此,我尝试在请求前脚本中读取迭代数据,并通过循环复制“ input_data []”。 请求主体数据在循环后更新。但是在收集运行器中,较旧的主体仅发送到服务器。没有修改一个。

我在预请求中尝试过的脚本:

let array_to_body = [
"data_input",
"xyx_input"    
];

console.log(pm.iterationData)

let req = pm.request.body.urlencoded;
let arr_len = array_to_body.length;
for (var i = 0; i < arr_len; i++) {
  let key = array_to_body[i];
  // delete req[key+'[]'];
  req.remove(key + '[]');
  }
 console.log("--After delete---", req);
 //printed modified value - success
 let req_str = req.toString();

 //Preparing sting with repeated keys. If obj or array used, duplicate keys are not possible,
for (var i = 0; i < arr_len; i++) {
let key = array_to_body[i];
let data_for_key = pm.iterationData.get(key);
console.log(key + ":", data_for_key);

if (data_for_key != '' && data_for_key.length > 0) {
    let data_len = data_for_key.length;
    for (var j = 0; j < data_len; j++) {

        req_str += '&' + (key + '[]=' + data_for_key[j]);
    }
  }

}


console.log("encoded string : ", req_str); // expected result came.
pm.request.body.update({
mode: "urlencoded",
"urlencoded": ""
});//Reset the request body - optional.

pm.request.body.update({
mode: "urlencoded",
"urlencoded": req_str
}); // setting the new modified data in req body
console.log("updated - body", pm.request.body.urlencoded); // printed modified keys and values. 

0 个答案:

没有答案
相关问题