You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 18:54:04