JMeter 生成签名的 AWS API 请求

JMeter generate Signed AWS API Requests

我正在尝试在 JMeter 中生成签名的 AWS 请求。

我的第一次尝试是在 HTTP Header 管理器中放置相同的参数,这些参数在我的 Postman 请求中运行良好。这些参数是 "AccessKey"、"SecretKey"、"AWS Region"、"Service Name" 和 "Session Token",但响应显示 "Access denied"。在最好的情况下,我只是在这一步中使用了错误的名称,重命名它们已经解决了所有问题。

我的第二次尝试是遵循 AWS documentation 并编写一个 Java class 来生成签名请求。然后我想使用 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 Test Elements are different from normal Java classes, the code is being evaluated via ScriptEngine 因此您不能使用 "classes" 但是正常的方法将被解析并且您将能够执行它们。

如果你的 Groovy 脚本没有做它应该做的事情,首先检查 jmeter.log 文件 - 如果有的话错误 - 他们会去那里。

有关在 JMeter 测试中使用 Groovy 脚本的更多信息,请参阅 Apache Groovy - Why and How You Should Use It 文章。

不要与 java 语言选项混淆,它是通过 Beanshell interpreter which limits you to Java SE 1.5 语言功能实现的,当涉及到高负载时,它的性能是一个很大的问号。