JMeter生成签名的AWS API请求

时间:2018-05-25 01:27:06

标签: amazon-web-services request jmeter signed jsr223

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

我的第一次尝试是在HTTP标头管理器中放置相同的参数,这些参数在我的Postman请求中正常工作。这些参数是" AccessKey"," SecretKey"," AWS Region"," Service Name"和#34;会话令牌"但回应说"访问被拒绝"。在最好的情况下,我只是在这一步中使用了错误的名称,重命名它们已经修复了所有内容。

我的第二次尝试是遵循AWS documentation并编写一个生成签名请求的Java类。然后我想使用JSR223 PreProcessor来使用vars.put设置变量。我该怎么做才能正确?我是JMeter的新手,并认为我可能能够粘贴我的Java代码,添加vars.put语句以及它。但遗憾的是,这并没有创建一个名为" aaauthorization"如果我之后运行Debug Sampler:

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());
}
}

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要删除class aws_request {定义并关闭大括号}JSR223 Test Elements与普通的Java类不同,代码是通过ScriptEngine进行求值的,因此不允许您使用“类”,但是可以解析常规方法,并且可以执行它们。

如果您的Groovy脚本没有执行应做的工作,请首先检查 jmeter.log 文件-如果有任何错误-他们将去那里。

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

不要与java语言选项混淆,它是通过Beanshell解释器实现的,该解释器将您限制为Java SE 1.5语言功能,并且它的性能是一个很大的问号高负载。