JMeter中JSR223断言contains条件校验customerID失败如何解决
问题原因
- 原脚本没有处理JSON解析失败后
customerID变量未定义/为空的场景,调用contains方法会抛出空指针异常,直接导致断言误判失败 - 用
contains匹配逻辑不严谨:只要字符串包含目标子串就会判定合法,不符合「Test为固定前缀」的要求,也会出现不符合规则的ID被误判通过的问题 - 没有对Test开头的ID做长度校验,不符合「前缀4位Test+后3位随机字符」的规则
修复后的JSR223断言脚本
import groovy.json.JsonSlurper; def failureMessage = ""; def jsonResponse = null; def customerID = null; // 提前声明变量,避免未定义报错 def legalFixedIds = ["GSK", "CLINIRX", "KENDLE"] as Set; // 固定合法ID集合,后续维护更方便 JsonSlurper JSON = new JsonSlurper(); try { jsonResponse = JSON.parseText(prev.getResponseDataAsString()); customerID = jsonResponse.customerId?.toString(); // 空安全运算符避免空指针异常 } catch (Exception e) { failureMessage += "Invalid JSON.\n" } // 优先处理JSON解析异常 if (failureMessage) { AssertionResult.setFailure(true); AssertionResult.setFailureMessage(failureMessage); } else { // 校验规则:要么属于固定合法ID,要么符合Test前缀规则 boolean isLegal = legalFixedIds.contains(customerID) || customerID == "Test" || (customerID.length() == 7 && customerID.startsWith("Test")); AssertionResult.setFailure(!isLegal); if (!isLegal) { AssertionResult.setFailureMessage("Illegal customerID: " + customerID); } }
改动说明
- 提前声明变量并增加空安全处理,彻底避免空指针异常导致的误判
- 固定合法ID存入集合,后续新增固定ID直接修改集合即可,代码可读性和可维护性更高
- 替换
contains为startsWith匹配前缀,同时增加长度校验,严格适配规则:既兼容单独的Test合法值,也匹配Test+3位随机字符的7位长度合法ID - 拆分异常处理和ID校验逻辑,错误提示更精准
内容的提问来源于stack exchange,提问作者user14435933
相关产品推荐
相关产品推荐

