我正在尝试设置JMeter以连接到一个服务,该服务需要在开始之前和中间请求之前对某些变量进行一些散列。
我创建了一个用户自定义变量,其中包含纯文本的身份验证信息 在调用第一个HTTP请求之前,我需要使用SHA256散列密码,使用base64对其进行编码,然后转换为大写。
我将在JSON格式化的响应正文中收到auth_token
。然后我需要对该auth_token执行相同的SHA256 -> base64 -> uppercase
链,然后将在请求标头中使用它。
答案 0 :(得分:5)
如果您没有实施资源关键型方案(负载测试),您可以使用例如<{3}} / JSR223 Sampler / JSR223 PostProcessor带有一些代码。
E.g。
import java.security.MessageDigest; import org.apache.commons.codec.binary.Base64; import org.testng.annotations.Test; String [] params = Parameters.split(","); String text = params[0]; MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(text.getBytes("UTF-8")); byte[] digest = md.digest(); byte[] encoded = Base64.encodeBase64(digest); String encText = (new String(encoded)).toUpperCase(); vars.put("encodedValue",encText);
您可以重复使用此采样器来密码密码和auth_token - 通过JSR223采样器配置中的“参数”字段:使用例如第一种情况为${password}
变量,第二种情况为auth_token
-
散列值,您可以将其引用为${encodedValue}
变量。
与JSR223 PreProcessor函数一起使用的类似groovy代码。
__groovy设置包含${__MD5(...)}
,${__base64Encode(...)}
,${__uppercase(...)}
jmeter-plugins,但这对您的情况来说还不够(没有SHA256摘要)。
您还可以查看functions以使用您的操作系统(非常好的Linux)功能实现相同功能。
答案 1 :(得分:1)
有一个新功能__digest
,目前位于nightly builds
在您保存encodeValue变量的情况下,密码变量的结果使用以下内容:
${__digest(SHA-256,${password},,,encodedValue)}
您可以下载Custom JMeter Functions插件来调用base 64编码功能:
${__base64Encode(encodedValue, base64Value)}
然后调用大写函数:
${__uppercase(base64Value, finalValue)}
$ {finalValue}将保留此操作的最终值