jmeter在BSF预处理器修改请求后发送空的http POST正文数据



有人知道为什么jmeter在我修改请求主体后传递空POST吗。

我有一个在正文中包含大量JSON的请求(不幸的是,我无法用它粘贴图像)

我已将BSF预处理器附加到此请求:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
Sampler sampler = ctx.getCurrentSampler();
String param = sampler.getArguments().toString();
String replacerMCI = vars.get("vMainCaseId");
Pattern r = Pattern.compile("(?<=mainCaseId":")(\d{2,})");
Matcher m = r.matcher(param);
String paramRep = m.replaceAll(replacerMCI);
Argument arg = new Argument("", paramRep);
Arguments argList = new Arguments();
argList.addArgument(arg);
sampler.setArguments(argList);

当我登录控制台查看参数是否被修改时,我可以看到它有一个新值,但当我开始测试时,我看到POST是用空数据发送的。

POST https://servername:9443/teamworks/ajaxCoach
POST data:
Cookie Data:
[some cookie data]

您的代码看起来不错,只需删除以下行:

Sampler sampler = ctx.getCurrentSampler();

作为

  1. org.apache.jmeter.samplers.Sampler类没有"setArguments"方法
  2. 有一个预定义的变量sampler,它是父采样器的简写,我猜在您的情况下是HTTPSamplerProxy

展望未来,如果您的脚本遇到任何问题,请查看jmeter.log文件,就像Pre和PostProcessors一样,即使它们失败,GUI中也不会显示任何内容。

如果您使用Beanshell作为BSF语言,您可以在测试开始时添加debug();行,Beanshell解释器将把调试信息打印到STDOUT

最新更新