jquery网站开发,番禺人才网地址,免费安全建网站,深圳市住房保障局官网一、Jmeter日志概览
Jmeter日志文件保存在bin目录中#xff0c;名称为jmeter.log。我们可以在面板中直接察看日志#xff0c;点击右上角黄色标志物可以打开日志面板#xff0c;再次点击收起 另外#xff0c;Jmeter可以很方便地设置日志输出级别#xff1a; 通过这种方式修…一、Jmeter日志概览
Jmeter日志文件保存在bin目录中名称为jmeter.log。我们可以在面板中直接察看日志点击右上角黄色标志物可以打开日志面板再次点击收起 另外Jmeter可以很方便地设置日志输出级别 通过这种方式修改日志级别只是临时修改不会改变配置文件中的值。当Jmeter重启后又会恢复为默认的日志级别。在Jmeter/bin 路径下打开 log4j2.xml文件修改日志级别这里修改是永久性修改通过修改Root level 值改变日志级别该修改是永久性的。对Jmeter 的GUI页面运行脚本和命令模式运行脚本都会生效。 二、Jmeter自定义日志
前面所看到的都是系统日志也就是JMeter本身所打印的日志。如果我们自己想输出一些日志该怎么办呢这个一般就要借助Beanshell了。 在实际项目中将JMeter脚本部署到Linux服务器上进行压力测试存在一些日志详情查看的不便之处
1、吞吐量统计中包括了所有请求包括一些辅助请求(beanshell请求)导致真正的tps统计数据不准确
2、业务是否成功以及具体失败原因难以排查
这就需要用到beanshell下的自定义日志。log.info,log.error,如用log.error()打印错误信息
import org.apache.log4j.Logger;// 获取接口的响应数据
String result prev.getResponseDataAsString();if(result.contains(error)){Failuretrue;log.error(接口失败: result);
}
当然自定义日志最重要应用场景还是在Linux服务器上压测时方便查看日志信息因linux上无图形化界面
比如获取orderid时脚本
import org.apache.log4j.Logger;// 获取接口的响应数据
String result prev.getResponseDataAsString();
// 从JSON提取器中获取code和orderId
String code vars.get(code);
String orderId vars.get(orderId);if(code.equals(0)){log.info(place order success, orderId orderId);
}else{Failuretrue;log.error(FailureMessage: result);
}
将该脚本上传到Linux中顺便写个启动脚本startup.sh
#!/bin/bash
jmeter_log/home/xxx/jmeter.logif [ -f $jmeter_log ]; then// 将原日志文件备份后删除cp $jmeter_log /home/xxx/jmeter.log_backrm -rf $jmeter_log
fi
// 启动JMeter脚本
jmeter -n -t /home/xxx/test.jmx -l /home/xxx/result/test.jtl -j ../result/log/jmeter_error.log
命令解释使用该命令调用jmeter进行性能测试-n命令模式运行,-t : 后面跟的是需要执行的脚本名称-l :后跟的是聚合报告保存路径-j :跟的是日志保存路径,运行脚本后cat jmeter_error.log即可查看日志详情
三、Jmeter日志分析
针对该日志写一个日志分析脚本logAnalysis.sh
#!/bin/bash
jmeter_log/home/test/jmeter.log
thread_numgrep Thread started $jmeter_log|tail -n 1|awk -F- {print$6}
start_timegrep All thread groups have been started $jmeter_log|awk -F {print $1,$2}|awk -F, {print $1}
end_timegrep Shutdown hook ended $jmeter_log|awk -F {print $1,$2}|awk -F, {print $1}final_success_timegrep place order success $jmeter_log|tail -n 1|awk -F {print$1,$2}|awk -F, {print$1}
success_running_time$[ $(date -d $final_success_time %s) - $(date -d $start_time %s) ]
running_time$[ $(date -d $end_time %s) - $(date -d $start_time %s) ]
cancle_timesgrep cancle orders success $jmeter_log|wc -l //撤单次数success_timesgrep success $jmeter_log|wc -l // 成功次数
failure_timesgrep FailureMessage $jmeter_log|wc -l
request_times$[ $success_times$failure_times ]
error_rateecho scale2; $failure_times/$request_times*100 | bc
qps$[ $request_times/$running_time ]
throughput$[ $success_times/$success_running_time ]echo -e 线程数:$thread_num
echo -e 请求次数: $request_times
echo -e 成功次数: $success_times
echo -e 失败次数: $failure_times
echo -e 撤单次数:$cancle_times
echo -e 错误率: $error_rate%
echo -e 开始时间:$start_time
echo -e 结束时间:$end_time
echo -e 最后成功请求时间:$final_success_time
echo -e 请求时间: $running_time
echo -e 成功运行时间:$success_running_time
echo -e 吞吐量:$throughput/s
echo -e QPS:$qps/s
当JMeter脚本运行一段时间后执行logAnalysis.sh效果如下线程数200请求次数120000成功次数120000失败次数0错误率0%......吞吐量9000/sQPS9000/s
可以看到输出信息全面清晰。这样我们就可以在linux下运行JMeter压测脚本时实时获取压测详情了。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你