Xml SoapUI GroovyScript断言在期望值的(+;或-)0.05范围内
我目前有以下断言脚本来检查三个字段的值Xml SoapUI GroovyScript断言在期望值的(+;或-)0.05范围内,xml,groovy,soapui,assertions,numeric-ranges,Xml,Groovy,Soapui,Assertions,Numeric Ranges,我目前有以下断言脚本来检查三个字段的值 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.
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之内
当有一个值时,下面的脚本可以工作,但我正努力用上面的断言实现它
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>
6.13
6.45
6.91
在您的案例中,这里有几件失败的事情
- 当您定义如下所示的列表时,它将每个值类型视为
类型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
致:
请显示您正在处理的示例响应,好吗?@Rao我已经添加了用于编辑的示例repsonseThanks,因此您需要不同的值?因此预期值和实际值之间的公差为0.05。所以如果我预计保险费是6.50。如果实际值在6.45和6.55之间,则断言应该通过。我认为您已经知道如何处理公差部分,对吗?
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}"
def response = messageExchange.getResponseContent()
def xml = new XmlSlurper().parseText(response)
def xml = new XmlSlurper().parseText(context.response)