2017-11-22 13 views
1

私はSoapUI.groovyスクリプトステップとSOAP要求ステップで2つのテストステップを実行しました。これは、要求の体はどのように見えるかです:私は(この例ではstr = "namesurnameagestatus")身体のすべてのノードが含まれていますグルーヴィースクリプト内の文字列を生成したいSoapUI GroovyスクリプトでXMLの子ノードを自動的に取得

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

。属性の値を持つ文字列。 (この例ではstr = "JamesBrown100active")。私は最初の文字列を手動で作成する必要があります。 2番目の文字列のために私はこれを使用します。

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

など

私はループ内で自動的にこのproccessをしたいです。例えば

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私はのノードを取得したい多くのことを簡素化する方法について説明します。????リクエストのボディを自動的に作成します。すべての子ノードの値を配列またはマップまたは何か。私はこの[リンク](https://www.soapui.org/scripting-properties/tips-tricks.html#3-1-Iterate-nodes).triedholder.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

あなたのユースケースは、名前、姓などのすべての属性とそれらの値を組み合わせます。

次に、実際に=期待されているかどうかチェックしようとします。

は以下グルービーコードが一緒にすべての値を与える

<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> 

次のサンプルXMLであると仮定します。ただ、上記のコードの出力は

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

ある

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 

あなたのステップの名前で、「最初のステップ」を置き換える属性がある場合、これは明日と検証の正しい方法ではない。ご了承ください。渡されないか、オプションである場合、スクリプトは失敗します。

+0

あなたの答えをありがとう。私は同じことを試みたが、問題は私の結果がnullであるということです。 getNodeValuesの後に配列のサイズは0です。 –

+0

問題は解決しました。ありがとう。私はボディコンテナからすべてのノード値を取得しようとしていました。私はあなたのコードを変更しました。私はbodyからすべての要素が必要なので、def val = holder.getNodeValues( "// soap:Body/*")を使用します。 –

+0

okiesそれが助けられた場合、あなたは答えをupvoteかもしれません:) –

関連する問題