2017-11-22 9 views
1

SoapUI.groovy 스크립트 단계와 SOAP 요청 단계에서 두 가지 테스트 단계가 있습니다. 이 같은 요청의 몸이 모습입니다 : 나는 (이 예 str = "namesurnameagestatus"에) 몸의 모든 노드를 포함 그루비 스크립트 문자열을 생성 할SoapUI Groovy Script에서 XML의 자식 노드 자동으로 가져 오기

<int:user> 
    <name>James</name> 
    <surname>Brown</surname> 
    <age>100</age> 
    <status>active </status> 
</int:User> 

; 및 속성의 값을 갖는 스트링; (이 예에서는 str = "JamesBrown100active"); 수동으로 첫 번째 문자열을 만들어야합니다. 두 번째 문자열 난이 사용

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
    def holder = groovyUtils.getXmlHolder(step.getPropertyValue("request")) 
    holder.getNodeValue("//name"); //for the name attribute 

내가 루프 내에서 자동으로이 였는지를하고 싶어. 예를 들어

이 같은

object = Get Node Values of Body 
count = object.size(); 
// some loop 
for(count times){ 
    object.get(i). get value; 
    //other code 
} 

뭔가. 어떤 해결책? 나는 다른 해결책들에 대해서 깊이 생각해 봤지만 정확한 코드/행동을 찾을 수 없었다.

+2

혼란 당신의 질문은 당신이 그것을 단순화하십시오 유스 케이스입니다 당신이 달성하기 위해 무엇을하려고하는 – Rao

+0

@Rao 나는의 노드를 얻으려면 더를 단순화하는 방법에 대해 설명합니다.???? 요청의 본문을 자동으로 만듭니다. 모든 자식 노드의 값을 배열 또는지도 또는 뭔가. 이 [link] (https://www.soapui.org/scripting-properties/tips-tricks.html#3-1-Iterate-nodes) .tried holder.getNodeValues ​​("// body") 메소드를 발견했습니다. null 오브젝트를 1 개만 돌려줍니다. –

답변

1

Gaurav khurana의 도움으로 해결책을 찾았습니다.

내가 몸 containter.I 내의 모든 요소 값을 얻으려면

이 작업을 수행 :

def gu=new com.eviware.soapui.support.GroovyUtils(context) 
    def res = context.expand('${First Step#request}') 
    //log.info res 
    def holder = gu.getXmlHolder(res) 
    def val=holder.getNodeValues("//soap:Body/*") 
    def allvalues="" 
    for(values in val) 
    { 
     allvalues=allvalues+values 
    } 
    log.info allvalues 

할이 경우 "이름 성 연령 상태"에있는 요소의 이름을 (얻을 수있는 방법 folowing :

def gal = holder.getDomNodes("//" + space + "/*"); 

    for (values in gal) { 
    log.info(values.getTagName()); 
    } 
2

사용 케이스는 이름, 성 등 모든 속성과 그 값을 결합한 것입니다.

그런 다음 실제 = 예상했는지 확인하려고합니다 !!

는 그루비 코드가 함께 모든 값을 줄 것이다 아래의 샘플 XML이

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <ConversionRateResponse xmlns="http://www.webserviceX.NET/"> 
     <name>James</name> 
    <surname>Brown</surname> 
    <age>100</age> 
    <status>active </status> 
     </ConversionRateResponse> 
    </soap:Body> 
</soap:Envelope> 

아래 가정 할 수 있습니다. 그냥 단계의 이름으로 "시작"을 대체

def gu=new com.eviware.soapui.support.GroovyUtils(context) 
def res = context.expand('${First Step#response}') 
//log.info res 
def holder = gu.getXmlHolder(res) 
def val=holder.getNodeValues("//*[local-name()='ConversionRateResponse']/*") 
def allvalues="" 
for(values in val) 
{ 
    allvalues=allvalues+values 
} 
log.info allvalues 

위의 코드의 출력 속성 인 경우

Sat Nov 25 15:57:31 IST 2017:INFO:JamesBrown100active 

내일로 검증의 올바른 방법으로하지 않습니다이 유의하십시오이다 전달되지 않았거나 선택 사항이면 스크립트가 실패합니다.

+0

답장을 보내 주셔서 감사합니다. 같은 일을 시도했지만 문제는 내 결과가 null이라는 것입니다. getNodeValues ​​다음에 배열의 크기는 0입니다. –

+0

문제가 해결되었습니다. 고맙습니다. 몸체 컨테이너에서 모든 노드 값을 가져 오려고했습니다. 내 요청에 대한 코드를 변경했습니다. body에서 모든 요소를 ​​원하므로 def val = holder.getNodeValues ​​("// soap : Body/*")를 사용합니다. –

+0

오시 도움이되면 답변을 upvote 수 있습니다 :) –