2

現在、3 つのフィールドの値をチェックする次のアサーション スクリプトがあります。

import org.junit.Assert

def response = messageExchange.getResponseContent() 
def xml = new XmlSlurper().parseText(response)              
def nodelist = xml.'**'.findAll{ it.name() == 'premium' } 
def assertions = [6.19, 6.47, 6.90]
def i=0

for (node in nodelist) assert node.toString().matches(assertions[i++].toString())

アサーションが実際の値で渡されるように取得しようとしていますが、期待値の両側で0.05以内です。

次のスクリプトは、値が 1 つの場合に機能しますが、上記のアサーションで実装するのに苦労しています。

import org.junit.Assert 
// get the xml response     
def response = messageExchange.getResponseContent()     
// parse it     
def xml = new XmlSlurper().parseText(response)      
// find your node by name   
def node = xml.'**'.find { it.name() == 'premium' }     
// assert       
if(node.toDouble() != 0.0)  
    Assert.assertEquals(0.00, node.toDouble(), 0.05)    

編集

サンプル応答:

<b:quote-data>
    <b:quote-data>
      <b:premium>6.13</b:premium>
    </b:quote-data>
    <b:quote-data>
      <b:premium>6.45</b:premium>
    </b:quote-data>
    <b:quote-data>
      <b:premium>6.91</b:premium>
    </b:quote-data>
 </b:quote-data>
4

1 に答える 1

3

あなたの場合の失敗のいくつかを次に示します。

  • 以下のようにリストを定義すると、各値の型がBigDecimal型と見なされます。
  • 抽出された値は、比較する前に同じ型に強制する必要があります。

上記を実現するサンプルは次のとおりです。

def expectedPremiums = [6.19, 6.47, 6.90]
def xmlString = """<root xmlns:b="test">
 <b:quote-data>
       <b:premium>6.13</b:premium>
     </b:quote-data>
     <b:quote-data>
       <b:premium>6.45</b:premium>
     </b:quote-data>
     <b:quote-data>
       <b:premium>6.91</b:premium>
    </b:quote-data>
</root>"""
def xml = new XmlSlurper().parseText(xmlString)
def premiums = xml.'**'.findAll {it.name() == 'premium'}*.toBigDecimal()
println premiums

サンプルの固定 xml を使用すると、既に行っているように動的応答に使用できることに注意してください。

公差のある検証のロジックも必要な場合は、上記のスクリプトと共に以下を使用してください。

def tolerance = 0.05
def failurePremiums = [:]
expectedPremiums.eachWithIndex { expected, index ->
   if ((expected-tolerance) <= premiums[index] && premiums[index] <= (expected+tolerance)) {
     println "${premiums[index]} is in range"
   } else {
      println "${premiums[index]} is not falling in range, failed"
      failurePremiums[expected] = premiums[index]
   }
}
assert !failurePremiums, "Not matched data(expected vs actual) :  ${failurePremiums}"

オンラインですぐに試すことができますdemo

編集:別の提案

スクリプト アサーションを使用している場合は、次のように変更できます。

から:

def response = messageExchange.getResponseContent() 
def xml = new XmlSlurper().parseText(response)

に:

def xml = new XmlSlurper().parseText(context.response) 
于 2017-11-16T11:33:33.517 に答える