JMeter使用JSR223断言校验JSON响应时触发keySet方法缺失异常
脚本触发异常的核心问题
- 方法调用的类型不匹配是直接报错根源:接口响应的顶层为JSON数组结构,经
JsonSlurper解析后,jsonResponse的实际类型是java.util.ArrayList,但keySet()是Map类型(对应JSON对象结构)才有的方法,ArrayList本身没有实现该方法。你没有遍历数组内部的JSON对象,直接对数组本身调用仅Map支持的keySet()方法,自然会因找不到匹配的方法签名抛出MissingMethodException。 - 方法参数传递存在语法错误:即使解决了第一层类型问题,当你获取到数组内的JSON对象(Map结构)后,
containsAll方法要求传入的入参是一个集合类对象,你当前直接将"id","name","city","@type"四个字符串以多参数形式传入,不符合方法的参数定义,会触发新的方法不匹配报错。
匹配校验需求的正确实现参考
需要先遍历数组中的每一个JSON对象,逐一对对象的键集合做完整性校验:
import groovy.json.JsonSlurper def failureMessage = "" def jsonResponse = new JsonSlurper().parseText(prev.getResponseDataAsString()) def requiredKeys = ["id", "name", "city", "@type"] jsonResponse.each { item -> if (!item.keySet().containsAll(requiredKeys)) { failureMessage += "响应JSON对象结构不符合要求,缺失指定键,当前对象内容:${item}\n" } } if (failureMessage) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage(failureMessage) }
内容的提问来源于stack exchange,提问作者Aquaman
相关产品推荐
相关产品推荐

