function sortJSON(data, key, way) {
//log.info(" " + key + " ------------------- " + typeof(key));
return data.sort(function(a, b) {
var x = a\[key\]; var y = b\[key\];
if (way === '' ) { return ((x < y) ? - : ((x > y) ? : )); }
if (way === '') { return ((x > y) ? - : ((x < y) ? : )); }
});
}
function isArray(what) {
return Object.prototype.toString.call(what) === '\[object Array\]';
}
var deepequals = function ( x, y ) {
if ( x === y ) return true;
// if both x and y are null or undefined and exactly the same
if ( ! ( x instanceof Object ) || ! ( y instanceof Object ) ) return false;
// if they are not strictly equal, they both need to be Objects
if ( x.constructor !== y.constructor ) return false;
// they must have the exact same prototype chain, the closest we can do is
// test there constructor.
// log.info("1111111111111111111111 "+ typeof("payMethod") + "" + Object.keys(x)\[0\] + "" + typeof(Object.keys(x)\[0\]));
var sortkey2 = "payMethod";
if(isArray(x) && x.length > && typeof x\[\] == 'object' && Object.keys(x\[\])\[\] === "payMethod" ) {
//log.info(JSON.stringify(x)+" ======== "+ Object.keys(x));
//log.info(JSON.stringify(y)+" ======== "+ Object.keys(y));
sortkey2 = Object.keys(x\[\])\[\];
if(isArray(x)) { sortJSON(x,sortkey2, '');}
if(isArray(y)) { sortJSON(y,sortkey2, ''); }
//log.info(JSON.stringify(x)+" ======== "+ Object.keys(x));
//log.info(JSON.stringify(y)+" ======== "+ Object.keys(y));
}
//if(sortkey2 == sortkey) log.info("same string " + sortkey);
// if(isArray(x)) sortJSON(x,'a', '123');
// if(isArray(y)) sortJSON(y,'a', '123');
for ( var p in x ) {
// log.info(p+":"+ JSON.stringify(x\[p\]) + " ====== " + JSON.stringify(y\[p\]));
if ( ! x.hasOwnProperty( p ) ) continue;
// other properties were tested using x.constructor === y.constructor
if ( ! y.hasOwnProperty( p ) ) { log.info(JSON.stringify(x)+"\\n================属性不一致 ===============\\n"+JSON.stringify(y)); return false; }
// allows to compare x\[ p \] and y\[ p \] when set to undefined
if ( x\[ p \] === y\[ p \] ) continue;
// if they have the same strict value or identity then they are equal
if ( typeof( x\[ p \] ) !== "object" ) { log.info(JSON.stringify(x)+"\\n================值不一致===============\\n"+JSON.stringify(y)); return false; };
// Numbers, Strings, Functions, Booleans must be strictly equal
if ( ! deepequals( x\[ p \], y\[ p \] ) ) return false;
// Objects and Arrays must be tested recursively
}
for ( p in y ) {
if ( y.hasOwnProperty( p ) && ! x.hasOwnProperty( p ) ) { log.info(JSON.stringify(x)+"\\n================反向检查属性不一致===============\\n"+JSON.stringify(y)); return false; };
// allows x\[ p \] to be set to undefined
}
return true;
}
//Object.prototype.deepEquals = deepEquals;
var beforeObject = JSON.parse(vars.get("83response"));
var afterObject = JSON.parse(prev.getResponseDataAsString());
if(deepequals( beforeObject, afterObject )){
log.info("deep equals");
}
else{
// log.info(deepequals(testa,testb));
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage("content not deep equal ");
AssertionResult.setResultForFailure("content not deep equal");
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章