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

Java 1.8+JMeter5.4运行Groovy脚本报错:无法解析JsonSlurper类

在JMeter 5.4 + Java 1.8环境下解决Groovy脚本JsonSlurper无法解析的问题

问题场景

测试计划中使用的Groovy脚本在JMeter 5.5 + Java 17环境运行正常,但在JMeter 5.4 + Java 1.8环境下抛出如下错误:

2023-06-16 11:34:58,180 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, StudyName_Processer
javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: unable to resolve class groovy.json.JsonSlurper

原脚本内容:

import groovy.json.JsonSlurper;

def completeFetchedStudyNameFromResponse = []; 
1.upto(vars.get('studyNameFetched_matchNr') as int, {
  index ->
  completeFetchedStudyNameFromResponse.add(vars.get('studyNameFetched_' + index));
});

String tempToBeExcludedStudyName = vars.get('excludeStudyName');

def toBeDeleteStudy = [];
def studyNameNeedToExcludeFromDeletion = new JsonSlurper().parseText(tempToBeExcludedStudyName);

def filteredStudyName = completeFetchedStudyNameFromResponse.findAll {
  studyName ->
    studyNameNeedToExcludeFromDeletion.every {
      keywords ->
       studyName.contains(keywords)
    }
}
def bdConverter = new JsonSlurper();
def responseBDTemp = prev.getResponseDataAsString();
def responseBD = bdConverter.parseText(responseBDTemp);
def resultStudyUUIDCollector = [];
def parsedResultBD = responseBD.accounts;


filteredStudyName.each { studyNameFew ->
  resultStudyUUIDCollector.add(responseBD.accounts.find { account -> account.name == studyNameFew }.uuid)  
}

vars.putObject("myList", resultStudyUUIDCollector);

不升级环境的解决方案

方案一:改用JMeter内置的JSON库(无需额外依赖)

JMeter 5.4默认包含org.json Java原生JSON库,直接替换脚本中的JsonSlurper逻辑即可:

修改后的完整脚本:

def completeFetchedStudyNameFromResponse = []; 
1.upto(vars.get('studyNameFetched_matchNr') as int, {
  index ->
  completeFetchedStudyNameFromResponse.add(vars.get('studyNameFetched_' + index));
});

String tempToBeExcludedStudyName = vars.get('excludeStudyName');

// 改用org.json解析排除列表
def studyNameNeedToExcludeFromDeletion = new org.json.JSONArray(tempToBeExcludedStudyName);
def excludeKeywords = []
for (int i = 0; i < studyNameNeedToExcludeFromDeletion.length(); i++) {
    excludeKeywords.add(studyNameNeedToExcludeFromDeletion.getString(i))
}

// 过滤需要保留的研究名称
def filteredStudyName = completeFetchedStudyNameFromResponse.findAll { studyName ->
    excludeKeywords.every { keyword ->
        studyName.contains(keyword)
    }
}

// 改用org.json解析响应数据
def responseBDTemp = prev.getResponseDataAsString();
def responseBD = new org.json.JSONObject(responseBDTemp);
def parsedResultBD = responseBD.getJSONArray("accounts");

def resultStudyUUIDCollector = [];

// 收集匹配的UUID
filteredStudyName.each { studyNameFew ->
    for (int i = 0; i < parsedResultBD.length(); i++) {
        def account = parsedResultBD.getJSONObject(i);
        if (account.getString("name").equals(studyNameFew)) {
            resultStudyUUIDCollector.add(account.getString("uuid"));
            break;
        }
    }
}

vars.putObject("myList", resultStudyUUIDCollector);

方案二:补充Groovy JSON依赖包

  1. 下载与JMeter 5.4自带Groovy版本匹配的groovy-json jar包(JMeter 5.4内置Groovy版本为2.4.17,对应下载groovy-json-2.4.17.jar)
  2. 将下载的jar包放入JMeter安装目录下的lib文件夹
  3. 重启JMeter,原脚本即可正常运行

内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:17:20