在邮递员中,我如何检查响应中的值是否与请求中的值相同,而不考虑大小写或数组的顺序?
In postman, how can i check if the values in the response is same as that of the request irrespective of case or the order for an array?
我有一个类似于
的请求
{
"Name":"123",
"Age":"1234",
"Phone":"12345",
"RequestedABC":{"XYZ":"111abc","Qwe":"222abc","ZXC":"333def"}
}
响应是
{
"Name": "123",
"AllowedABC": {
"XYZ": "111abc",
"ZXC": "333def",
"QWE": "222abc",
}
}
我想测试允许的 ABC 是否与请求的 ABC 相同。这意味着我想断言响应中的所有键值对都与请求的键值对相同,而不管响应中列出的大小写或顺序如何。提供的示例将是一个通过场景。
我试过了
var body = JSON.parse(request.data);
var jsonData = JSON.parse(responseBody);
pm.test("Granted ABC is same as requested ABCTest", () => {
pm.expect(jsonData.AllowedABC).to.eql(body.RequestedABC);
});
但是我收到一个错误
AssertionError: expected{Object(XYZ,ZXC...)} to to deeply equal
{Object (XYZ,Qwe,...)}
这会起作用 - 不确定 to.eql
如何处理对象,但这会导致测试字符串
const responseData = {
"Name": "123",
"AllowedABC": {
"XYZ": "111abc",
"ZXC": "333def",
"QWE": "222abc",
}
}
const requestData = {
"Name":"123",
"Age":"1234",
"Phone":"12345",
"RequestedABC":{"XYZ":"111abc","Qwe":"222abc","ZXC":"333def"}
};
const sorter = ([a], [b]) => a.localeCompare(b);
const transformer = obj => Object.entries(obj).map(([k, v]) => [k.toUpperCase(), v.toUpperCase()]).sort(sorter).join();
const requestABC = transformer(requestData.RequestedABC);
const responseABC = transformer(responseData.AllowedABC);
console.log(requestABC);
console.log(responseABC);
console.log(requestABC === responseABC);
在你的代码中你会做
var body = JSON.parse(request.data);
var jsonData = JSON.parse(responseBody);
const sorter = ([a], [b]) => a.localeCompare(b);
const transformer = obj => Object.entries(obj).map(([k, v]) => [k.toUpperCase(), v.toUpperCase()]).sort(sorter).join();
const requestABC = transformer(body.RequestedABC);
const responseABC = transformer(jsonData.AllowedABC);
pm.test("Granted ABC is same as requested ABCTest", () => {
pm.expect(responseABC ).to.eql(requestABC);
});
希望现在有意义
您可以使用函数将所有键小写,例如 keysToLowerCase(obj)
(https://gist.github.com/radutta/4480e8292372da56b426f7a4c65f8774),然后测试小写的对象:
let allowedAbcLowercase = keysToLowerCase(jsonData.AllowedABC);
let requestedabcLowercase = keysToLowerCase(body.RequestedABC);
pm.test("Granted ABC is same as requested ABCTest", () => {
pm.expect(allowedAbcLowercase).to.eql(requestedabcLowercase);
});
我有一个类似于
的请求{
"Name":"123",
"Age":"1234",
"Phone":"12345",
"RequestedABC":{"XYZ":"111abc","Qwe":"222abc","ZXC":"333def"}
}
响应是
{
"Name": "123",
"AllowedABC": {
"XYZ": "111abc",
"ZXC": "333def",
"QWE": "222abc",
}
}
我想测试允许的 ABC 是否与请求的 ABC 相同。这意味着我想断言响应中的所有键值对都与请求的键值对相同,而不管响应中列出的大小写或顺序如何。提供的示例将是一个通过场景。 我试过了
var body = JSON.parse(request.data);
var jsonData = JSON.parse(responseBody);
pm.test("Granted ABC is same as requested ABCTest", () => {
pm.expect(jsonData.AllowedABC).to.eql(body.RequestedABC);
});
但是我收到一个错误
AssertionError: expected{Object(XYZ,ZXC...)} to to deeply equal {Object (XYZ,Qwe,...)}
这会起作用 - 不确定 to.eql
如何处理对象,但这会导致测试字符串
const responseData = {
"Name": "123",
"AllowedABC": {
"XYZ": "111abc",
"ZXC": "333def",
"QWE": "222abc",
}
}
const requestData = {
"Name":"123",
"Age":"1234",
"Phone":"12345",
"RequestedABC":{"XYZ":"111abc","Qwe":"222abc","ZXC":"333def"}
};
const sorter = ([a], [b]) => a.localeCompare(b);
const transformer = obj => Object.entries(obj).map(([k, v]) => [k.toUpperCase(), v.toUpperCase()]).sort(sorter).join();
const requestABC = transformer(requestData.RequestedABC);
const responseABC = transformer(responseData.AllowedABC);
console.log(requestABC);
console.log(responseABC);
console.log(requestABC === responseABC);
在你的代码中你会做
var body = JSON.parse(request.data);
var jsonData = JSON.parse(responseBody);
const sorter = ([a], [b]) => a.localeCompare(b);
const transformer = obj => Object.entries(obj).map(([k, v]) => [k.toUpperCase(), v.toUpperCase()]).sort(sorter).join();
const requestABC = transformer(body.RequestedABC);
const responseABC = transformer(jsonData.AllowedABC);
pm.test("Granted ABC is same as requested ABCTest", () => {
pm.expect(responseABC ).to.eql(requestABC);
});
希望现在有意义
您可以使用函数将所有键小写,例如 keysToLowerCase(obj)
(https://gist.github.com/radutta/4480e8292372da56b426f7a4c65f8774),然后测试小写的对象:
let allowedAbcLowercase = keysToLowerCase(jsonData.AllowedABC);
let requestedabcLowercase = keysToLowerCase(body.RequestedABC);
pm.test("Granted ABC is same as requested ABCTest", () => {
pm.expect(allowedAbcLowercase).to.eql(requestedabcLowercase);
});