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
相关产品推荐
相关产品推荐

