我正在使用Postman对使用CSV文件作为外部文件数据的API进行测试。在CSV文件中,有多个数据量不同的数据集,有的有数据,有的无数据。当我运行collectionRunner并运行第一个数据集时,它失败了,因为有一些尚未定义的变量,API引发了数据错误。
在CSV中
数据集1
数据集2
数据集3
In the body I've added that extra variables in case it is available in a data set.
{
"order" : "{{orderId}}",
"clientId" : "{{clientId}}",
"skus" : [
{
"barcode": {{barcode1}},
"quantity": {{quantity1}},
"unitPrice": {{price1}}
},
{
"barcode": {{barcode2}},
"quantity": {{quantity2}},
"unitPrice": {{price2}}
},
{
"barcode": {{barcode3}},
"quantity": {{quantity3}},
"unitPrice": {{price3}}
}
]
}
这是响应:
{
"order" : "1000305408",
"clientId" : "30",
"skus" : [
{
"barcode": 123123123,
"quantity": 1,
"unitPrice": 100
},
{
"barcode": {{barcode2}},
"quantity": {{quantity2}},
"unitPrice": {{price2}}
}
]
}
是否有一种方法可以阻止那些未定义的变量键和数据,同时仍将其保留在主体中,以防新数据集包含变量?
答案 0 :(得分:2)
我们可以使用上传的CSV文件动态找出存在的套数。
我只是检查其中有多少条形码集,并使用它们,我正在对setCount
进行预配对,该skus
将用于遍历数据并创建_ = 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));
项目。
预请求脚本:
{{requestBody}}
在您的请求 Body 标签中,执行以下操作:
使用JSON将正文设置为原始,并在正文中添加value1: dynamicallygenerated
value2: BlogSection
value3: BlogName
作为变量。
答案 1 :(得分:1)
您需要使用请求脚本来动态创建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));
然后在通常放置固定JSON的 Body 标签中,仅使用以下内容:
{{dynamic_json}}