2017-03-08 5 views
1

DBからデータを取得しようとしていて、レスポンスに基づいてテストケースを渡すか失敗する必要があります。私はdbを照会するたびにこれを行う必要がありますSOAP UIのクエリーDBで受け取ったXML応答に複数の値をアサートする

私はdbに接続して応答を得ることができます。しかし、応答

から値を主張する方法についてかなり確実スクリプトアサーションを使用することを試していないが、私は以上のことから、この

<Results> 
<ResultSet fetchSize="10"> 
    <Row rowNumber="1"> 
     <T1>TEXT1</T1> 
     <T2>TASK1</T2> 
     <T3>Value1</T3> 
     <T4>xyz</T4> 
     </Row> 
     <Row rowNumber="2"> 
     <T1>TEXT2</T1> 
     <T2>TASK2</T2> 
     <T3>Value1</T3> 
     <T4>ABC</T4> 
     </Row> 
    </ResultSet> 

で完全に新しい午前として把握することはできません最初のステップでは、 "TASK1"が存在し、同じセットに "Value1"が存在し、その後に "TASK2"と "Value1"が存在すると主張する必要があります

これが曖昧な場合はお知らせください私のクエリを変更しようとすることができること

+0

Surya、提供されたソリューションを見るチャンスがありますか? – Rao

答えて

0

あなたはJDBC用を使用することができますsoapUIでテストステップをリクエストしてください。

スクリプトアサーション

//define your expected data as map. You may add more key value pairs if more Rows 
def expectedData = ['TASK1':'Value1', 'TASK2':'Value1'] 

//Assert if the response is not null 
assert context.response, 'Response is not null or empty' 

//Parse and get rows 
def rows = new XmlSlurper().parseText(context.esponse).ResultSet.Row 

def getRowData = { data, elementName, elementValue -> 
    data.'**'.findAll { it.name() == elementName && it == elementValue }*.parent() 
} 

def assertionErrors = new StringBuffer() 

//Loop thur expectedData and capture the errors 
expectedData.each { key, value-> 
    def matchingRow = getRowData(rows, 'T2', key)[0] 
    value == matchingRow.T3.text() ?: assertionErrors.append("Assertion failed for rowNumber ${[email protected]}\n") 
} 

//Check and show the result 
if (assertionErrors) { 
    throw new Error(assertionErrors.toString()) 
} else { 
    log.info 'Assertions passed' 
} 

あなたはすぐにDemoオンラインソリューションを試してみること。どのように失敗エラーメッセージが表示されるかを示します。

上記のスクリプトでは、列名T2,T3が使用されています。名前が元の結果と異なる場合は、最後に変更してください。

はまたassertionは、すべての比較の問題をキャッチする故意を使用していないことに注意し、問題の最初の比較で停止する必要はありません。

+0

うわー!!私たちは何かをすることができないことを知りませんでした。私は値をアサートし、値に基づいて続けるために、長い長いスクリプトを書いています。それの外観から、私は私の既存のグルーヴィーなスクリプトにそれを含めることができると思う。私はこれを試し、これがうまくいくかどうかを知らせます:) – Surya

+0

@Surya、あなたが質問を掲示した後にチェックしていないかどうかはわかりません。あなたが戻って来て、解決策を探してうれしいです。ほとんどのアサーションは、別のGroovyスクリプト(1つのテストステップが少ない)ではなく、同じjdbcステップのスクリプトアサーションで使用できます – Rao

0

するTry XmlSlurper:http://groovy-lang.org/processing-xml.html

TASK1を確認するには:

def results = new XmlSlurper().parseText(response) 

def row1 = results.ResultSet.find { node-> 
    node.name() == 'Row' && [email protected] == '1' 
} 

assert row1.T2 == 'TASK1' 

私はあなたがあなた自身で残りを行うことができます願っています。)

+0

Antonに感謝します。私はこれを私のスクリプトに入れて試してみる – Surya

1

XPathを使用アサーション代わり
アサーション1
/結果/ ResultSetの[@のfetchSize = "10"] /行[1]/T1
期待される結果
タスク1
アサーション2
/Results/ResultSet [@ fetchSize = "10"]/Row [1]/T3
予想されるresu
値1

任意の数のノードに対して、必要な数のXpathアサーションを追加できます。

クイックヒント: XPathを生成するには、オンラインツールまたはOxygen XMLエディタを使用します。 :)

+0

ありがとう..私はこれを試しました。しかし、私が試したシナリオの種類に基づいて非常に多くのタスクがあるので、それぞれのタスクに対して行うことは難しかったです。したがって、私は応答をキャプチャし、値に基づいてさらなるステップを進めるグルーヴィースクリプトを含みました。 – Surya

関連する問題