JMeter执行Groovy代码报No such property: Algorithm错误如何修复
问题根因
抛出javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: Algorithm for class: Script47的核心原因有两点:
- Groovy脚本执行时不会自动导入第三方包下的自定义类,代码中直接写的
Algorithm.sha256未指定全限定类名,脚本引擎无法识别该类型,最终抛出属性找不到的错误。 - Wealdtech Hawk库中
Algorithm是HawkCredentials类的内部枚举,本身就不能脱离宿主类直接独立引用。
可行修复方案
任选以下一种方式修改脚本即可解决问题:
方案1:补全枚举全限定名(无需额外导入,推荐)
直接给Algorithm补全完整类路径,不需要额外加导入语句,修改后的完整可运行代码如下:
def hawkClient = new com.wealdtech.hawk.HawkClient.Builder() .credentials(new com.wealdtech.hawk.HawkCredentials.Builder() .keyId("UB6Vs7U8r45M9") .key("eFzPNjBgCFAbCFbu5NTxmSkGPYxqXLK3") .algorithm(com.wealdtech.hawk.HawkCredentials.Algorithm.sha256) .build()) .build(); def authorization = hawkClient.generateAuthorizationHeader(sampler.getUrl().toURI(), sampler.getMethod(), sampler.getArguments().getArgument(0).getValue()) vars.put('authorization', authorization)
方案2:脚本开头添加内部枚举的导入语句
在脚本最顶部添加对应枚举的导入声明,后续就可以直接使用Algorithm.sha256的简写形式,代码如下:
import com.wealdtech.hawk.HawkCredentials.Algorithm def hawkClient = new com.wealdtech.hawk.HawkClient.Builder() .credentials(new com.wealdtech.hawk.HawkCredentials.Builder() .keyId("UB6Vs7U8r45M9") .key("eFzPNjBgCFAbCFbu5NTxmSkGPYxqXLK3") .algorithm(Algorithm.sha256) .build()) .build(); def authorization = hawkClient.generateAuthorizationHeader(sampler.getUrl().toURI(), sampler.getMethod(), sampler.getArguments().getArgument(0).getValue()) vars.put('authorization', authorization)
前置校验注意点
如果修改类名后仍然报类找不到的错误,需要确认已经将Wealdtech Hawk的对应依赖jar包(含所有传递依赖)放到JMeter安装目录的lib文件夹下,重启JMeter后再执行脚本。
内容的提问来源于stack exchange,提问作者Pratik Dey
相关产品推荐
相关产品推荐

