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);

posted @ 2024-09-09 09:23  simon_T  阅读(77)  评论(0)    收藏  举报