SoapUI - 如何断言包含自定义属性的JSON元素

时间:2015-02-03 17:05:02

标签: json soapui

我使用SoapUI NG Pro(ReadyAPI-1.1.0。)并尝试使用UI设置我所需的所有断言。

我尝试做的是检查列表(JSON)是否包含soapUI自定义属性中定义的元素。要从列表中获取所有元素,我使用路径:$.devices[*].deviceName。现在,我想检查来自客户属性${#Project#devname.1}的字符串是否属于列表。

要写出断言,我发现了两种可能性,但它们都没有真正起作用。

  1. 使用JsonPath匹配:菜单服务器为路径的输入字段,一个用于预期结果,以及一个名为“允许Wild ...”的复选框。我使用$.devices[*].deviceName填充了路径,并使用${#Project#devname.1}填充了预期结果。我还选中了复选框以支持通配符。结果是积极的断言。 SoapUI完成了我的期望。但!如果我保存项目并重新打开它,则不再选中该复选框。我必须仔细检查所有断言并再次检查方框。这不是解决方案,因为我有大约100个这样的断言。
  2. 使用JsonPath RegEx匹配:不使用损坏的“允许Wild ...”复选框的好方法应该是使用正则表达式。因此,我使用“JsonPath RegEx Match”并将正确的路径$.devices[*].deviceName放入输入字段并使用此正则表达式:${#Project#devname.1}。遗憾的是,这不起作用,因为SoapUI在应用正则表达式之前不会扩展自定义属性。我没有在文档中找到任何解释如何在正则表达式中使用自定义属性的内容。你能在这帮吗?
  3. 无论如何。这种断言有什么好的解决方案?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用JsonPath断言与表达式匹配

 $.devices[?(@.deviceName=='${#Project#devname.1}')].deviceName.

它会尝试找到具有deviceName == devname.1. If exists = true, if not - "Comparison failed for path "...", expecting [%your deviceName%], actual was [[]]"

的设备