Я очень новичок в кодировании, и у меня возникают проблемы при попытке сравнить результаты запроса JDBC с результатами в ответе XML.Сравнение ответа JDBC на ответ XML, где количество узлов меняется и порядок может меняться?
Я использую groovy, а не XPATH, встроенный в SoapUI, потому что на основе параметров, переданных в моем запросе, количество возвращаемых узлов может меняться, и мне нужно проверить их все.
Я построил сценарий ниже, используя различные примеры, которые я нашел, так как я не мог найти один пример, который собирался делать то, что я хотел. Я включил все из тега класса в eclipse и не обнаружил никаких синтаксических ошибок. Однако, когда я запускаю скрипт в SoapUI, когда он достигает части для анализа ответа xml, ничего не строится. Тогда мои утверждения и утверждения терпят неудачу, конечно. Данные JDBC построены просто отлично.
Заранее благодарим за любую помощь.
import com.eviware.soapui.support.XmlHolder
import groovy.xml.XmlUtil
import groovy.util.XmlSlurper
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
class Model {
def campaignSysKey
def campaignName
def startDate
def endDate
def campaignCode
def buildJdbcData(row) {
row.with {
campaignSysKey = UPGRADETYPE
campaignName = SOURCEDESC
startDate = STARTDATE
endDate = ENDDATE
campaignCode = SOURCECODE
}
}
def buildXMLData(tagInfo) {
campaignSysKey = [email protected]
campaignName = [email protected]
startDate = [email protected]
endDate = [email protected]
campaignCode = [email protected]
}
}
def jdbcResponse = context.expand('${Validation#ResponseAsXml}')
def xmlResponse = context.expand('${OfferHistoryRequest#Response}')
def results = new XmlSlurper().parseText(jdbcResponse)
def jdbcDataObjects = []
results.ResultSet.Row.each { row ->
jdbcDataObjects.add(new Model().buildJdbcData(row))
}
def arrayOfTagInfo = new XmlSlurper().parseText(xmlResponse)
def xmlDataObjects = []
arrayOfTagInfo.TagInfo.each { tagInfo ->
xmlDataObjects.add(new Model().buildXMLData(tagInfo))
}
log.info "${jdbcDataObjects.size()}"
log.info "${xmlDataObjects.size()}"
if (jdbcDataObjects.size() != xmlDataObjects.size()) {
log.info("Jdbc resultset size is : ${jdbcDataObjects.size()} and XML result size is : ${xmlDataObjects.size()}")
}
assert jdbcDataObjects == xmlDataObjects, "Comparison of JDBC and XML data is failed"
JDBC Ответ Структура:
<Results>
<ResultSet fetchSize="0">
<Row rowNumber="1">
<UPGRADETYPE>1</UPGRADETYPE>
<SOURCEDESC>Desc 1</SOURCEDESC>
<STARTDATE>2015-01-01</STARTDATE>
<ENDDATE>2017-12-31</ENDDATE>
<SOURCECODE>ABC123</SOURCECODE>
</Row>
<Row rowNumber="2">
<UPGRADETYPE>2</UPGRADETYPE>
<SOURCEDESC>Desc 2</SOURCEDESC>
<STARTDATE>2015-01-01</STARTDATE>
<ENDDATE>2017-12-31</ENDDATE>
<SOURCECODE>XYZ987</SOURCECODE>
</Row>
</ResultSet>
</Results>
XML-ответ (Удалены данные между тегами Holding намеренно, но оставил их, чтобы показать структуру ответа я озабочен только с узлами кампании.):
<soap:Envelope xmlns:soap="http://sample.org">
<soap:Body>
<TXLife xmlns="http://sample.org">
<TXLifeResponse>
<TransRefGUID>123456</TransRefGUID>
<TransType tc="999"/>
<TransSubType tc="9909"/>
<BusinessService DataRep="VIEW"/>
<TransExeDate>2017-01-19-05:00</TransExeDate>
<TransExeTime>09:19:30.668-05:00</TransExeTime>
<StartRecord>1</StartRecord>
<TransResult>
<ResultCode tc="1"/>
<RecordsFound>2</RecordsFound>
</TransResult>
<OLifE>
<Holding id="Holding_B1234567">
</Holding>
<Campaign id="Campaign_B1234567_1" AppliesToCoverageID="Coverage_B1234567_1">
<CampaignSysKey>1</CampaignSysKey>
<CampaignName>Desc 1</CampaignName>
<StartDate>2015-01-01</StartDate>
<EndDate>2017-12-31</EndDate>
<CampaignCode>ABC123</CampaignCode>
</Campaign>
<Campaign id="Campaign_B1234567_2" AppliesToCoverageID="Coverage_B1234567_2">
<CampaignSysKey>2</CampaignSysKey>
<CampaignName>Desc 2</CampaignName>
<StartDate>2015-01-01</StartDate>
<EndDate>2017-12-31</EndDate>
<CampaignCode>XYZ987</CampaignCode>
</Campaign>
</OLifE>
</TXLifeResponse>
</TXLife>
</soap:Body>
</soap:Envelope>
Ошибка из SoapUI Вход:
Thu Jan 19 10:00:31 EST 2017:ERROR:java.lang.AssertionError: Comparison of JDBC and XML data is failed. Expression: (jdbcDataObjects == xmlDataObjects). Values: jdbcDataObjects = [X34143, X33582], xmlDataObjects = []
java.lang.AssertionError: Comparison of JDBC and XML data is failed. Expression: (jdbcDataObjects == xmlDataObjects). Values: jdbcDataObjects = [X34143, X33582], xmlDataObjects = []
at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:404)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:650)
at Script5.run(Script5.groovy:67)
at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:92)
at com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SoapUIProGroovyScriptEngineFactory.java:79)
at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:156)
at com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Вы должны показать данные, напоминающих точный формат как ответ, который вы хотели бы сравнить. – Rao
В противном случае вы можете пройти через [это] (http://stackoverflow.com/questions/31472381/dynamically-compare-rest-xml-json-response-and-jdbc-using-groovy-array-in-soapui/35706976 # 35706976) задайте вопрос еще раз, чтобы лучше понять, поскольку в нем также содержатся образцы данных. Но сценарий может меняться в зависимости от данных. – Rao
Я посмотрел на этот вопрос, это на самом деле то, что я смоделировал из моего сценария, я просто не мог найти его снова для ссылки в моем оригинальном посте. Я не знаю, является ли проблема тем, что скрипт сравнивает ответ JSON, и я хочу использовать XML. Если я перекодирую значения в переменную xmlResponse, я могу проверить ее успешно. Проблема в том, что я пытаюсь сделать это ссылкой на фактический ответ XML. Я обновил свое исходное сообщение с помощью структуры JDBC и ответа XML. – JesseN