我需要在JMeter中创建测试多个请求的脚本。我需要创建一个包含pass
的POST请求,在请求头中应该使用哈希sha512算法来加密user+someid+someid
。为了在每个请求中更改用户,我只需在Header Manager中添加user${__threadNum}
,这看起来很不错,但是我需要在下一个POST请求中从中生成哈希值。我搜索到可以通过beanshell脚本或jsr223前处理器实现此操作,但我对脚本编写或Java不太熟悉。
如果您使用JMeter版本大于等于4.0,只需使用函数__digest:
${__digest(SHA-512,要哈希的字符串,,,)}
从JMeter 4.0版本开始,更容易的答案是:
对于早期版本:
使用Java语言添加JSR223 Sampler,通过 vars.get("password")
传递变量密码和salt,使用此代码变量 generatedPassword 将保存新生成的哈希值。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
String passwordToHash = vars.get("password");
String salt= vars.get("salt");
String generatedPassword = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(salt.getBytes("UTF-8"));
byte[] bytes = md.digest(passwordToHash.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for(int i=0; i< bytes.length ;i++){
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
}
generatedPassword = sb.toString();
log.info(generatedPassword);
vars.put("generatedPassword", generatedPassword);
}
catch (NoSuchAlgorithmException e){
e.printStackTrace();
}
vars.get("password")
放在哪里?在用户参数中定义密码为${user}${someid}${someid}还是怎么样?然后我可以使用${generatedPassword}吗? - vb381password
,例如在用户参数
中,其值为${user}${someid}${someid}
,最后使用${generatedPassword}
。 - user7294900${generatedPassword}
而不是哈希值。 - vb381user: user123
someid: id123
someid2: id12345
password: ${user}${someid}${someid2}
在JSR223预处理器中,我已经写了一些代码,然后使用Header Manager添加了一个头部:user${__threadNum}: ${generatedPassword}
但是在请求头中,我只看到了user1: ${generatedPassword}
。这个设置正确吗?我会检查日志或者改变顺序... - vb381
echo -n "test" | openssl sha512
。 - marekful