Javascript 如何阻止未定义的变量通过邮递员发送?

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, 条形

我使用Postman在API上运行测试,使用CSV文件作为外部文件数据。在CSV文件中,有多个具有不同数据量的数据集,有些有数据,有些没有数据。当我运行collection runner并运行第一个数据集时,它会失败,因为存在尚未定义的变量,API会抛出一个数据错误

在CSV中

  • 数据集1

    • 命令, clientid, 条形码1, 数量1, 单价1
  • 数据集2

    • 命令, clientid, 条形码1, 数量1, 单价1, 条形码2, 数量2, 单价2
  • 数据集3

    • 命令, 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));