6

バスケットに追加する 1..n 個のアイテムを受け入れるリクエストがあります。デフォルトのリクエストには、いくつかの子要素を持つ 1 つの「item」要素があります。子要素を持つ N 個のアイテムを追加したいです。creaeElementNS を使用して Item 親要素を追加できます。次のように「item」に子要素を追加したいのですが、誰かがこれに光を当てる

<basket:item>
<basket:itemId>222</basket:itemId>
<basket:itemCode>DEF</basket:itemCode>
<basket:item>

Groovy スクリプト

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder( "createBasket#Request" )
def parentnode = holder.getDomNode( "//basket:createBasketRequest" )
def basketTotal=   holder.getDomNode( "//basket:itemsTotal" ) 
def itemsTag = requestDoc.createElementNS(parentnode.getNamespaceURI(), "item")
parentnode.insertBefore(itemsTag  , basketTotal)
holder.updateProperty()

電流出力

<basket:createBasketRequest>
<basket:item>
    <basket:itemId>111</basket:itemId>
    <basket:itemCode>ABC</basket:itemCode>
</basket:item>
<basket:item>
</basket:item>
    <basket:itemsTotal>500.00</basket:itemsTotal>
</basket:createBasketRequest>

望ましい出力

<basket:createBasketRequest>
    <basket:item>
        <basket:itemId>111</basket:itemId>
        <basket:itemCode>ABC</basket:itemCode>
    </basket:item>
    <basket:item>
        <basket:itemId>222</basket:itemId>
        <basket:itemCode>DEF</basket:itemCode>
    <basket:item>
    <basket:itemsTotal>500.00</basket:itemsTotal>
</basket:createBasketRequest>

編集:私はsoapUIとTestCaseオプションを使用しています。追加バスケットリクエストステップの前にGroovyScriptステップがあります.groovyスクリプトは、実際にリクエストを送信する前に追加バスケットリクエストを準備します.別のアイテム要素を追加する心配はありませんが、私のテストケースが2つのアイテムを言うとき、実際にバスケット追加リクエストを送信する前に、2番目のアイテム要素(子要素とともに)を作成し、groovyスクリプトステップを使用してバスケット追加リクエストを準備する必要があります

4

2 に答える 2

4

うまくいくかどうかわかりませんが (私は SoapUI を使用していません)、これは役に立ちますか?

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder      = groovyUtils.getXmlHolder( "createBasket#Request" )
def parentnode  = holder.getDomNode( "//basket:createBasketRequest" )
def basketTotal = holder.getDomNode( "//basket:itemsTotal" ) 

def nodeText    = '''<basket:item>
                    |    <basket:itemId>222</basket:itemId>
                    |    <basket:itemCode>DEF</basket:itemCode>
                    |</basket:item>'''.stripMargin()

def nodeHolder  = new com.eviware.soapui.support.XmlHolder( nodeText )
def nodeItem    = nodeHolder.getDomNode( "//basket:item" )
def importNode  = requestDoc.importNode( nodeItem, true )

parentnode.insertBefore( importNode, basketTotal )

holder.updateProperty()
于 2013-08-22T14:03:20.740 に答える
0

groovy を使用した XML の作成に関する Scott Davis の投稿を確認してください。

私は MarkupBuilder を使用して、希望どおりの XML を作成しました。

def sw = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(sw)
xml."basket:createBasketRequest"(){
    "basket:item"(){
        "basket.itemId"("111")
        "basket:itemCode"("ABC")
        }
    "basket:item"(){
        "basket.itemId"("222")
        "basket:itemCode"("DEF")
        }
    "basket:itemsTotal"("500.00")
}

log.info sw

私が得た出力:

<basket:createBasketRequest>
  <basket:item>
    <basket.itemId>111</basket.itemId>
    <basket:itemCode>ABC</basket:itemCode>
  </basket:item>
  <basket:item>
    <basket.itemId>222</basket.itemId>
    <basket:itemCode>DEF</basket:itemCode>
  </basket:item>
  <basket:itemsTotal>500.00</basket:itemsTotal>
</basket:createBasketRequest>

XML の一部が既に存在し、ノードをルートに追加する必要があるため、応答を更新しています。

このコードを試してください...

import org.custommonkey.xmlunit.Diff
import org.custommonkey.xmlunit.XMLUnit
import groovy.xml.StreamingMarkupBuilder

def root = new XmlSlurper().parseText(orgXML)
root.appendNode {
    "basket:item"{
        "basket:itemID"("222")
        "basket:itemCode"("DEF")
    }

}

log.info groovy.xml.XmlUtil.serialize( root )
于 2013-08-22T13:40:08.267 に答える