谈到Jmeter测试报告,大家应该知道Jmeter自身提供了默认的html报告,但是配置起来比较机械,每次都要去选择jtl目录,选择properties文件,选择输出目录等(如下图的步骤),而且同一个脚本执行多次,不能自动化的存储每次的结果。可以看出,这种手动的方式还是存在很多不足。 Jmeter测试报告,其实业界也有成熟的解决方案,比如Jenkins持续集成直接用其报告的插件,还能做到定时执行等功能;再比如influxdb+grafana,可以输出实时炫酷的报告。今天呢,我们通过一个简单案例来聊聊另一种方法-直接通过java代码去定义报告生成的过程。
【核心代码】 直接上代码如下,注意点: 1.本程序只在Windows环境下执行。 2. jmxFilePath(脚本文件路径),jmeterDir(Jmeter的bin目录),根据自己实际情况填写即可。 3.每次只需要修改jmxFilePath的脚本文件路径即可。 String jmxFilePath = "E:\\Jmeter_custom\\百度项目性能测试.jmx"; //文件名自己根据实际情况填写即可
//定制文件夹+时间戳
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String timeStamp = dateFormat.format(new Date());
String foldName = jmxFilePath.substring(0, jmxFilePath.indexOf(".")) + "_" + timeStamp;
//新建带有时间戳的文件夹
File directory = new File(foldName);
directory.mkdir();
//执行测试脚本,并生成结果
try {
// 执行的Shell命令
String jmeterDir = "D:\\jmeter-5.5_src\\apache-jmeter-5.5\\bin"; //目录根据实际情况填写即可
String command = "cmd /c "+jmeterDir+"\\jmeter -n -t "+jmxFilePath+" -l "+foldName+"\\result.jtl -e -o "+foldName;
// 执行命令
Process process = Runtime.getRuntime().exec(command);
// 等待执行完成
process.waitFor();
} catch (IOException | InterruptedException e1) {
e1.printStackTrace();
}
【执行结果验证】 从下图可看出,每次执行结果全部自动存储下来了,并且文件夹以脚本文件名+时间戳来命名。另外,jtl结果文件也保存到了报告的目录。
【后记】 自定义代码,为后续其他扩展提供了可能,大家可以根据需求自定义测试报告。比如,我们还可以接着上面代码来解析rsult.jtl文件。大家有兴趣可继续探索,也欢迎大家共同交流学习。
|