我的jmeter
应用程序发送了一个请求,并期望json
响应中包含以下内容。
{"external-profile":{"email":"myemail@gmail.com","firstname":"fn","lastname":"ln","portfolio":{"field1":[],"field2":[],"field3":[]}}}
field1
,field2
并且field3
可以为空数组或可以具有某些值。有没有办法检查消息是否包含field1,2,3
但忽略该值?
我尝试过这样做,但是不起作用- {"external-profile":{"email":"myemail@gmail.com","firstname":"fn","lastname":"ln","portfolio":{"field1":[\.*],"field2":[\.*],"field3":[\.*]}}}
。老实说,我不知道这是在中指定正则表达式的正确方法jmeter
。
从JMeter 5.2开始,你就有了提供功能的JSON JMESPath声明,可以使用它来验证属性名称(示例配置):keys
以及文本表示形式,以便于复制和粘贴:
join(',',keys("external-profile".portfolio))
field1,field2,field3
但是,如果“字段”的顺序不同,它将失败,因此你可能想要使用JSON Schema Validator,可以从JSR223断言中使用它。
谢谢。在
json
提到我是不完整的。实际结构为{"result":"success","additional-info":"{\"external-profile\":{\"email\":\"myemail@gmail.com\",\"firstname\":\"fn\",\"lastname\":\"ln\",\"portfolio\":{\"field1\":[],\"field2\":["value1","value2"],\"field3\":[]}}}"}
。我将您的答案修改如下,join(',',keys("additional-info.external-profile".portfolio))
但出现错误message:Invalid argument type calling "keys": expected object but was null
我也尝试过,
join(',',keys("additional-info"."external-profile".portfolio))
但这也给错误Assertion failure message:Invalid argument type calling "keys": expected object but was null
。响应包含json
-{"result":"success","additional-info":"{\"external-profile\":{\"email\":\"myemail@gmail.com\",\"firstname\":\"fn\",\"lastname\":\"ln\",\"portfolio\":{\"field1\":[],\"field2\":[{\"tag\":\"un2-new tag-empty\",\"count\":1},{\"tag\":\"un2-new tag2-empty\",\"count\":1}],\"field3\":[]}}}"}
我认为问题可能
additional-info
是字符串而不是json对象"additional-info":"{...}"
而不是"additional-info":{...}
。json
在验证路径之前,我需要找到一种将其转换为对象的方法。但是我不知道我是否可以使用类似的方法json.parse
来做到这一点。在将字符串转换为json对象之后,我就可以正常工作了。对于我最初创建的问题,您的答案是正确的。此处有更多详细信息-stackoverflow.com/questions/65151285/…