有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

通过json进行java迭代,并为其他请求调用多个API

我正在使用Postman来迭代一个包含大约40对项目的json。然后,我需要获取创建的数组,并为数组中的每个元素运行API调用,以返回一组结果。使用这里的代码,我只能提取数组中的最后一个元素。我试图把邮递员放进去。setNextRequest在for循环中,但后来我发现无论它在哪里,它总是最后执行

tests["Status code is 200 (that's good!)"] = (responseCode.code === 200);

if (responseCode.code === 200) {

var jsonData = pm.response.json();
var json = [];

postman.setEnvironmentVariable("json", jsonData)
postman.setNextRequest('GetAdmins');

for (var key in jsonData ) {
    if (jsonData.hasOwnProperty(key)) {
        postman.setEnvironmentVariable("organizationId", jsonData[key].id)
        postman.setEnvironmentVariable("orgname", jsonData[key].name)
        tests[jsonData[key].name + " " + jsonData[key].id] = !!jsonData[key].name;
        }
    }
}

else {
    postman.setNextRequest(null);
}

GetAdmins是另一个在调用中使用{{organizationId}的GET

我想我要找的是;对json中的每个元素运行另一个API调用的最佳方式是什么

提前谢谢

编辑:添加JSON输出

[
    {
        "id": XXXXXX,
        "name": "Name1"
    },
    {
        "id": XXXXXX,
        "name": "Name2"
    },
    {
        "id": XXXXXX,
        "name": "Name3"
    }
]

共 (2) 个答案

  1. # 1 楼答案

    我通过以下两个指南解决了这个问题:

    1. Loops and dynamic variables in Postman: part 1
    2. Loops and dynamic variables in Postman: part 2

    我还必须为java实现bigint修复程序,但在Postman中,这非常烦人。。。可以在这里找到:

    1. Hacking bigint in API testing with Postman Runner Newman in CI Environment
    2. Gist

    很多google plus的尝试和错误让我开始运行

    谢谢大家的帮助

    这是我最后的代码:

    GetOrgs

    tests["Status code is 200 (that's good!)"] = (responseCode.code === 200);
    
    eval(postman.getGlobalVariable("bigint_fix"));
    
    var jsonData = JSON.parse(responseBody);
    var id_list = [];
    
    jsonData.forEach(function(list) {
        var testTitle = "Org: " + list.name + " has id: " + JSON.stringify(list.id);
        id_list.push(list.id);
        tests[testTitle] = !!list.id;
    });
    
    postman.setEnvironmentVariable("organizationId",JSON.stringify(id_list.shift()));
    postman.setEnvironmentVariable("id_list", JSON.stringify(id_list));
    postman.setNextRequest("GetAdmins");
    

    GetAdmins

    eval(postman.getGlobalVariable("bigint_fix"));
    
    var jsonData = JSON.parse(responseBody);
    
    jsonData.forEach(function(admin) {
        var testTitle = "Admin: " + admin.name + " has " + admin.orgAccess;
        tests[testTitle] = !!admin.name;
    });
    
    var id_list = JSON.parse(environment.id_list);
    if (id_list.length > 0) {
        postman.setEnvironmentVariable("organizationId", JSON.stringify(id_list.shift());
        postman.setEnvironmentVariable("id_list", JSON.stringify(id_list));
        postman.setNextRequest("GetAdmins");
    }
    
    else {
        postman.clearEnvrionmentVariable("organizationId");
        postman.clearEnvironmentVariable("id_list");
    }
    
  2. # 2 楼答案

    这可能有助于获取数据——我还没有尝试过,所以第一次可能不起作用

    var jsonData = pm.response.json()
    
    data = _.map(jsonData, item => {
             organizationId: item.id
             orgName: item.name
         })
    pm.environment.set('organizationData', JSON.stringify(data))
    

    然后,您的所有组织数据都在一个变量中,您可以使用这些数据在下一个“Get Admins”请求中迭代Id

    您需要在下一个请求的Pre-request script中有一些代码来访问每个id,以便在请求中进行迭代。您需要像这样解析变量:

    var orgID = pm.environment.get(JSON.parse("organizationData"))
    

    那么orgID[0].organizationId将是列表中的第一个

    这不是解决你问题的完整方案,但它可能会帮助你获得数据