SoapUI(Pro)> DataDriven>消息内容声明-如何处理十进制值

时间:2018-12-07 04:12:33

标签: soapui assertion ready-api data-driven

我正在使用ReadyAPI(SoapUI Pro)来测试RestAPI。作为使用DataSource(DataDriven)的测试数据Im,我在其中提供Excel的输入(API输入)。为了测试API响应,我正在比较Excel的输出(预期结果已经在excel中)。为此,我正在使用消息内容声明(因为它很简单,而且技术上不多)。 现在的问题是,在excel中,“预期输出”为10.0,但是当我在apapUI(Pro)中使用此excel字段进行断言时,它的读数为10.0>10。但是从API响应值是10.0。所以断言失败了。我试图用excel处理它,但是没有运气。

那么在SoapUI级别上我们可以在断言中处理它吗?如果使用Message Content Assertion无法实现,那么可以使用JsonPath Existence Match(我对Json不太了解)

1 个答案:

答案 0 :(得分:0)

我认为,邮件内容声明总是在寻找字符串。因此,您的“ 10.0”将被视为字符串。输入文件中的内容可能不会以相同的方式处理。

该问题的另一个变体可能是您的输入文件指出“ 10.0”作为期望值,但是您从响应中收到“ 10,0”。

您可能可以通过多种方式解决此问题。我假设您的消息内容声明包含一个变量,该变量引用您的数据源,例如$ {DataSource#ColumnName}? 小心点!如果得到的响应很长,那么只要在响应中的任何地方找到该值,您的断言就会是肯定的。您可能最终会得到误报。 10.0可能是时间戳之类的一部分,这并不是Web服务响应中常见的数据类型。

我想我会选择使用脚本断言来更改您的消息内容断言,并插入如下内容:

// This should be adjusted to match your 
// DataSource name and correct column name
def value1 = context.expand( '${DataSource#value}' )

// Now we need to make sure, that no matter if you 
// receive a number in the format 10.0 or 10,0
// we convert it to one and same thing.
value1 = value1.replace(",",".")

// And in case the 10.0 is being returned as 10
// we need to manually add the .0
if (value1.indexOf(".")==-1) {
    value1 = value1.concat(".0")
}

// Now retrieve the value from the response
// You can replace this line, by rightclicking
// inside the script, and choose Get Data
def value2 = context.expand( '${TestStepName#Response#value}' )

assert value1==value2

现在,您将只检查该特定XML实体是否具有期望值。这将大大降低您误报的风险。

需要一些调整,以使其适合您的需求。

如果发生较小的更改(如名称空间更改),则这种比较方式可能会中断。您可以使用XmlSlurper对其进行改进。但是,我暂时将其省略。到达那里后,回去问一下。 :-)