2017-11-21 16 views
0

最近私はSoapUI Pro(ReadyAPI)にアップグレードしましたが、私は次の問題に遭遇しました。私はこのようなXPathのアサーションがありますXPathの結果が配列を返します

宣言名前空間NS2 = 'http://some.schema.tld/foo/bar/1.0を'; // NS2:GenerateOrResetPasswordFault //にfaultCode

それは私がfaultCode要素に入る特定の値と照合ます。しかし私は、同じ親にこれらの2を取得し、その応答は、私が以前、2つのアサーション、123に対して照合1および他の、同じXPathを持っていた456と照合し、それが働いた

//.. 
<GenerateOrResetPasswordFault> 
    <faultCode>123</faultCode> 
    <faultCode>456</faultCode> 
</GenerateOrResetPasswordFault> 
//... 

のようなものが含まれています。今度は、XPathが結果として実際に[123,456]を返すため、切り替え後にアサーションが失敗します。

これを処理するにはどうすればよいですか?

+0

リストをアサートすることは許可されていませんか? – Rao

+0

@Raoそれは残念ながら同じ順序でリストに頼ることはできません。要素をリストアップするアサーションを行うことは可能ですか?文字通りの比較ではありませんか? – Dropout

+1

スクリプトアサーションを使用できます。それに関して、あなたは大丈夫? – Rao

答えて

2

これを達成するためのスクリプトアサーションがあります。このように、複数のxpathアサーションを持つ必要はありません。

スクリプトアサーション:インライン続くあなたがすぐに与えられたXMLデータのオンラインdemoそれを試すことができます

//Check if the response is ok 
assert context.response, 'Response is empty or null' 

//Define your expected fault codes 
def expectedCodes = [123, 456] 


def actualCodes = [] 
if (context.response.contains('faultCode')) { 
    //Get the actual fault codes from xml response by parse and find 
    actualCodes = new XmlSlurper().parseText(context.response).'**'.findAll {it.name() == 'faultCode' }*.text() as Integer[] 
    log.info "Actual fault codes are : ${actualCodes}" 

    //Check both expected and actual are matching 
    assert expectedCodes.sort() == actualCodes.sort() 
} else { 
    throw new Error('Response does not contain faultCode elements') 
} 

をコメントしています。

+0

ああ、素晴らしい、あなただけの配列を並べ替える!ありがとう、それを試してみる.. – Dropout

関連する問題