我有一个脚本,可以使用Postman使用外部CSV数据文件进行API调用。
在此文件中,有一个数据集,其中每个单项都有多个数据量(介于1到3之间)。当我使用Runner运行集合时,对于少于3个条目的每一行,脚本都会失败,因为它会将其余条目视为未定义!
是否有一种方法可以为CSV文件的每个单独条目动态构建主体?
在CSV中,我有:
For some lines 1 entry : res_mac1,res_ip1,res_name1
For some lines 2 entries: res_mac1,res_name1,res_mac2,res_ip2,res_name2
For some lines 3 entries: res_mac1,res_name2,res_mac3,res_ip3,res_name3
我的身体如下:
{
"fixedIpAssignments": {
"{{res_mac1}}": {
"ip": "{{res_ip1}}","name": "{{res_name1}}"
},"{{res_mac2}}": {
"ip": "{{res_ip2}}","name": "{{res_name2}}"
},"{{res_mac3}}": {
"ip": "{{res_ip3}}","name": "{{res_name3}}"
}
}
}
但是在响应中,我收到的CSV条目少于3个的请求按照以下示例仅以2失败:
{
"fixedIpAssignments": {
"11:22:33:44:55:66": {
"ip": "192.168.1.1","name": "Host 1"
},"22:33:44:55:66:77": {
"ip": "192.168.1.2","name": "Host 2"
},"name": "{{res_name3}}"
}
}
}
是否有一种方法可以阻止那些未定义的变量键和数据,同时仍将其保留在主体中,以防新数据集具有该变量?
我尝试了以下预请求脚本,但Postman不接受语法要求,并且还返回了一个保留数组,而不是纯JSON:
_ = require('lodash');
let setCount = _.chain(data)
.keys()
.countBy((item) => item.includes('mac'))
.value()
.true
var reservations = []; //Not sure an array is the good choice here...
for(var i = 1; i <= setCount; i++) {
reservations.push(
data[`res_mac${i}`]: { //Syntax error according to Postman...
"ip": data[`res_ip${i}`],"name": data[`res_name${i}`]
}
);
}
let requestBody = {
"fixedIpAssignments": {
reservations
}
};
pm.variables.set('requestBody',JSON.stringify(requestBody));
然后将以下命令简单地输入到主体中:
{{requestBody}}