码迷,mamicode.com
首页 > 移动开发 > 详细

[SoapUI] 比较TP和Live环境下的XML Response,将代码按照功能进行拆分,根据代码所在目录自动获取Mapping文件所在路径,自动获取测试步骤名称

时间:2015-07-08 18:03:54      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

import org.custommonkey.xmlunit.*
import org.custommonkey.xmlunit.examples.*
import javax.xml.xpath.*
import javax.xml.parsers.*
import static  java.lang.Math.* 
import com.eviware.soapui.support.GroovyUtils

// The parameter allowableDeviation means the allowable deviation can be ? percent, e.g. allowableDeviation = 0.03 , the allowable deviation is 3%
def allowableDeviation = 0.03
def maxRecordFail = 20
ArrayList failMessageList = new ArrayList()
String UIDataName, ticker, XPathOfDiffDataName, failMessage

def currentStepIndex = context.currentStepIndex
String currentStepName = testRunner.testCase.getTestStepAt(currentStepIndex).name
String previousStepName = testRunner.testCase.getTestStepAt(currentStepIndex-1).name
String prePreStepName = testRunner.testCase.getTestStepAt(currentStepIndex-2).name

String dataIdMappingFile = testRunner.testCase.testSuite.project.getPropertyValue( "dataIdMappingFile" )
String testResultPath = testRunner.testCase.testSuite.project.getPropertyValue( "testResultPath" )

def xmlLive=context.expand(‘${‘+prePreStepName+‘#Response}‘ )
def xmlTP=context.expand( ‘${‘+previousStepName+‘#Response}‘ )

def groovyUtils = new GroovyUtils( context )
def xmlHolderLive = groovyUtils.getXmlHolder(xmlLive)

Diff diffTotal= new Diff(xmlLive, xmlTP)

DetailedDiff xmlDetailedDiff = new DetailedDiff(diffTotal)
def diffList = xmlDetailedDiff.getAllDifferences()
 
int diffListSize=diffList.size()
log.info "TP vs Live , different number in all: "+diffListSize

if(maxRecordFail>diffListSize||maxRecordFail<=0){
    maxRecordFail=diffListSize
}

if(diffListSize>0){
	for (i = 0; i < diffListSize; i++) {
	    String diff=diffList.get(i)
//	    log.info " Difference  : "+diff
	 
	    if(diff.contains("holding")){
	        failMessage = " Holding is different , TP = "+diff.split("holding‘>")[1].split("<")[0]+"  , "+ "Live = "+diff.split("holding‘>")[2].split("<")[0]
	        failMessageList.add(failMessage)
	    }
	 
	    if(diff.contains("PA001")){
	        failMessage = " Portfolio Id is different , TP = "+diff.split("‘")[1]+"  , "+ "Live = "+diff.split("‘")[3]
	        failMessageList.add(failMessage)
	    }
	     
	    String diffDataID = diff.split("@")[2].trim()
	    String TPDataValue = diff.split("‘")[1]
	    String LiveDataValue =diff.split("‘")[3]
	 
	    if(((TPDataValue=="")&&(LiveDataValue!=""))||((TPDataValue!="")&&(LiveDataValue==""))){
	        addFailMessageAboutDataValueNull(failMessageList, TPDataValue,LiveDataValue, diff, diffDataID, xmlHolderLive, dataIdMappingFile)
	    }
	 
	 	if(TPDataValue.isFloat()&&LiveDataValue.isFloat()){
			addFailMessageAboutDataValueDiff(failMessageList, TPDataValue,LiveDataValue, diff, diffDataID, xmlHolderLive, dataIdMappingFile, allowableDeviation)
	    }
	
	    if(failMessageList.size()==maxRecordFail){
	    		break
	    }
	
	    if((i == (diffListSize-1))&&(failMessageList.size()<maxRecordFail)){
	    		maxRecordFail = failMessageList.size()
	    }
	}
}

if(maxRecordFail>0){
	def testResultFile = new File(testResultPath+ currentStepName+".txt")  
     if (testResultFile.exists()) {
		 testResultFile.delete()
     }
	for(j=0; j<maxRecordFail; j++){
		String currentFailMessage = failMessageList.get(j)
		log.error currentFailMessage
	     testResultFile.append(currentFailMessage+"\n" )
	}
	assert false,failMessageList.get(0)
}

def getDataNameInMapping(String diffDataID,String dataIdMappingFile){
    def xmlDataIdMapping= new XmlParser().parse(dataIdMappingFile)
    for(it in xmlDataIdMapping.f){
        String mapDataID =  "${it.attribute("i")}"
//       log.info "mapDataID ="+mapDataID
          if(mapDataID == diffDataID){
             UIDataName =  "${it.attribute("udlbl")}"
             return UIDataName
          }
    }
}
 
def getTickerByXPath(String XPathOfDiffDataName,Object xmlHolderLive){
    String ticker =  xmlHolderLive.getNodeValue(XPathOfDiffDataName)
    return ticker
}
 
def getXPathOfDataName(String diff){
    String diffDataValueXPath = diff.split("at ")[2]
    String diffDataNameXPath = diffDataValueXPath.split("@")[0]+"@OS385"
    return diffDataNameXPath
}

def addFailMessageAboutDataValueDiff(ArrayList failMessageList, String TPDataValue, String LiveDataValue, String diff, String diffDataID, Object xmlHolderLive,  String dataIdMappingFile, Float allowableDeviation){
	 Float TPDataValueFloat = TPDataValue.toFloat()
      Float LiveDataValueFloat = LiveDataValue.toFloat()

	 Float benchmark = LiveDataValueFloat
	 if (LiveDataValueFloat ==0){
		benchmark = TPDataValueFloat
	}
	   
	if(Math.abs((LiveDataValueFloat-TPDataValueFloat )/benchmark)>allowableDeviation){
//		log.info "diffDataID =" + diffDataID
		UIDataName = getDataNameInMapping(diffDataID,dataIdMappingFile)
             
		XPathOfDiffDataName = getXPathOfDataName(diff)
		ticker =getTickerByXPath(XPathOfDiffDataName,xmlHolderLive)
             
		failMessage = " Data Value is different , TP = "+TPDataValue+" , Live = "+LiveDataValue+" , Ticker = "+ticker+" , Data Point = "+UIDataName+" , Data ID = "+diffDataID
		failMessageList.add(failMessage)
	 }
}

def addFailMessageAboutDataValueNull(ArrayList failMessageList, String TPDataValue, String LiveDataValue, String diff, String diffDataID, Object xmlHolderLive,  String dataIdMappingFile){
	  UIDataName = getDataNameInMapping(diffDataID,dataIdMappingFile)
         
        XPathOfDiffDataName = getXPathOfDataName(diff)
        ticker =getTickerByXPath(XPathOfDiffDataName,xmlHolderLive)
         
       failMessage = " Data Value is different , TP = "+TPDataValue+" , Live = "+LiveDataValue+" , Ticker = "+ticker+" , Data Point = "+UIDataName+" , Data ID = "+diffDataID
       failMessageList.add(failMessage)
}

  

[SoapUI] 比较TP和Live环境下的XML Response,将代码按照功能进行拆分,根据代码所在目录自动获取Mapping文件所在路径,自动获取测试步骤名称

标签:

原文地址:http://www.cnblogs.com/MasterMonkInTemple/p/4630622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!