Это сработало отлично. Я сделал опечатку, когда вставлял запросы, когда удалял фактические данные, которые я генерировал, с образцами данных. Я обновлю свой пост, чтобы данные были согласованы. Благодарю.

нь плохо знаком с кодированием и испытываю некоторые затруднения при попытке сравнить результаты запроса 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)

Ответы на вопрос(1)

Ваш ответ на вопрос