我正在尝试在将请求主体数据发送到服务器之前对其进行修改。所以我选择了请求前脚本部分进行修改。
场景:在请求正文中,很少有字段作为数组输入以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.