Это сработало отлично. Я сделал опечатку, когда вставлял запросы, когда удалял фактические данные, которые я генерировал, с образцами данных. Я обновлю свой пост, чтобы данные были согласованы. Благодарю.
нь плохо знаком с кодированием и испытываю некоторые затруднения при попытке сравнить результаты запроса JDBC с результатами в ответе XML.
Я использую Groovy, а не XPATH, встроенный в SoapUI, потому что в зависимости от параметров, переданных в моем запросе, количество возвращаемых узлов может варьироваться, и мне нужно проверить все из них.
Я построил сценарий ниже, используя различные примеры, которые я нашел, так как я не смог найти ни одного примера, который собирался делать то, что я хотел. Я включил все, от тега класса, до затмения, и он не обнаружил никаких синтаксических ошибок. Однако когда я запускаю скрипт в 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 = tagInfo.@campaignSysKey
campaignName = tagInfo.@campaignName
startDate = tagInfo.@startDate
endDate = tagInfo.@endDate
campaignCode = tagInfo.@campaignCode
}
}
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, но оставил их, чтобы показать структуру ответа. Меня интересуют только узлы Campaign):
<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)