在发送请求之前散列和编码变量

时间:2013-02-06 15:48:42

标签: scripting base64 jmeter sha256

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

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

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

2 个答案:

答案 0 :(得分:5)

  1. 如果您没有实施资源关键型方案(负载测试),您可以使用例如<{3}} / JSR223 Sampler / JSR223 PostProcessor带有一些代码。

    E.g。

    • 使用JSR223 Sampler / PostProcessor / PreProcessor以及以下[groovy]代码:
    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}变量。

  2. JSR223 PreProcessor函数一起使用的类似groovy代码。

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

  4. 您还可以查看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}将保留此操作的最终值