如何在JMeter中使用Java代码生成一些HKSTD id?此id将在进一步的http请求采样器中使用

如何在JMeter中使用Java代码生成一些HKSTD id?此id将在进一步的http请求采样器中使用,java,jmeter,Java,Jmeter,我正在一个项目中工作,其中hkstd id生成并由进一步的HTTP请求采样器使用该id。此hkstd id由开发人员提供的java代码生成。我的场景是,我必须首先调用这个java代码,它将返回id,然后我将在HTTP请求中使用它。我曾尝试在Beanshell Sampler和JSR223 Sampler中调用此Java代码,但没有结果,尽管此采样器在没有任何错误的情况下传递了结果。当我尝试输出log/System.out时,它不会打印任何内容。我不确定我的代码是否正在运行/调用 提前谢谢 删除类

我正在一个项目中工作,其中hkstd id生成并由进一步的HTTP请求采样器使用该id。此hkstd id由开发人员提供的java代码生成。我的场景是,我必须首先调用这个java代码,它将返回id,然后我将在HTTP请求中使用它。我曾尝试在Beanshell Sampler和JSR223 Sampler中调用此Java代码,但没有结果,尽管此采样器在没有任何错误的情况下传递了结果。当我尝试输出log/System.out时,它不会打印任何内容。我不确定我的代码是否正在运行/调用

提前谢谢


删除类和main方法,只需输入代码即可,例如:

import org.apache.commons.codec.digest.DigestUtils;

String contextRoot = "root";
String csrfToken = "a";
String url = "http://www.google.com/root?ta=b&_hkstd=1234c=d";

String urlWithQueryString = removeParamsAndHost(url, contextRoot);
String token = getHashValueOfUrl(urlWithQueryString, csrfToken);
String urlWithToken = findurlWithToken(url, token);

private static String findurlWithToken(String url, String token) {
    StringBuilder builder = new StringBuilder(removeParams(url));
    if (builder.indexOf("?") == -1) {
        builder.append("?");
    } else {
        builder.append("&");
    }
    builder.append("_hkstd").append("=").append(token);
    ;
    return builder.toString();

}

private static String removeParamsAndHost(String url, String contextRoot) {
    if (url.indexOf("_hkstd") != -1) {
        return url.substring(url.indexOf(contextRoot), url.indexOf("_hkstd") - 1);
    } else {
        return url.substring(url.indexOf(contextRoot));
    }
}

private static String removeParams(String url) {
    if (url.indexOf("_hkstd") != -1) {
        return url.substring(0, url.indexOf("_hkstd") - 1);
    } else {
        return url;
    }
}

public static String getHashValueOfUrl(String url, String csrfToken) {
    return DigestUtils.md5Hex(url + csrfToken);
}
您可以添加JMeter变量,稍后可以使用vars.put使用:


如果要按原样运行此Java类,请执行以下操作:

编译开发人员提供的源代码,并将生成的.jar文件置于 重新启动JMeter以拾取.jar 添加到您的测试计划中 将以下代码放入脚本区域:

AppendHtstd.main()
就是这样,您的类将由JMeter执行


有关JMeter测试中自定义脚本的更多信息,请参阅文章

谢谢!这里有一个约束,因为我已经向Java代码传递了一些值,比如:Cookies/URL/contextRoot here:String contextRoot=root;字符串csrfToken=;字符串url=url;这是否可以按照您的方法在运行时在此处传递值?您可以修改Java代码以从中读取值并返回生成的字符串对不起,这是一个愚蠢的问题,但在修改后,我将从何处将参数传递到此文件?还有一个疑问,我是否需要这样调用:var hkstd=AppendHtstd.main,以便返回存储在变量中的字符串。
AppendHtstd.main()