【问题标题】:SoapUI - how to assert a JSON element containing a custom propertySoapUI - 如何断言包含自定义属性的 JSON 元素
【发布时间】:2015-02-03 17:05:02
【问题描述】:

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

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

为了编写断言,我发现了两种可能性,但它们都不起作用。

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

无论如何。这种类型的断言有什么好的解决方案?

【问题讨论】:

  • 你能提供一个具体的例子吗?

标签: json soapui


【解决方案1】:

你可以尝试使用JsonPath匹配assertion with expression

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

它将尝试使用
deviceName == devname.1. If exists = true, if not - "Comparison failed for path "...", expecting [%your deviceName%], actual was [[]]"

查找设备

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多