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
[
{
"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邮递员命令行收集运行程序。
您需要在邮递员应用程序中创建两个单独的收藏
为此,您可以解析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 });
});
});