BeanShell预处理器获取jmeter请求后变量无法替换
背景
jmeter接口验签逻辑是从请求参数中获取值处理加密验签后,讲请求参数中的sign值替换
如果处理后直接讲sign生成Jmeter变量,在当前请求是无法替换的,因为jmeter请求的URL和body已经运行,不会再重新运行替换

解决方法
在当前预处理程序中再写处理当前请求的逻辑

// 替换URL中的sign参数
String newQuery = decodedQuery.replaceAll("sign=[^&]*", "sign=" + URLEncoder.encode(sign, "UTF-8"));
String newUrl = url.replace(query, newQuery);
sampler.setPath(newUrl);
log.info("Updated URL: " + newUrl);
// 替换body中的sign参数
String newBody = params.replaceAll("\"sign\":\"\\$\\{sign\\}\"", "\"sign\":\"" + sign + "\"");
sampler.getArguments().getArgument(0).setValue(newBody);
log.info("Updated Request Body: " + newBody);
// 替换 body 中的 sign 占位符
String updatedBody = body.replace("${sign}", sign);
log.info("替换后的请求 body: " + updatedBody);
// 获取并更新请求的 URL
String url = sampler.getUrl().toString();
log.info("原始 URL: " + url);
String updatedUrl = url.replaceAll("sign=[^&]*", "sign=" + sign);
log.info("更新后的 URL: " + updatedUrl);
sampler.setUrl(new java.net.URL(updatedUrl));
// 更新请求的 body 参数
sampler.getArguments().getArgument(0).setValue(updatedBody);

浙公网安备 33010602011771号