Excel 使用groovy脚本比较两个soap响应

Excel 使用groovy脚本比较两个soap响应,excel,soapui,Excel,Soapui,我正在使用SoapUI免费版本。我需要比较soap响应。我希望Excel文件中有响应。我想将预期响应与SoapUI的实际响应进行比较,在比较时,我需要使用groovy脚本忽略一些字段。我可以将Excel中的数据读入一个字符串,并将SoapUI中的响应读入另一个字符串。我需要一些帮助来比较这两个值。我没有得到任何适当的参考来比较。我没有任何代码进行比较。请帮我做这个 import static java.nio.charset.StandardCharsets.*; import java.lan

我正在使用SoapUI免费版本。我需要比较soap响应。我希望Excel文件中有响应。我想将预期响应与SoapUI的实际响应进行比较,在比较时,我需要使用groovy脚本忽略一些字段。我可以将Excel中的数据读入一个字符串,并将SoapUI中的响应读入另一个字符串。我需要一些帮助来比较这两个值。我没有得到任何适当的参考来比较。我没有任何代码进行比较。请帮我做这个

import static java.nio.charset.StandardCharsets.*;
import java.lang.*;
import com.eviware.soapui.model.testsuite.Assertable.AssertionStatus
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep
import com.eviware.soapui.support.XmlHolder
import jxl.*
import jxl.write.*
import org.skyscreamer.jsonassert.JSONAssert
import org.skyscreamer.jsonassert.JSONCompareMode
import groovy.json.JsonSlurper
/*XMLUnit.setIgnoreWhitespace(true)
XMLUnit.setIgnoreComments(true)
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true)
XMLUnit.setNormalizeWhitespace(true)*/
def count=0,i=1,j=1,k=1
def inputFileName,outputFileName
def inputFile = testRunner.testCase.testSuite.getPropertyValue("inputFileName")
def outputFile = testRunner.testCase.testSuite.getPropertyValue("outputFileName")
def testStep = testRunner.testCase.testSteps["Properties"]

Workbook inputWB = Workbook.getWorkbook(new File(inputFile)) 
Sheet inputSheet = inputWB.getSheet(0)
no_of_rows= inputSheet.getRows().toInteger() 

Workbook existingInputWB=Workbook.getWorkbook(new File(inputFile))
WritableWorkbook outputWB=Workbook.createWorkbook(new File(outputFile),existingInputWB)

testCaseName=testRunner.testCase.name
outputWB.createSheet(testCaseName,2)
WritableSheet sheet_writable = outputWB.getSheet(testCaseName)
jxl.write.Label testStepCell =  new jxl.write.Label(0,0 ,"Test Step")
jxl.write.Label reqUrlCell =  new jxl.write.Label(2,0 ,"Request URL")
jxl.write.Label reqPayloadCell =  new jxl.write.Label(3,0 ,"Request Payload")
jxl.write.Label responseCell =  new jxl.write.Label(4,0 ,"Response")
jxl.write.Label statusCell =  new jxl.write.Label(1,0 ,"Status")
jxl.write.Label reasonCell =  new jxl.write.Label(5,0 ,"Reason")
sheet_writable.addCell(testStepCell)
sheet_writable.addCell(reqUrlCell)
sheet_writable.addCell(reqPayloadCell)
sheet_writable.addCell(responseCell)
sheet_writable.addCell(statusCell)
sheet_writable.addCell(reasonCell)
(0..context.testCase.testStepCount-1).each{
    def step = context.testCase.testStepList[it]
    if ( step instanceof WsdlTestRequestStep) {
        jxl.write.Label stepName =  new jxl.write.Label(0,i ,step.name)
        sheet_writable.addCell(stepName)
        def tr=testRunner.testCase.getTestStepByName(step.name)
          def String endPointUrl= tr.getHttpRequest().getResponse().getURL()
        jxl.write.Label reqUrl =  new jxl.write.Label(2,i ,endPointUrl)
        sheet_writable.addCell(reqUrl)
        def payload = context.expand(step.getPropertyValue('Request'))
        jxl.write.Label reqPayload =  new jxl.write.Label(3,i ,payload)
        sheet_writable.addCell(reqPayload)
         def response = context.expand(step.getPropertyValue('Response'))
        jxl.write.Label reqResponse =  new jxl.write.Label(4,i ,response)
        sheet_writable.addCell(reqResponse)
        count=count+1
        i=i+1
    }
}

(0..context.testCase.testStepCount-1).each{
    def step1 = context.testCase.testStepList[it]
    if ( step1 instanceof WsdlTestRequestStep) {
        for(j=1;j<no_of_rows;j++){
            Cell f=inputSheet.getCell(0,j)
             step_name=f.getContents()
             Cell f1=inputSheet.getCell(3,j)
             def String step_response=f1.getContents()
             step_response=step_response.replaceAll(" ","")
             def String response = context.expand(step1.getPropertyValue('Response')) 
             log.info response
             response=response.replaceAll(" ","") 
             /*if(step1.name==step_name&step1.name!=null){

             }*/

        }
    }
}
outputWB.write()
outputWB.close()
existingInputWB.close()
导入静态java.nio.charset.StandardCharsets.*;
导入java.lang.*;
导入com.eviware.soapui.model.testsuite.Assertable.AssertionStatus
导入com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep
导入com.eviware.soapui.support.xmlcholder
导入jxl*
导入jxl.write*
导入org.skyshrayer.jsonassert.jsonassert
导入org.skyshrayer.jsonassert.JSONCompareMode
导入groovy.json.JsonSlurper
/*XMLUnit.setIgnoreWhitespace(true)
XMLUnit.setIgnoreComments(true)
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(真)
setNormalizeWhitespace(true)*/
def计数=0,i=1,j=1,k=1
def inputFileName,outputFileName
def inputFile=testRunner.testCase.testSuite.getPropertyValue(“inputFileName”)
def outputFile=testRunner.testCase.testSuite.getPropertyValue(“outputFileName”)
def testStep=testRunner.testCase.testSteps[“属性”]
工作簿inputWB=Workbook.getWorkbook(新文件(inputFile))
工作表inputSheet=inputWB.getSheet(0)
行的数量=inputSheet.getRows().toInteger()
工作簿existingInputWB=Workbook.getWorkbook(新文件(inputFile))
WritableWorkbook outputWB=工作簿.createWorkbook(新文件(outputFile),现有InputWB)
testCaseName=testRunner.testCase.name
createSheet(testCaseName,2)
WritableSheet sheet\u writable=outputWB.getSheet(testCaseName)
jxl.write.Label testStepCell=新的jxl.write.Label(0,0,“测试步骤”)
jxl.write.Label reqUrlCell=新的jxl.write.Label(2,0,“请求URL”)
jxl.write.Label reqPayloadCell=新的jxl.write.Label(3,0,“请求有效负载”)
jxl.write.Label responseCell=新的jxl.write.Label(4,0,“响应”)
jxl.write.Label statusCell=新的jxl.write.Label(1,0,“状态”)
jxl.write.Label reasonCell=新的jxl.write.Label(5,0,“原因”)
工作表\u可写。添加单元格(testStepCell)
工作表\u可写。添加单元格(reqUrlCell)
工作表\可写。添加单元格(reqPayloadCell)
工作表\可写。添加单元格(responseCell)
工作表\可写。添加单元格(statusCell)
工作表\可写。添加单元格(reasonCell)
(0..context.testCase.testStepCount-1)。每个{
def step=context.testCase.testStepList[it]
if(WsdlTestRequestStep的步骤实例){
jxl.write.Label stepName=新的jxl.write.Label(0,i,step.name)
工作表\可写。添加单元格(步骤名称)
def tr=testRunner.testCase.getTestStepByName(步骤名称)
def String endPointUrl=tr.getHttpRequest().getResponse().getURL()
jxl.write.Label reqUrl=新的jxl.write.Label(2,i,endPointUrl)
工作表\u可写。添加单元格(reqUrl)
def payload=context.expand(步骤.getPropertyValue('Request'))
jxl.write.Label reqPayload=新的jxl.write.Label(3,i,有效载荷)
工作表\u可写。添加单元格(请求有效负载)
def response=context.expand(步骤.getPropertyValue('response'))
jxl.write.Label reqResponse=新的jxl.write.Label(4,i,响应)
工作表\可写。添加单元格(reqResponse)
计数=计数+1
i=i+1
}
}
(0..context.testCase.testStepCount-1)。每个{
def step1=context.testCase.testStepList[it]
if(WsdlTestRequestStep的步骤1实例){

对于(j=1;j有三种主要方法

1) 如果要比较XML和XML,可以将XMLUnit库与Groovy结合使用

2) 您还可以使用Groovy的XMLSlurper解析响应XML,并使用GPath导航到特定元素并获取它们的值:

def responseXML = context.expand('${mySoapRequestStep#Response}')
def Envelope = new XmlSlurper().parseText(responseXML)
log.info Envelope.Body.someNode.nodeIWantValueFor
3) 第三个选项是在SOAP请求步骤之后创建属性传输步骤,并使用XPath将值存储在属性中。步骤中使用的XPath表达式的格式如下:

//*[local-name()='someNode']/*[local-name()='nodeIWantValueFor']/text()

在属性传输步骤中,指定值的保存位置,例如,在名为nodeIWantValueFor的testCaseProperty中。

我添加了用于从excel读取预期响应和从soapUI读取实际响应的代码。但无法继续比较响应。您必须提供一个要保存的数据值示例compare@user12435402看起来您有两个选项,您可以在代码中进行比较,如
如果(this.equals(that))
并将结果写入单元格,或者如果您将实际结果写入预期结果旁边的电子表格,您可以在第三个单元格中编写公式,在单元格值之间进行测试,例如
=if(A1=B1,“通过”,“失败”)
您可以尝试此方法,但它会产生完全不同的效果,,,如果您需要详细信息,请逐个节点执行此操作,或者使用/*使用getNodeValues函数,该函数将获取部分XML中的所有节点
//*[local-name()='someNode']/*[local-name()='nodeIWantValueFor']/text()