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

JMeter中将字符串转换为Base64失败问题求助

问题背景

需要将格式为「username:加密后的密码」的字符串编码为Base64,但在JMeter的JSR223 PostProcessor中执行脚本时出现错误。

错误日志

2023-06-28 14:27:50,613 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 PostProcessor
javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: Base64Encoder for class: Script72
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-jsr223-3.0.11.jar:3.0.11]
    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.11.jar:3.0.11]
    at javax.script.CompiledScript.eval(CompiledScript.java:93) ~[java.scripting:?]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.5]
    at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) ~[ApacheJMeter_components.jar:5.5]
    at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) ~[ApacheJMeter_core.jar:5.5]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) ~[ApacheJMeter_core.jar:5.5]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.5]

原脚本代码

import com.org.util.Crypto;
import org.apache.commons.codec.binary.Base64;

def password = 'passc0de';
def encPassword = Crypto.encodeMD5Base64(password);
def authCode = 'testUser:'+encPassword;

String auth_token = authCode.toString();
log.info('AuthToken -------------->'+auth_token)
String auth_token_encoded = Base64Encoder.encode(auth_token) as String();
log.info('-------------->'+auth_token_encoded)

问题原因及解决方法

报错核心原因是:你导入了org.apache.commons.codec.binary.Base64类,但代码中错误调用了不存在的Base64Encoder类。

方案一:使用已导入的Apache Commons Base64类

修改脚本中Base64编码的逻辑,调用Base64类的encodeBase64String()静态方法:

import com.org.util.Crypto;
import org.apache.commons.codec.binary.Base64;

def password = 'passc0de';
def encPassword = Crypto.encodeMD5Base64(password);
def authCode = 'testUser:' + encPassword;

String auth_token = authCode.toString();
log.info('AuthToken -------------->' + auth_token)
// 调用正确的Base64类方法,指定UTF-8编码避免乱码
String auth_token_encoded = Base64.encodeBase64String(auth_token.getBytes("UTF-8"));
log.info('-------------->' + auth_token_encoded)

方案二:使用Groovy原生Base64支持

Groovy自带Base64编码能力,无需额外导入类,代码更简洁:

import com.org.util.Crypto;

def password = 'passc0de';
def encPassword = Crypto.encodeMD5Base64(password);
def authCode = 'testUser:' + encPassword;

String auth_token = authCode.toString();
log.info('AuthToken -------------->' + auth_token)
// Groovy原生字节流Base64编码
String auth_token_encoded = auth_token.bytes.encodeBase64().toString();
log.info('-------------->' + auth_token_encoded)

两种方案都能解决报错并完成正确的Base64编码。

内容的提问来源于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.18 01:04:54