如果此SoapUI断言(该路径正在检查)为什么会失败,如果该路径不存在?

时间:2018-10-29 21:36:14

标签: soapui

我在SoapUI中有一个JSONPath存在断言:

enter image description here

如果路径$personResults[0].person.identifiers[0].value不存在,则声明应通过

但是断言总是失败,并显示错误:

  

对路径[$ personResults [0] .person.identifiers [0] .value]的声明失败:PathNotFoundException:在当前上下文中找不到路径“ person”:...(此处为json请求)

这毫无疑问是因为$personResults[0].person不存在,因此$personResults[0].person.identifiers也不存在。

...但这正是我要测试的内容!如果路径不存在,则断言需要通过,但由于路径不存在,断言本身会引发错误。

我确信这是由于该路径不存在,因为断言会在我将其指向确实存在的路径时修复。

总结:

  • $personResults[0]返回true
  • $personResults[0].person返回false
  • $personResults[0].person.identifiers抛出一个 PathNotFoundException

但是我需要一招才能返回false。

2 个答案:

答案 0 :(得分:1)

SoapUI使用的JSONPath引擎并不如您所愿。

解决方法是使用XPath。在内部,SoapUI将所有内容都转换为XML,因此您只需使用XPath匹配步骤:

res = solve_bvp(odesys, boundary, x_init, y_init, p=[w**2], max_nodes=10000, tol=1e-6)
print res.message

if res.success:
    x_disp = np.linspace(0,L,3001)
    y_disp = res.sol(x_disp)
    plt.plot(x_disp, y_disp[0])
    plt.title("eigenfunction to eigenvalue $\lambda=%.6f$"%res.p[0]);
    plt.grid(); plt.show()

期望:

exists(//*:personResults//*:person//*:identifiers)

编辑:您可能需要添加名称空间,如上所述。

答案 1 :(得分:0)

我能够通过脚本断言来解决这个问题:

import groovy.json.JsonSlurper
def ResponseMessage = messageExchange.response.responseContent
def TrimResponse = ResponseMessage.replaceAll('^\"|\"$','').replaceAll('/\\/','')
def jsonSlurper = new JsonSlurper().parseText(TrimResponse)

assert (
    jsonSlurper.personResults[0].person == null
    || jsonSlurper.personResults[0].person.identifiers == null
)