2011-09-20 5 views
3

저는 SoapUI를 처음 사용합니다. 서로에 따라 몇 가지 TestStep이 있습니다. 그래서 XML-Slurper를 사용하여 "deliverData"라는 응답에서 Data를 읽고 TestCase의 속성에 저장했습니다.Groovy로 SoapUI 요청 변경

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

지금 내가 http://groovy.codehaus.org/Updating+XML+with+XmlSlurper을 읽을이

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

같은 다른 요청에 대한 pollingID을 사용하고 싶지만 내가 요청으로 조작 된 데이터를 저장하는 방법을 표시되지 않는 이유는 무엇입니까? 나는 업데이트하는 방법조차 확신하지 못한다. 희망 누군가는 저를 도울 수있다, 나는 진짜로 원본을 사용하는 것을 좋아하지 않는다, 나는 일반적인 자바 코딩을 선호한다 : 고맙습니다! john

답변 : 이것은 어떻게 작동 하나, xmlslurper에서는 더 이상 작동하지 않습니다.

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

답변

1

아래의 코드는 문제를 정렬하는 데 도움이 될 수 있습니다.

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

당신은 속성이 pollingID이고 그 속성 값을 아래의 다른 SOAP 요청에 사용하십시오.

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

해당 속성에서 데이터를 가져올 수 있으며 테스트 사례 전체에서 [속성]을 사용할 수 있습니다.

테스트 사례간에 데이터를 공유하려면 테스트 사례 속성으로 저장하고 테스트 사례에서는 ${#TestSuite#Property.name}과 같이 사용하십시오.