SoapUI JSON 不使用 JsonSlurper 的两个不同字符串的路径断言

SoapUI JSON Path assertion for two different strings not using JsonSlurper

我正在使用 SoapUI JSONPath Mach 功能来断言 JSON 响应。取决于一种语言,我可以有两种不同的反应:

Factura no encontrada en el lote.Invoice not found in open batch.

我知道我可以使用 JsonSlurper 做到这一点:

assert jsonSlurper.header.rspMsg in ["Factura no encontrada en el lote.","Invoice not found in open batch."]

但是,我正在寻找的是在 SoapUI 断言功能中使用它,请参见屏幕截图:

具体的bottom应该怎么改:

"Factura no encontrada en el lote." OR "Invoice not found in open batch."

谢谢

不幸的是,使用 JSONPath match assert 这是不可能的(至少对于现有版本,也许在未来......)。对于预期结果中的此断言,仅允许使用字符串(或扩展将被评估为字符串的表达式),因此无法使用 OR 运算符设置预期值。

另一种方法是将 OR 运算符放在 jsonpath 表达式中,并按预期结果使用 true

例如,对于您的情况,您可以使用类似的东西:

$.header.[?(@.['rspMsg'] == 'Factura no encontrada en el lote.' || ?(@.['rspMsg'] == 'Invoice not found in open batch.']

并在预期结果中使用 true

然而已经存在另一个问题,SOAPUI 5.2.1 使用 com.jayway.jsonpath 版本 0.9.1 并且此版本不支持 || 运算符,因此这不起作用。

所以最后的尝试可能是使用 JSONPath Regex match assert,它根据提供的正则表达式评估 JSONPath 表达式,并期望 true 或 false。使用这种方法,您可以使用:

JSONPath 表达式: $.header.rspMsg

正则表达式: (Factura no encontrada en el lote\.)|(Invoice not found in open batch\.)

预期结果: true

在这一点上,我认为更好的方法是使用 jsonSlurper 来执行断言。

希望这对您有所帮助,