我有一个setUp线程组,在那里我运行一个jdbc请求来获取记录。然后我使用beanshell后处理器来修复线程计数和循环计数,然后将其作为属性传递给下一个线程组。
我的代码在下面。
import org.apache.jmeter.util.JMeterUtils;
int totalRecords = Integer.valueOf(vars.get("UCID_#")).intValue(); //UCID - Column name
if(totalRecords<100){
int noOfThreads = 5;
int loopCount = (totalRecords/noOfThreads);
}
JMeterUtils.setProperty("noOfThreads", noOfThreads);
JMeterUtils.setProperty("loopCount", loopCount");
在下一个线程组中,我使用上面的属性来固定线程数和循环数。
${__property(noOfThreads)}
${__property(loopCount)}
如果我运行测试,我得到下面的错误。
ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.io.File; import org.apache.jmeter.services.FileServer; //jmeter spe . . . '' : Undefined argument: noOfThreads
Problem in BeanShell script: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.io.File; import org.apache.jmeter.services.FileServer; //jmeter spe . . . '' : Undefined argument: noOfThreads
然后我也试了下面的步骤,但是没有用
${__setProperty(noOfThreads,vars.get("noOfThreads"))};
${__setProperty(loopCount,vars.get("loopCount"))};
请大家帮我解决这个问题……先谢了。
3条答案
按热度按时间3wabscal1#
你的
noOfThreads
是if
块的局部变量,你不能在if
块之外访问它。你可以这样做:
mrwjdhj32#
首先,在JMeter中不鼓励使用Beanshell采样器,并且在运行负载测试时不建议使用。
您应该使用JSR 223采样器/后处理器/预处理器在脚本中编写自定义逻辑
下面是将值存储到property中的代码,您可以使用${__P()}或props.get()函数在同一测试计划的不同线程组中进行检索
第一节第一节第一节第一节第一次
或者,您可以使用vars.putObject();getObject()来检索它。
flvtvl503#
你需要把最后两行放在if block里面,因为
noOfThreads
和loopCount
变量are only accessible在那里。另外,从JMeter 3.1开始,建议使用JSR223测试元素和Groovy语言进行脚本编写。
如果你的代码只在setUp Thread Group中的某个地方由一个线程执行,那应该没问题,但是如果你要从代码中进行加载或者使用“繁重”的加密操作,那么值得考虑迁移到Groovy。
更多信息:Beanshell vs. JSR223 vs. Java For JMeter: Complete Showdown