Forum Discussion

roja1's avatar
roja1
Contributor
5 years ago

Unable to compare two json responses using groovy

Hi,

 

I'm reading expected output from an excel file and comapring that response to the soapUI response. Even though both are same I'm getting failed as the response.Expected output is in 4th column in the excel file. Below is the script I have used.

import com.eviware.soapui.model.testsuite.Assertable.AssertionStatus
import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep
import com.eviware.soapui.support.XmlHolder
import jxl.*
import jxl.write.*
def count=0,i=1,j=1
def inputFileName,outputFileName
def testStep = testRunner.testCase.testSuite
if (testStep.getPropertyCount() > 0){
for (prop in testStep.getPropertyList()){
if(prop.getName()=="inputFileName")
{
inputFileName=prop.getValue()
}
else if(prop.getName()=="outputFileName")
{
outputFileName=prop.getValue()
}
}
}
Workbook inputWB = Workbook.getWorkbook(new File(inputFileName))
Sheet inputSheet = inputWB.getSheet(0)
no_of_rows= inputSheet.getRows().toInteger()

Workbook existingInputWB=Workbook.getWorkbook(new File(inputFileName))
WritableWorkbook outputWB=Workbook.createWorkbook(new File(outputFileName),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 RestTestRequestStep) {
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)
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 RestTestRequestStep) {
Cell f=inputSheet.getCell(0,j)
step_name=f.getContents()
log.info step_name
log.info step1.name
Cell f1=inputSheet.getCell(3,j)
def String step_response=f1.getContents()
log.info "before replacing"+step_response
step_response=step_response.replaceAll(" ","")
log.info "before parsing"+step_response
def step_response_parsed=new groovy.json.JsonSlurper().parseText(step_response)
log.info "from excel "+step_response
def String response = context.expand(step1.getPropertyValue('Response'))
response=response.replaceAll(" ","")
def response_parsed=new groovy.json.JsonSlurper().parseText(response)
log.info "from soapui"+response
if(step1.name==step_name){
if(step_response==response)
{
log.info "Passed"
jxl.write.Label status = new jxl.write.Label(1,j ,"Passed")
sheet_writable.addCell(status)
}
else
{
log.info "Failed"
jxl.write.Label status = new jxl.write.Label(1,j ,"Failed")
sheet_writable.addCell(status)
}
}
j=j+1
}
}
outputWB.write()
outputWB.close()
existingInputWB.close()

 

Please help me on this. Appreciate your help in advance.

No RepliesBe the first to reply