3

我正在尝试设置 JMeter 以连接到一个服务,该服务需要在我开始之前和请求之间对某些变量进行一些哈希处理。

我创建了一个用户定义的变量,其中包含纯文本的身份验证信息。
在调用第一个 HTTP 请求之前,我需要使用 SHA256 对密码进行哈希处理,使用 base64 对其进行编码,然后转换为大写。

我将收到auth_token一个 JSON 格式的响应正文。然后我需要SHA256 -> base64 -> uppercase对该 auth_token 执行相同的链,从那时起它将在请求标头中使用。

4

2 回答 2

5
  1. 如果您没有实现资源关键场景(负载测试),您可以使用JSR223 Sampler / JSR223 PostProcessor / JSR223 PreProcessor和一些代码。

    例如

    • 将 JSR223 Sampler / PostProcessor / PreProcessor 与以下 [groovy] 代码一起使用:
    导入 java.security.MessageDigest;
    导入 org.apache.commons.codec.binary.Base64;
    导入 org.testng.annotations.Test;
    
    字符串 [] 参数 = 参数.split(",");
    
    字符串文本 = 参数 [0];
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    
    md.update(text.getBytes("UTF-8"));
    字节[] 摘要 = md.digest();
    
    byte[] 编码 = Base64.encodeBase64(digest);
    String encText = (new String(encoded)).toUpperCase();
    
    vars.put("encodedValue",encText);
    
    • 您可以重新使用此采样器来对密码和 auth_token 进行哈希处理 - 通过 JSR223 采样器配置中的“参数”字段:${password}在第一种情况下使用例如变量,auth_token在第二种情况下使用 -。

    • 您可以将哈希值称为${encodedValue}变量。

  2. 与__groovy函数一起使用的类似 groovy 代码。

  3. jmeter-plugins集包含${__MD5(...)}, ${__base64Encode(...)},${__uppercase(...)} 功能,但这对您的情况来说还不够(没有 SHA256 摘要)。

  4. 您还可以查看OS Process Sampler以使用您的操作系统(如果是 linux)功能来实现相同的功能。

于 2013-02-06T17:50:37.600 回答
1

有一个新功能__digest,目前在夜间构建中

在您的情况下,将密码变量的结果保存在编码值变量中,请使用以下内容:

${__digest(SHA-256,${password},,,encodedValue)}

您可以下载自定义 JMeter 函数插件来调用 base 64 编码函数:

${__base64Encode(encodedValue, base64Value)}

然后调用大写函数:

${__uppercase(base64Value, finalValue)}

${finalValue} 将保存此操作的最终值

于 2017-11-15T07:29:40.303 回答