如何阻止未定义的变量在邮递员上发送?

时间:2019-04-12 09:55:48

标签: javascript json postman

我正在使用Postman对使用CSV文件作为外部文件数据的API进行测试。在CSV文件中,有多个数据量不同的数据集,有的有数据,有的无数据。当我运行collectionRunner并运行第一个数据集时,它失败了,因为有一些尚未定义的变量,API引发了数据错误。

在CSV中

  1. 数据集1

    • 订单, 客户编号, 条码1 数量1 单价1
  2. 数据集2

    • 订单, 客户编号, 条码1 数量1 单价1 条码2 数量2 单价2
  3. 数据集3

    • 订单, 客户编号, 条码1 数量1 单价1 条码2 数量2 单价2 条码3, 数量3 单价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}}
 }
 ]
} 

是否有一种方法可以阻止那些未定义的变量键和数据,同时仍将其保留在主体中,以防新数据集包含变量?

2 个答案:

答案 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 作为变量。

如果有任何混淆,可以参考屏幕截图。 raw json body

答案 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}}