Blazemeter中JSR223脚本无法解析groovy.json.JsonBuilder类求助
问题与解决方法
问题详情
- 遗留应用极少进行重大更新,性能测试频次低;一段一年多未修改的代码行,近期在Blazemeter执行失败,而整个脚本已9个月未变动,2023年秋季曾多次在Blazemeter成功运行。
- 脚本在本地JMeter(Groovy 3.0.17/Groovy Scripting Engine 2.0)中可正常执行,但Blazemeter报错:无法解析
groovy.json.JsonBuilder类。 - 涉及代码行:
String json = new groovy.json.JsonBuilder(map).toString(),添加import groovy.json.JsonBuilder语句后仍报错。 - Blazemeter日志错误信息:
Jsr223-Setup JWT执行失败,错误信息为javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script1.groovy: 140: unable to resolve class groovy.json.JsonBuilder
解决方法
方案一:改用JMeter内置JSON工具类(推荐)
避免依赖Groovy版本差异,直接使用JMeter自带的net.minidev.json.JSONValue类生成JSON字符串,替换原有代码:
import net.minidev.json.JSONValue String json = JSONValue.toJSONString(map)
该类属于JMeter核心依赖,在Blazemeter环境中默认可用,无需额外配置。
方案二:检查Blazemeter的Groovy版本并适配
本地JMeter使用Groovy 3.0.17,而Blazemeter可能已升级Groovy版本(如Groovy 4.x),部分类的加载逻辑可能变化。可尝试:
- 在脚本开头添加打印语句,确认Blazemeter测试环境的Groovy版本:
println GroovySystem.version - 若版本为Groovy 4+且仍无法加载
groovy.json.JsonBuilder,可手动上传Groovy的json模块依赖包到Blazemeter测试资源中,但此方法需维护依赖,不如方案一简便。
方案三:替换为纯Java JSON处理方式
如果上述方法仍不生效,可使用Java原生或JMeter内置的JSON处理API,比如:
import org.json.JSONObject String json = new JSONObject(map).toString()
注:需确保map的键值对符合JSONObject的解析要求。
内容的提问来源于stack exchange,提问作者always learning
相关产品推荐
相关产品推荐

