Note:
1. While comparison, there are some dynamic parameters. e.g. subscription id, purchase-date, expiry-date. So I add them in ignore list.
Issue:
1. Able to ignore xml elements like purchase-date, expiry-date while comparison. Which is fine.
But not able to ignore attributes. e.g. for subscription, 'id' is attribute. And not able to ignore it.
So question is hot to ignore attribute values while xml comparison.
******This response is kept in one of the external file. This is my base file. And I compare current response against this file content*************
3
2
2.37
2017-04-18T14:12:39+05:30
2017-04-25T23:59:59+05:30
ReservedPackage
B2B_Google
B2B_Google
************** This is current response ***************
3
2
2.37
2017-04-19T14:12:39+06:30
2017-04-26T23:59:59+06:30
ReservedPackage
B2B_Google
B2B_Google
***********My Groovy Utility **************
import groovy.xml.XmlUtil
import org.custommonkey.xmlunit.*
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def xmlParser = new XmlParser()
def writer = new StringWriter()
def writer1 = new StringWriter()
def request, response, holder, xml, p, p1, result, xmlDiff
def prefix = context.expand('${#Project#BASE_DIR}')
request = xmlParser.parse("${prefix}/API/Responses/Response_SelfFullSubs_OneSub.xml")
//request = xmlParser.parse("Responses/Response_MonetaryRefund.xml")
request = XmlUtil.serialize(request)
xml1 = xmlParser.parseText(request)
//This takes response from current API execution
holder = groovyUtils.getXmlHolder("SelfcareFullSubscriptions#Response")
response = holder.getXml()
xml = xmlParser.parseText(response)
//This parameters will be ignored while comparison
def elelist = ["id", "purchase-date", "expiry-date"]
for (i in 0..(elelist.size())-1)
{
varelement = elelist[i].toString()
p = xml1.'**'."$varelement"
p.each{ it.value = "This element is intentionally ignored for xml comparison" }
p1 = xml.'**'."$varelement"
p1.each{ it.value = "This element is intentionally ignored for xml comparison" }
}
new XmlNodePrinter(new PrintWriter(writer)).print(xml1)
request = writer.toString()
request = xmlParser.parseText(request)
request = XmlUtil.serialize(request)
log.info "...request... : " + request
new XmlNodePrinter(new PrintWriter(writer1)).print(xml)
result = writer1.toString()
result = xmlParser.parseText(result)
result = XmlUtil.serialize(result)
log.info "...result... : " + result
XMLUnit.setNormalizeWhitespace(true)
XMLUnit.setIgnoreWhitespace(true)
XMLUnit.setIgnoreComments(true)
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true)
XMLUnit.setNormalizeWhitespace(true)
xmlDiff = new Diff(request, result)
try{
assert xmlDiff.identical()
} catch (Error er){
err = er.message
err = err.substring(err.indexOf('['))
log.info err
testRunner.fail("Failed comparison" + err)
}
*********** End of Groovy Utility *****************