我在JMeter中遇到问题,我收到此错误
2014/08/14 14:13:26 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``String RequestUrl = vars.get("RequestUrl"); String[] params = RequestUrl.split(" . . . '' : Typed variable declaration
2014/08/14 14:13:26 WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``String RequestUrl = vars.get("RequestUrl"); String[] params = RequestUrl.split(" . . . '' : Typed variable declaration
我不知道什么是错的,否则代码似乎有效。谁能给我一些建议?
以下是相关代码块:
String RequestUrl = vars.get("RequestUrl");
String[] params = RequestUrl.split("\\?");
String RequestTask = params[1].split("\\&")[1].split("=")[1];
System.out.println(RequestTask);
vars.put("RequestTask",RequestTask);
应该提到代码是在后处理器中,它与“RequestUrl”的Xpath提取器配对
已修改为包含整个错误
答案 0 :(得分:14)
我没有看到你的URL以及XPath查询返回什么,但无论如何你的URL解析逻辑看起来很脆弱,因为它强烈依赖于参数的顺序和存在,并且如果请求URL更改,可能会在将来咬你。参数或更改的参数顺序或编码的东西等。
见以下参考资料:
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import java.net.URI;
import java.util.List;
String url = vars.get("RequestUrl");
List params = URLEncodedUtils.parse(new URI(url), "UTF-8");
for (NameValuePair param : params) {
if (param.getName().equals("put your actual param name here")) {
vars.put("RequestTask", param.getValue());
}
}
另外值得查看How to use BeanShell: JMeter's favorite built-in component以获取问题排查提示。通常,应该使用本地化错误日志记录,如:
log.info("something");
log.error("something else");
因此,如果您没有在日志中看到消息,那么Beanshell无法执行该行并在上面某处失败。
另外,Beanshell错误消息的信息量不大,我在脚本中使用了以下构造:
try {
//script logic here
}
catch (Throwable ex) {
log.error("Failed to do this or that", ex);
}
因此可以在jmeter.log文件中读取错误stracktrace。
希望这会有所帮助。
答案 1 :(得分:0)
你能否显示整个错误?
尝试在另一个之后添加一个语句,以查看哪个是根本原因。
我想你可能会对可能导致问题的结果(数组访问)做出假设。
答案 2 :(得分:0)
如果您将VuGen录制的JMS脚本转换为JMeter,则必须查找复制的lr
函数,这些函数会抛出此类/类似错误。
例如:int orderlinecount = Integer.parseInt(lr.eval_string("strInt"));
您必须确保您的脚本没有所有与lr相关的函数,以便jmeter成功执行您的脚本。