I'm trying to execute performance with Jmeter from Java.
My code is written below.
I'm facing an issue generating dashboard report.
I want to dashboard report to be written in "Target" folder within the project folder in Ecipse workspace.
With the first test run the dashboard report is generated properly.
The problem occurs when I run a second test. The problem/cause as I see is a statistics.json
file that is generated in the project folder > report-output folder in the Eclipse workspace. If I delete this statistics.json file
and run the test again, it works fine and also generated he dashboard report.
Is it possible to change the location of this statistics.json
file to the same "Target" folder?
And
Is it possible to have a dynamic name for it?
Or
Delete the existing statistics.json
json file before each run?
Code:
package JmeterJava;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.report.dashboard.ReportGenerator;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Jmeter {
public static void main(String[] argv) throws Exception {
// JMeter Engine
StandardJMeterEngine jmeter = new StandardJMeterEngine();
//Define date format...
DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String currentDate = df.format(new Date());
// Initialize Properties, logging, locale, etc.
JMeterUtils.loadJMeterProperties("/home/user/jmeter/apache-jmeter-5.1.1/bin/jmeter.properties");
JMeterUtils.setJMeterHome("/home/user/jmeter/apache-jmeter-5.1.1/");
JMeterUtils.setProperty("jmeter.reportgenerator.exporter.html.classname", "org.apache.jmeter.report.dashboard.HtmlTemplateExporter");
JMeterUtils.setProperty("jmeter.reportgenerator.exporter.html.property.output_dir","Target/dashboard" + currentDate);
//JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
JMeterUtils.initLocale();
// Initialize JMeter SaveService
SaveService.loadProperties();
// Load existing .jmx Test Plan
HashTree testPlanTree = SaveService.loadTree(new File("/home/user/test-plan.jmx"));
//add Summarizer output to get test progress in stdout like:
// summary = 2 in 1.3s = 1.5/s Avg: 631 Min: 290 Max: 973 Err: 0 (0.00%)
Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
summer = new Summariser(summariserName);
}
// Store execution results into a .jtl file
String logFile = "./Target/Result-" + currentDate + ".jtl";
ResultCollector logger = new ResultCollector(summer);
logger.setFilename(logFile);
testPlanTree.add(testPlanTree.getArray()[0], logger);
// Run JMeter Test
jmeter.configure(testPlanTree);
jmeter.run();
// Generate HTML Report Dashboard
ReportGenerator generator = new ReportGenerator(logFile, null);
generator.generate();
}
}
Error:
Exception in thread "main" java.lang.IllegalArgumentException: Cannot write to '/home/user/eclipse-workspace/Jmeter/report-output' as folder is not empty