Postman 中的 For Loop 未按预期工作
For Loop in Postman not Working as Expected
我正在尝试通过 JSON 数据文件使用 Postman Runner 和 运行,并从控制台中的数据文件中获取每条记录。
目前我只得到第一行。
我的 JSON 数据文件如下所示:
[
{
"line1": "13579",
"line2": "2468",
"line3": "1234",
"line4": "5678",
},
{
"line1": "13468",
"line2": "2425",
"line3": "12578",
"line4": "567343",
}
]
我试过的代码是:
var res = JSON.parse(responseBody);
for (let i = 0; i < res.length; i++) {
console.log("actual data: " + i + " = " + data[i].line1);
// tests start
pm.test("iteration: " + i + " = " + "expected line1 = " + data.line1 + " | Actual line1 = " + res[i].line1 , function () {
pm.expect(res[i].line1).to.equal(data[i].line1);
});
}
但是,这会在控制台中打印出一个错误:
"TypeError: Cannot read property 'line1' of undefined"
如果我将其更改为 console.log("actual data: " + i + " = " + data.line1);
,它会写出:
actual data: 0 = 13579
actual data: 1 = 13579
actual data: 2 = 13579
[![邮递员运行ner][1]][1]
- 我是否正确使用了 for 循环?
- 我做错了什么?
编辑
当我发送 URL:
时,我忘记添加我的 res
returns
[
{
"line1": "13579",
"line2": "2468",
"line3": "1234",
"line4": "5678"
},
{
"line1": "13468",
"line2": "2425",
"line3": "12578",
"line4": "567343"
},
{
"line1": "1test8",
"line2": "24te25",
"line3": "125st78",
"line4": "567test343"
}
]
为什么要从 data
得到 line1
?您解析的 JSON 在 res
变量中。
var res = JSON.parse(responseBody);
for (let i = 0; i < res.length; i++) {
console.log("actual data: " + i + " = " + res[i].line1);
}
数据文件的使用方式是data["columnname"],它没有多行。它不提供整个数据对象,而只提供当前迭代的数据。您不能使用数据对象遍历 csv
中的所有内容
尝试打印:
console.log( JSON.stringify(data))
如果您想使用 csv ,则将其存储为环境变量,然后使用它:
示例:
https://documenter.getpostman.com/view/8296678/TzeUp9Me
使用这个 public 集合
我的同事在这方面帮助了我。
分辨率是使用res[pm.info.iteration].line1
。
完整的测试是:
// start tests
pm.test("expected line1 = " + (data["line1"]) + " | Actual line1 = " + (res[pm.info.iteration].line1), function () {
pm.expect(res[pm.info.iteration].line1).to.equal(data["line1"]);
});
我正在尝试通过 JSON 数据文件使用 Postman Runner 和 运行,并从控制台中的数据文件中获取每条记录。
目前我只得到第一行。
我的 JSON 数据文件如下所示:
[
{
"line1": "13579",
"line2": "2468",
"line3": "1234",
"line4": "5678",
},
{
"line1": "13468",
"line2": "2425",
"line3": "12578",
"line4": "567343",
}
]
我试过的代码是:
var res = JSON.parse(responseBody);
for (let i = 0; i < res.length; i++) {
console.log("actual data: " + i + " = " + data[i].line1);
// tests start
pm.test("iteration: " + i + " = " + "expected line1 = " + data.line1 + " | Actual line1 = " + res[i].line1 , function () {
pm.expect(res[i].line1).to.equal(data[i].line1);
});
}
但是,这会在控制台中打印出一个错误:
"TypeError: Cannot read property 'line1' of undefined"
如果我将其更改为 console.log("actual data: " + i + " = " + data.line1);
,它会写出:
actual data: 0 = 13579
actual data: 1 = 13579
actual data: 2 = 13579
[![邮递员运行ner][1]][1]
- 我是否正确使用了 for 循环?
- 我做错了什么?
编辑
当我发送 URL:
res
returns
[
{
"line1": "13579",
"line2": "2468",
"line3": "1234",
"line4": "5678"
},
{
"line1": "13468",
"line2": "2425",
"line3": "12578",
"line4": "567343"
},
{
"line1": "1test8",
"line2": "24te25",
"line3": "125st78",
"line4": "567test343"
}
]
为什么要从 data
得到 line1
?您解析的 JSON 在 res
变量中。
var res = JSON.parse(responseBody);
for (let i = 0; i < res.length; i++) {
console.log("actual data: " + i + " = " + res[i].line1);
}
数据文件的使用方式是data["columnname"],它没有多行。它不提供整个数据对象,而只提供当前迭代的数据。您不能使用数据对象遍历 csv
中的所有内容尝试打印:
console.log( JSON.stringify(data))
如果您想使用 csv ,则将其存储为环境变量,然后使用它:
示例:
https://documenter.getpostman.com/view/8296678/TzeUp9Me
使用这个 public 集合
我的同事在这方面帮助了我。
分辨率是使用res[pm.info.iteration].line1
。
完整的测试是:
// start tests
pm.test("expected line1 = " + (data["line1"]) + " | Actual line1 = " + (res[pm.info.iteration].line1), function () {
pm.expect(res[pm.info.iteration].line1).to.equal(data["line1"]);
});