Javascript 如何阻止未定义的变量通过邮递员发送?
我使用Postman在API上运行测试,使用CSV文件作为外部文件数据。在CSV文件中,有多个具有不同数据量的数据集,有些有数据,有些没有数据。当我运行collection runner并运行第一个数据集时,它会失败,因为存在尚未定义的变量,API会抛出一个数据错误 在CSV中Javascript 如何阻止未定义的变量通过邮递员发送?,javascript,json,postman,Javascript,Json,Postman,我使用Postman在API上运行测试,使用CSV文件作为外部文件数据。在CSV文件中,有多个具有不同数据量的数据集,有些有数据,有些没有数据。当我运行collection runner并运行第一个数据集时,它会失败,因为存在尚未定义的变量,API会抛出一个数据错误 在CSV中 数据集1 命令, clientid, 条形码1, 数量1, 单价1 数据集2 命令, clientid, 条形码1, 数量1, 单价1, 条形码2, 数量2, 单价2 数据集3 命令, clientid, 条形
- 命令, clientid, 条形码1, 数量1, 单价1
- 命令, clientid, 条形码1, 数量1, 单价1, 条形码2, 数量2, 单价2
- 命令, clientid, 条形码1, 数量1, 单价1, 条形码2, 数量2, 单价2, 条形码3, 数量3, 单价3
{
"order" : "1000305408",
"clientId" : "30",
"skus" : [
{
"barcode": 123123123,
"quantity": 1,
"unitPrice": 100
},
{
"barcode": {{barcode2}},
"quantity": {{quantity2}},
"unitPrice": {{price2}}
}
]
}
是否有一种方法可以阻止那些未定义的变量键和数据,同时仍将其保留在正文中,以防新数据集包含该变量?您需要使用一个预请求脚本来动态创建JSON 这在本质上是必要的:
var body = {
order : pm.environment.get('orderId'),
clientId : pm.environment.get('clientId'),
skus : []
};
for (var i = 1; i <= 3; i++) {
var barcode = pm.environment.get('barcode' + i);
if (barcode) {
var quantity = pm.environment.get('quantity' + i);
var price = pm.environment.get('price' + i);
var obj = {
barcode : barcode,
quantity : quantity,
unitPrice : price
}
body.skus.push(obj);
}
}
pm.environment.set('dynamic_json', JSON.stringify(body));
我们可以使用上载的CSV文件动态查找存在的集合数 我只是检查有多少个条形码集,并使用它,我准备了一个
setCount
,它将用于循环数据并创建sku
项目
预请求脚本:
_ = require('lodash');
// Here we'll know how many unit counts we have, I am checking barcode only.
let setCount = _.chain(data) // data is the actual iteration data from the csv file, don't worry just run the script.
.keys()
.countBy((item) => item.includes('barcode'))
.value()
.true,
skus = [];
for(var i = 1; i <= setCount; i++) {
skus.push({
barcode: data[`barcode${i}`],
quantity: data[`quantity${i}`],
unitPrice: data[`unitprice${i}`]
});
}
let requestBody = {
order: data["orderId"],
clientId: data["clientId"],
skus: skus
};
pm.variables.set('requestBody', JSON.stringify(requestBody));
\=require('lodash');
//在这里,我们将知道我们有多少单位计数,我只检查条形码。
让setCount=quot.chain(data)//数据是csv文件中的实际迭代数据,不用担心,只需运行脚本即可。
.keys()
.countBy((项目)=>项目。包括('条形码'))
.value()
.是的,
SKU=[];
对于(var i=1;i),这个问题比这里发布的99.9%的问题要好。哈哈,感谢编辑!我尝试过这个,但是对于空变量,它仍然会通过,因为它发送了一个null,并给出了一个数据错误。{“SKU”:[{“条形码”:5702015989480,“数量”:1},{“条形码”:5702015989480,“数量”:1},{“条形码”:null,“数量”:null}{“barcode”:null,“quantity”:null}]}好的,我添加了if-else条码,只针对null问题,它可以工作!:)for(var I=1;I这不适用于runner和CSV文件,但在环境已经设置好时可以正常工作
{{dynamic_json}}
_ = require('lodash');
// Here we'll know how many unit counts we have, I am checking barcode only.
let setCount = _.chain(data) // data is the actual iteration data from the csv file, don't worry just run the script.
.keys()
.countBy((item) => item.includes('barcode'))
.value()
.true,
skus = [];
for(var i = 1; i <= setCount; i++) {
skus.push({
barcode: data[`barcode${i}`],
quantity: data[`quantity${i}`],
unitPrice: data[`unitprice${i}`]
});
}
let requestBody = {
order: data["orderId"],
clientId: data["clientId"],
skus: skus
};
pm.variables.set('requestBody', JSON.stringify(requestBody));