Forum Discussion

roja1's avatar
roja1
Contributor
6 years ago

compare two soap responses using groovy

Hi avidCoder / nmrao ,

 

I have expected response in an excel file. I want to compare the expected response with the actual response from soapUI and while comparing I need to ignore some fields using groovy script. Please help me with this.

 

Thank you in advance

17 Replies

    • roja1's avatar
      roja1
      Contributor

      Hi,

       

      I have expected responses of all the test steps in an excel and I'm comparing the soapUI response with the expected response . So as per my requirement I'm reading expected response from excel

    • roja1's avatar
      roja1
      Contributor

      Hi,

       

      Sample data:

      <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
      <env:Header/>
      <env:Body>
      <env:Fault>
      <env:Code>
      <env:Value>env:Receiver</env:Value>
      </env:Code>
      <env:Reason>
      <env:Text xml:lang="en">InvalidRequest: Token not found!</env:Text>
      </env:Reason>
      </env:Fault>
      </env:Body>
      </env:Envelope>

      Below is the code which I have used for reading expected response from excel and response from SoapUI. After reading I'm unable to proceed further for comparision

      Code:

      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()

       

      • nmrao's avatar
        nmrao
        Community Hero
        This is repeated post you are posting without use.

        Can't read your long code.

        Who can imagine what is in excel?
        Why can't the response be in a file which will be simple to read?
        At least provide expected data which you are comparing?

        You were talking about ignoring elements, please mention the same.