0
votes

${__P(thread,1)---- using this function in "number of threads" at JMX file, the following java code run incorrectly. While using correct numbers it worked. But I want this place can be changeable.

I'm developing a performance testing platform using Jmeter API.

StandardJMeterEngine standardJMeterEngine=new StandardJMeterEngine();
System.setProperty(JMeter.JMETER_NON_GUI, "true");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\jmeter.properties");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\system.properties");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\user.properties");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\saveservice.properties");
JMeterUtils.setJMeterHome("D:\software\java\apache-jmeter-5.1");
JMeterUtils.initLocale();
JMeterUtils.initLogging();
SaveService.loadProperties();
Properties jmeterProps = JMeterUtils.getJMeterProperties();
jmeterProps.put("thread","10");// 
File file=new File("F:\a.jmx");
FileServer.getFileServer().setBase(file);
FileServer.getFileServer().setScriptName(file.getName());
Field baseField = FileServer.getFileServer().getClass().getDeclaredField("base");
baseField.setAccessible(true);//
baseField.set(FileServer.getFileServer(), file.getAbsoluteFile().getParentFile());
HashTree scripts=SaveService.loadTree(file);
Summariser summariser = new Summariser(JMeterUtils.getPropDefault("summariser.name", "summary"));
ResultCollector logger = new ResultCollector(summariser);
logger.setFilename("F:\a.jtl");
scripts.add(scripts.getArray()[0],logger);
JMeter.convertSubTree(scripts);
standardJMeterEngine.configure(scripts);
standardJMeterEngine.runTest();
2

2 Answers

2
votes

You need to close your {

  ${__P(thread,1)}

And 1 is the default so you can use

  ${__P(thread)}

The default value for the property. If omitted, the default is set to "1".

0
votes

Make sure to explicitly add ApacheJMeter_functions.jar to your project CLASSPATH otherwise neither __P() nor other JMeter Functions will work properly.

Also make sure to escape backslashes like change:

logger.setFilename("F:\a.jtl");

to

logger.setFilename("F:\\a.jtl");

or use forward slashes instead:

logger.setFilename("F:/a.jtl");

More information: Five Ways To Launch a JMeter Test without Using the JMeter GUI