0

私は Groovy スクリプトの初心者であり、現在直面している問題の解決策を見つけるためにあなたの助けを求めています。

私の要件は、テスト データ入力に基づく反復ごとに、特定のノードまたは特定のノードを SoapRequest から削除する必要があるということです。これを実現するために、2 つの同一の SOAP リクエスト (オリジナルと変更済み) を作成しました。

Groovy スクリプトを使用して、各反復後に変更された SOAP リクエストのコンテンツを元の SOAP リクエストのコンテンツで復元しようとしています。(反復 1 - 削除するノードがあり、2 番目の反復では削除するノードが保持されます - これが元のコンテンツで要求を復元する理由です)。つまり、soap リクエストのクローンを作成して、元のリクエストを変更せずにクローン リクエストに対してノード削除操作を実行できるようにします。

以下は、私の TestSuite でのテストステップです。

データソース オリジナル (SoapRequest) Groovy スクリプト。変更 (SoapRequest)

SoapRequest (オリジナル)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <idm:request>
         <idm:dataset-searches>
            <idm:profile-name></idm:profile-name>
         </idm:dataset-searches>
         <idm:individual-name>
            <idm:family-name>ABC</idm:family-name>
            <idm:first-given-name>DEF</idm:first-given-name>
         </idm:individual-name>
         <idm:date-of-birth>1985-12-12</idm:date-of-birth>
      </idm:request>
   </soapenv:Body>
</soapenv:Envelope>

私のGroovyスクリプトは以下の通りです

def grUtils = new com.eviware.soapui.support.GroovyUtils(context)
def ReqHolder2 = grUtils.getXmlHolder("Modified#Request")

ReqHolder2.removeDomNodes("//idm:request")
ReqHolder2.updateProperty()

ReqHolder2 ["//soapenv:Body"] = context.expand( '${Original#Request#//idm:request}' )
ReqHolder2.updateProperty()

上記の groovy スクリプトを実行すると、Modified リクエストは元のリクエストのコンテンツで更新されますが、CDATA とスキーマへの参照が含まれます。

SoapRequest (変更)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
   <soapenv:Header/>
   <soapenv:Body>***<![CDATA[<idm:request xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">***
         <idm:dataset-searches>
            <idm:profile-name/>
         </idm:dataset-searches>
         <idm:individual-name>
            <idm:family-name>ABC</idm:family-name>
            <idm:first-given-name>DEF</idm:first-given-name>
         </idm:individual-name>
         <idm:date-of-birth>1985-12-12</idm:date-of-birth>
      </idm:request>**]]>**</soapenv:Body>
</soapenv:Envelope>

誰かがこれで私を助けてくれれば幸いです。また、この要件を実装するために、Groovy で他の代替方法を知ったり学んだりできれば幸いです。

ありがとうございました。

4

1 に答える 1

1

Groovy XmlSlurperおよびXmlParserを読むことを検討してください。それらは実装が非常に簡単で、xml 操作に使用できます。ただし、特定の要件については、XmlParser を使用する方が理にかなっています。

XMLParser がどのように機能するかを理解するのに役立つように、別の質問と私の答えを次に示します。

そして、あなたの質問はノードの削除に関するものであり、ノードへのアクセス/検証に関するものではありません。これは、XMlParser を使用したノードの削除に関する SO に関する別の質問です。

于 2012-07-24T07:20:08.130 に答える