使用Beanshell断言提取JSON值校验字段时脚本报错如何解决
错误原因
你的脚本一共存在5处问题:
- 语法错误:第9行提取
last_name的代码存在非法引号嵌套,同时你误用了JSONPath表达式,org.json 原生包不支持直接传入$data[0].last_name这种JSONPath格式的参数取值 - 取值逻辑错误:org.json 包取数组内对象的字段需要分步操作:先取data数组、再取数组内第一个元素、最后取元素的last_name属性,不能一步直接传入路径取值
- 字符串比较错误:Java/Beanshell中
==比较的是字符串对象的内存地址,不是实际内容,需要用equals()方法比较内容 - 逻辑冗余:else分支不需要再判断
lastName != "lawson",if已经覆盖了等于的场景,else天然就是不等于的场景 - 大小写不匹配:接口返回的last_name是首字母大写的
Lawson,你判断用的是全小写的lawson,就算语法对也会判定不通过
修复后的完整脚本
import org.json.*; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; String jsonString = prev.getResponseDataAsString(); JSONObject responseJson = new JSONObject(jsonString); // 分步提取字段:先取data数组,再取第一个元素,再取last_name JSONArray dataArray = responseJson.getJSONArray("data"); JSONObject firstItem = dataArray.getJSONObject(0); String lastName = firstItem.getString("last_name"); String Message= ""; // 需要忽略大小写判断可以把equals换成equalsIgnoreCase if (lastName.equals("Lawson")) { Failure= false; Message= Message+"Correct value"; FailureMessage= Message; } else { Failure= true; Message= Message+"Incorrect value: "+lastName; FailureMessage= Message; }
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

