Javascript 邮递员| API链接

Javascript 邮递员| API链接,javascript,arrays,json,postman,Javascript,Arrays,Json,Postman,我必须使这些自动化- 获取美国员工名单: 获取/emps/usa 获取每个用户的详细信息: 获取/emps/empid 第一个API返回如下数据: [ { "id": "1", "firstName": "Tom", "lastName": "Cruise" }, { "id": "2",

我必须使这些自动化-

  • 获取美国员工名单:

    获取
    /emps/usa

  • 获取每个用户的详细信息:

    获取
    /emps/empid

  • 第一个API返回如下数据:

    [
      {
        "id": "1",
        "firstName": "Tom",
        "lastName": "Cruise"
      },
      {
        "id": "2",
        "firstName": "Maria",
        "lastName": "Sharapova"
      },
      {
        "id": "3",
        "firstName": "James",
        "lastName": "Bond"
      }
    ]
    
    现在,对于每个员工,我需要调用第二个API来获取每个
    id
    的详细信息

    问题:我用上述API创建了一个集合。 在第一次API调用之后,在Postman的测试部分,我正在阅读 循环中的响应值。 我的问题是:如何读取和保存每个员工
    id
    的数据,然后 调用集合中的第二个API的次数与我收到员工的次数相同
    id
    ? 有没有办法从Postman的测试部分调用API?
    或任何其他工作想法?

    您是否尝试过在collection runner上从文件(csv或json)传递数据。
    如果您在文件
    中有所有需要详细信息的id,然后相应地传递迭代次数,则此解决方案将起作用

    高效的解决方案(当您收到不同的ID以响应第一个请求时)将使用newman邮递员命令行收集运行程序。
    您需要在邮递员应用程序中创建两个单独的收藏

  • 获取Id:将有Get/emps/usa请求
  • 从“Get/emps/usa”获取所有id,并将其存储在环境变量中,如“,”separated string,
    为此,您可以解析JSON响应
    创建空字符串变量,该变量将根据您在响应中获得的数组大小在迭代中追加每个id字符串
    然后设置结果字符串,看起来像“1,2,3”对环境变量

    postman.setEnvironmentVariable("allIds",result);
    
    一旦您在环境变量中获得了预期的字符串,您就完成了postman step1:)
    现在它的时间导出集合并从commanline工具运行此集合
    导出的集合,并且postman的环境是json格式的
    假设getData.json是您的集合文件,env.json是您的环境文件
    从cmd提示符或shell执行以下命令:

    newman run getData.json -e env.json --export-environment expEnv.json
    
    执行此操作时,您将获得expEnv.json,它将在执行期间生成id数据
    现在可怕的部分来了(process expEnv.json)
    这里你需要用你喜欢的编程语言编写一个程序,它将接受这个expEnv.json进程/解析它并创建csv文件
    csv的格式如下:
    Id
    1
    2
    3
    一旦您在csv中获得该内容,您就可以进入第2步。

    二,。获取每个用户的详细信息:Get/emps/empidrequest
    在postman应用程序中使用Get detail request
    在预请求脚本中创建一个集合。您需要将文件中的值设置为环境变量
    您的预请求脚本将如下所示:
    posman.setEnvironmentVariable('usrId',data['Id')//参考
    
    现在通过在环境变量URL中添加usrId来更改URL
    url看起来像GET/emps/{{usrId}而不是GET/emps/empid
    然后导出此集合并从newman运行它
    假设getDetails.json是从postman导出的集合,您可以在此处使用相同的env.json

    newman run getDetails.json -e env.json -d yourGeneratedCSVFile.csv
    

    您是否尝试使用邮递员控制工作流? 你有一个很好的例子。 关键是:

  • 实现一个标准循环,但将索引持久化到环境变量中
  • 无论您需要做什么,检查持久化索引,并在需要时使用postman.setNextRequest(“”)

  • 我对这个问题有一个有效的解决办法

    1.先决条件 我的两个API/端点如下所示

    • :
    • :
    为了更好的可读性,我截断了图像的链接。
    (只需单击 链接以查看未修订的版本。)

    请注意,在第一个端点中,每个对象/人都有一个唯一的端点
    id
    名称
    ,仅此而已。 对于第一个端点中的每个对象,第二个API具有相同的特性 唯一标识符,以及描述和图像链接/ 肖像画。 因此,这两个API本身都不包含关于这两个API的信息 名称和图像链接

    2.结果 显然,如果两个API中的数据可以合并,问题就解决了 以这样一种方式组合在一起:对于每个标识符,名称和 提供图像链接。像这样:

    [
      {
        "id": "Q37079",
        "name": "Tom Cruise",
        "description": "American actor and producer",
        "image": "https://upload.wikimedia.org/ [...] _Skidmore_2.jpg"
      },
      {
        "id": "Q844",
        "name": "James Bond",
        "description": "Fictional British spy",
        "image": "https://upload.wikimedia.org/ [...] _Bangalore_144323.jpg"
      },
      {
        "id": "Q11666",
        "name": "Maria Sharapova",
        "description": "Russian tennis player",
        "image": "https://upload.wikimedia.org/ [...] _%2843186339350%29.jpg"
      }
    ]
    
    剩下的就是在Postman中可视化数据:

    GET http://henke.atwebpages.com/postman/chaining/emps/usa
    

    3.方法论 我向法院提出请求 API作为 正常在邮递员中获取请求:

    GET http://henke.atwebpages.com/postman/chaining/emps/usa
    
    我也许可以向警察提出这个要求 美国石油学会 这也是一个普通的邮递员的要求——然后将两者结合起来 通过邮递员的收信人提出请求

    但我却向 美国石油学会 在预请求脚本中,如下所示:

    const url = 'http://henke.atwebpages.com/postman/chaining/emps/empid';
    pm.sendRequest(url, (err, response) => {
      pm.environment.set('US_portraits',
        JSON.stringify(response.json()['US-portraits']));
    });
    
    然后,在测试部分,我将这两个结果结合在一起 最后,将它们形象化:

    const usEmployees = pm.response.json()['US-employees'];
    const usPortraits = JSON.parse(pm.environment.get('US_portraits'));
    usEmployees.map(x => Object.assign(x, usPortraits.find(y => y.id === x.id)));
    const tblHeader = Object.keys(pm.response.json())[0];
    const template = `
    <table>
      <tr><th>` + tblHeader + `</th></tr>
      {{#each response}}
      <tr><td>{{name}}<br><img src="{{image}}"></td></tr>
      {{/each}}
    </table>`;
    pm.visualizer.set(template, {
      response: usEmployees
    });
    
    复制此仅测试版本的邮递员集合:

    工具书类

    1不要被台词弄糊涂了
    constlock=setTimeout(()=>{},43210)
    清除超时(锁定)–
    他们的唯一目的是充当警察

    const usEmployees = pm.response.json()['US-employees'];
    const usPortraits = JSON.parse(pm.environment.get('US_portraits'));
    usEmployees.map(x => Object.assign(x, usPortraits.find(y => y.id === x.id)));
    const tblHeader = Object.keys(pm.response.json())[0];
    const template = `
    <table>
      <tr><th>` + tblHeader + `</th></tr>
      {{#each response}}
      <tr><td>{{name}}<br><img src="{{image}}"></td></tr>
      {{/each}}
    </table>`;
    pm.visualizer.set(template, {
      response: usEmployees
    });
    
    const lock = setTimeout(() => {}, 43210);
    const urlO = 'http://henke.atwebpages.com/postman/chaining/emps/empid';
    const urlI = 'http://henke.atwebpages.com/postman/chaining/emps/usa';
    pm.sendRequest(urlO, (_, responseO) => {
      const usPortraits = responseO.json()['US-portraits'];
      pm.sendRequest(urlI, (_, responseI) => {
        clearTimeout(lock); // Unlock the timeout.
        const usEmployees = responseI.json()['US-employees'];
        usEmployees.map(x => Object.assign(x,
          usPortraits.find(y => y.id === x.id)));
        const tblHeader = Object.keys(responseI.json())[0];
        const template = `<table>
          <tr><th>` + tblHeader + `</th></tr>
          {{#each responseI}}
          <tr><td>{{name}}<br><img src="{{image}}"></td></tr>
          {{/each}}
        </table>`;
        pm.visualizer.set(template, { responseI: usEmployees });
      });
    });