标签:
import org.custommonkey.xmlunit.*
import javax.xml.xpath.*
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.parsers.*
import static java.lang.Math.*
String xmlTP = "D:\\Study\\MA\\xml_TP.xml"
String xmlLive = "D:\\Study\\MA\\xml_Live.xml"
String xmlMapping = "D:\\Study\\MA\\DataIdMapping\\DataIdMappingPA.xml"
def allowableDeviation = 0.01
def maxRecordFail = 50
String UIDataName = ""
String holding = ""
String XPathOfDiffDataName = ""
def responseTP= new FileReader( new File(xmlTP))
def responseLive= new FileReader(new File(xmlLive))
def xmlAllDiff = new DetailedDiff( new Diff(responseLive,responseTP))
def diffList = xmlAllDiff.getAllDifferences()
int diffListSize=diffList.size()
log.info "TP vs Live , different number : "+diffListSize
if(maxRecordFail>diffListSize||maxRecordFail<=0){
maxRecordFail=diffListSize
}
for (i = 0; i < maxRecordFail; i++) {
String diff=diffList.get(i)
// log.info " Difference : "+diff
if(diff.contains("holding")){
log.info " Fail : Holding is different , TP = "+diff.split("holding‘>")[1].split("<")[0]+" , "+ "Live = "+diff.split("holding‘>")[2].split("<")[0]
}
if(diff.contains("PA001")){
log.info " Fail : Portfolio Id is different , TP = "+diff.split("‘")[1]+" , "+ "Live = "+diff.split("‘")[3]
}
String diffDataID = diff.split("@")[2].trim()
String TPDataValue = diff.split("‘")[1]
String LiveDataValue =diff.split("‘")[3]
if(((TPDataValue=="")&&(LiveDataValue!=""))||((TPDataValue!="")&&(LiveDataValue==""))){
UIDataName = getDataNameInMapping(diffDataID,xmlMapping)
XPathOfDiffDataName = getXPathOfDataName(diff)
holding = getHoldingByXPath(XPathOfDiffDataName,xmlLive)
log.info " Fail : Data Value is different , TP = "+TPDataValue+" , Live = "+LiveDataValue+" , Holding = "+holding+" , Data Point = "+UIDataName+" , Data ID = "+diffDataID
}
if(TPDataValue.isFloat()&&LiveDataValue.isFloat()){
Float TPDataValueFloat = TPDataValue.toFloat()
Float LiveDataValueFloat = LiveDataValue.toFloat()
if(Math.abs(TPDataValueFloat-LiveDataValueFloat )>allowableDeviation){
// log.info "diffDataID =" + diffDataID
UIDataName = getDataNameInMapping(diffDataID,xmlMapping)
XPathOfDiffDataName = getXPathOfDataName(diff)
holding = getHoldingByXPath(XPathOfDiffDataName,xmlLive)
String failMessage = " Fail : Data Value is different , TP = "+TPDataValue+" , Live = "+LiveDataValue+" , Holding = "+holding+" , Data Point = "+UIDataName+" , Data ID = "+diffDataID
log.info failMessage
}
}
}
def getDataNameInMapping(String diffDataID,String xmlMapping){
def xmlDataIdMapping= new XmlParser().parse(xmlMapping)
for(it in xmlDataIdMapping.f){
String mapDataID = "${it.attribute("i")}"
// log.info "mapDataID ="+mapDataID
if(mapDataID == diffDataID){
UIDataName = "${it.attribute("udlbl")}"
return UIDataName
}
}
}
def getHoldingByXPath(String diffDataNameXPath,String xmlLive){
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(new FileInputStream(new File(xmlLive)));
XPathFactory factory = XPathFactory.newInstance();
xpath = factory.newXPath();
String OS385 = xpath.evaluate(diffDataNameXPath, doc, XPathConstants.NODE).getValue();
String holding = OS385.split(">")[2].split("<")[0]
return holding
}
def getXPathOfDataName(String diff){
String diffDataValueXPath = diff.split("at ")[2]
//log.info "The XPath of the data value is : "+diffDataValueXPath
String diffDataNameXPath = diffDataValueXPath.split("@")[0]+"@OS385"
//log.info "The XPath of the data name is : "+diffDataNameXPath
return diffDataNameXPath
}
最后的错误结果显示为:
[SoapUI] 比较TP和Live环境中API的XML response,打印多条不同的地方,比较数据时允许偏差值,同时错误信息中数据点ID通过映射表替换成UI上数据点的名字
标签:
原文地址:http://www.cnblogs.com/MasterMonkInTemple/p/4621477.html