我正在尝试在JMeter中生成已签名的AWS请求。
我的第一次尝试是将相同的参数放在HTTP标头管理器中,这些参数在我的Postman请求中工作正常。这些参数是"访问密钥"、"秘密密钥"、"AWS 区域"、"服务名称"和"会话令牌",但响应显示"访问被拒绝"。在最好的情况下,我只是在此步骤中使用了错误的名称,重命名它们已经解决了所有问题。
我的第二次尝试是遵循 AWS 文档并编写一个生成签名请求的 Java 类。然后我想使用 JSR223 预处理器使用vars.put
来设置变量。我怎样才能正确地做到这一点?我是JMeter的新手,认为我也许可以粘贴我的Java代码,添加vars.put语句,仅此而已。但遗憾的是,如果我之后运行调试采样器,这不会创建一个名为"aaauthorization"的变量:
class aws_request {
public static String bytesToHex(byte[] hash) {
...
return hexString.toString();
}
private static byte[] HmacSHA256(String data, byte[] key) throws Exception {
...
return mac.doFinal(data.getBytes("UTF8"));
}
private static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName)
throws Exception {
...
return kSigning;
}
public static String getAuthorization() {
try {...
return authorization;
} catch (Exception e) {
return "failed";
}
}
public static void main(String args[]) {
vars.put("aaauthorization", getAuthorization());
}
}
提前感谢您的帮助!
您需要删除class aws_request {
定义并关闭大括号}
。JSR223测试元素与普通的Java类不同,代码是通过ScriptEngine评估的,因此您不允许有"类",但是普通方法将被解析,您将能够执行它们。
如果你的Groovy脚本没有做它应该做的事情,首先检查jmeter.log文件 - 如果有任何错误 - 它们会去那里。
请参阅 Apache Groovy - 为什么以及如何使用它的文章,了解有关在 JMeter 测试中使用 Groovy 脚本的更多信息。
不要与java
语言选项混淆,它是通过 Beanshell 解释器实现的,它限制了您对 Java SE 1.5 语言功能的限制,并且在涉及高负载时,它的性能是一个很大的问号。