如何在jsr223采样器中更新jmeter中的用户定义变量?

4nkexdtk  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(417)

我是jmeter&java新手,现在正在编写用于测试api的授权脚本。我在更新变量时遇到了一些问题 vars.put(key,value) 下面是我的代码示例:

import java.util.Arrays;
import java.security.MessageDigest;
import java.util.Base64;

public class StringToByte {
    public void main(String[] args) {
        String str_salt = "${salt}";
        byte[] b_salt = str_salt.getBytes();

        String str_pass = "c3000Hub";
        byte[] b_pass = str_pass.getBytes();

        byte[] b_pass_hash = new byte[b_salt.length + b_pass.length];

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hash = md.digest(b_pass_hash);

        String pass_hash = Base64.getEncoder().encodeToString(hash);
        vars.put("passhash", pass_hash);
    }
}

用户定义变量中的变量只是不更新,我不知道为什么?

2w3kk1z5

2w3kk1z51#

你需要明确地称之为 main() 函数为了使它工作,您声明了它,但我看不到它在哪里被调用
改变 String str_salt = "${salt}";String str_salt = vars.get("salt"); ,根据jsr223采样器文件:
jsr223测试元素具有可以显著提高性能的特性(编译)。要从该功能中获益,请执行以下操作:
使用脚本文件而不是内联它们。如果此功能在scriptengine上可用,这将使jmeter编译并缓存它们。
或者使用脚本文本并检查缓存已编译脚本(如果可用)属性。

When using this feature, ensure your script code does not use JMeter variables or JMeter function calls directly in script code as caching would only cache first replacement. Instead use script parameters.

建议的代码更改(如果您希望保留此类/方法方法):

import org.apache.jmeter.threads.JMeterVariables

import java.security.MessageDigest

public class StringToByte {
    public void main(JMeterVariables vars) {
        String str_salt = vars.get("salt");
        byte[] b_salt = str_salt.getBytes();

        String str_pass = "c3000Hub";
        byte[] b_pass = str_pass.getBytes();

        byte[] b_pass_hash = new byte[b_salt.length + b_pass.length];

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hash = md.digest(b_pass_hash);

        String pass_hash = Base64.getEncoder().encodeToString(hash);
        vars.put("passhash", pass_hash);
    }
}

new StringToByte().main(vars)

或者你可以做一些类似的事情:

import java.security.MessageDigest

String str_salt = vars.get("salt");

byte[] b_salt = str_salt.getBytes();

String str_pass = "c3000Hub";
byte[] b_pass = str_pass.getBytes();

byte[] b_pass_hash = new byte[b_salt.length + b_pass.length];

MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(b_pass_hash);

String pass_hash = Base64.getEncoder().encodeToString(hash);
vars.put("passhash", pass_hash);

关于jmeter中groovy脚本的更多信息:ApacheGroovy-为什么以及如何使用它

相关问题