Поменяй SoapUI Запрос с Groovy - PullRequest
       19

Поменяй SoapUI Запрос с Groovy

3 голосов
/ 20 сентября 2011

Я новичок в SoapUI. У меня есть несколько TestSteps в зависимости друг от друга. Поэтому я использовал XML-Slurper для чтения данных из ответа «deliveryData» и сохранял их в свойствах моего TestCase.

def xml = new XmlSlurper().parseText(response)
def response = context.expand( '${deliverData#Response}' )
def ID = xml.Body.DeliverDataResponse."pollingId";  
testRunner.testCase.setPropertyValue("pollingID",ID.text());

Теперь я хочу использовать pollingID для другого запроса, подобного этому

   <soapenv:Body>
      <DeliverRequest>?</DeliverRequest>
   </soapenv:Body>

Я прочитал http://groovy.codehaus.org/Updating+XML+with+XmlSlurper, но я не вижу, как сохранить обработанные данные в запросе? Я даже не уверен, как обновить. Надеюсь, что кто-нибудь может мне помочь, мне действительно не нравится работать со скриптами, я предпочитаю нормальное кодирование Java :) Большое спасибо! джон

Ответ: Вот как это работает, но больше не с xmlslurper.

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder( "DeliverStatus#Request" );
holder.setNodeValue( "//DeliverRequest", "200" );
holder.updateProperty();

Ответы [ 2 ]

2 голосов
/ 26 июля 2012

Приведенный ниже код может помочь вам решить вашу проблему.

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context ) 
// get XmlHolder for request message def

holder = groovyUtils.getXmlHolder( "CelsiusToFahrenheit#Request" )

holder1 = groovyUtils.getXmlHolder( "FahrenheitToCelsius#Request" )

// Pass value to request node
holder["//tem:Celsius"] = "100"

// write updated request back to teststep
holder.updateProperty()

// Run the Request
testRunner.runTestStepByName("CelsiusToFahrenheit")

// Get the response value in a variable
def response = context.expand( '${CelsiusToFahrenheit#Response#declare namespace ns1=\'http://tempuri.org/\'; //ns1:CelsiusToFahrenheitResponse[1]/ns1:CelsiusToFahrenheitResult[1]}' )
log.info(response)


// Pass the new value to another request
holder1["//tem:Fahrenheit"] = response
holder1.updateProperty()

// run the test request
testRunner.runTestStepByName("FahrenheitToCelsius")

def response1 = context.expand( '${FahrenheitToCelsius#Response#declare namespace ns1=\'http://tempuri.org/\'; //ns1:FahrenheitToCelsiusResponse[1]/ns1:FahrenheitToCelsiusResult[1]}' )
log.info(response1)
0 голосов
/ 20 сентября 2013

У вас есть свойство pollingID, и вы просто используете это значение в другом запросе SOAP, как показано ниже.

<soapenv:Body>
    <DeliverRequest>${Properties#pollingID}</DeliverRequest>               
</soapenv:Body>

он может извлекать данные из этого свойства, и вы можете использовать его [свойство] на протяжении всего теста.

Если вы хотите обмениваться данными между тестовыми примерами, сохраните их как свойство набора тестов и используйте их как ${#TestSuite#Property.name} в любом тестовом примере.

...