Jha*_*anz 1 javascript assertion postman
我正在用 JavaScript 编写邮递员测试来断言下面的场景。我有一个 id 1111,响应返回一个 id 数组。我想编写一个测试以将 1111 匹配到数组中的一个 id 中。
我曾尝试使用包含功能,即
pm.test("The response contains a valid id in the response", function() {
pm.expect(jsonData.results[0].totalId.children).to.include("1111");
});
Run Code Online (Sandbox Code Playgroud)
{
"totalId": "0000",
"children": [{
"id": "888"
},
{
"id": "3323"
},
{
"id": "1111"
}
]
}
Run Code Online (Sandbox Code Playgroud)
任何建议。
您正在尝试检查数组中的值children,因此,您不应使用.totalId.children,而必须使用 is jsonData.results[0].children。
当您尝试检查数组对象的值时,您需要添加自定义 JavaScript 逻辑来检查idparam的值。
这是您可以在测试脚本中使用的函数。
function _isContains(json, keyname, value) {
return Object.keys(json).some(key => {
return typeof json[key] === 'object' ?
_isContains(json[key], keyname, value) : key === keyname && json[key] === value;
});
}
Run Code Online (Sandbox Code Playgroud)
该函数_isContains检查数组中每个对象的值和键名。
现在,您可以将所需的输入传递给测试用例中的函数。
pm.test("The response contains a valid id in the response", function () {
pm.expect(_isContains(jsonData.children, "id" ,"1111")).to.be.true;
});
Run Code Online (Sandbox Code Playgroud)
这将使用 keyid和 value从对象的数组中检查1111,如果可用,则返回 true,否则返回 false。
最终测试脚本
var jsonData = pm.response.json();
pm.test("The response contains a valid id in the response", function () {
pm.expect(_isContains(jsonData.children, "id" ,"1111")).to.be.true;
});
function _isContains(json, keyname, value) {
return Object.keys(json).some(key => {
return typeof json[key] === 'object' ?
_isContains(json[key], keyname, value) : key === keyname && json[key] === value;
});
}
Run Code Online (Sandbox Code Playgroud)
一个更简单的解决方案可能是:
const child = jsonData.results[0].totalId.children.find(c => c.id === "1111");
pm.expect(child).exist;
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是您可以轻松扩展测试套件以验证扩展的键/值(如 @Ajeet Shah 的示例中所述):
pm.expect(child.value).is.not.null;
Run Code Online (Sandbox Code Playgroud)
注意:假设数组中只有一项的 ID 为“1111”。实际上,find() 方法返回所提供数组中满足所提供测试函数的第一个元素的值。如果没有值满足测试函数,则返回 undefined。
| 归档时间: |
|
| 查看次数: |
8631 次 |
| 最近记录: |