JMeter系列(八):JMeter自定义日志与日志分析
2019-07-13 15:46
381 查看
![](https://csdnimg.cn/release/phoenix/images/creativecommons/80x15.png)
承接前文,将JMeter脚本部署到Linux服务器上进行压力测试,这种方式也存在一些不便之处:
- 吞吐量统计中包括了所有请求,包括一些辅助请求(beanshell请求),导致真正的tps统计数据不准确。
- 业务是否成功,以及具体失败原因难以排查。
针对以上问题,通过【BeanShell断言】记录自定义日志。
首先,测试接口的响应内容如图所示:
在接口下添加三个【JSON Path Extractor】,分别用于在测试接口的响应内容里提取message、code、orderId。
再在测试接口下添加【BeanShell断言】:
import org.apache.log4j.Logger; String code = vars.get("code"); String message = vars.get("message"); String orderId = vars.get("orderId"); if (code.equals("0")){ log.info("place order success, orderId=" + orderId); }else{ Failure=true; log.error("FailureMessage: " + orderMessage); log.error("errorCode:" + orderCode); }
将该脚本上传到Linux中,顺便写个启动脚本:start.sh
#!/bin/bash jmeter_log=/home/test/jmeter.log if [ -f "$jmeter_log" ]; then // 将原日志文件备份后删除 cp $jmeter_log /home/test/jmeter.log_back rm -rf $jmeter_log fi // 启动JMeter脚本 jmeter -n -t /home/test/test.jmx -l /home/test/result/test.jtl
运行脚本后,cat jmeter.log,效果如下:
针对该日志写一个日志分析脚本logAnalysis.sh:
#!/bin/bash jmeter_log=/home/test/jmeter.log thread_num=`grep 'Thread started' $jmeter_log|tail -n 1|awk -F"-" '{print$6}'` start_time=`grep 'All thread groups have been started' $jmeter_log|awk -F" " '{print $1,$2}'|awk -F"," '{print $1}'` end_time=`grep 'Shutdown hook ended' $jmeter_log|awk -F" " '{print $1,$2}'|awk -F"," '{print $1}'` final_success_time=`grep "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_times=`grep "cancle orders success" $jmeter_log|wc -l` //撤单次数 success_times=`grep success $jmeter_log|wc -l` // 成功次数 failure_times=`grep FailureMessage $jmeter_log|wc -l` request_times=$[ $success_times+$failure_times ] error_rate=`echo "scale=2; $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,效果如下:
线程数:180 请求次数: 131691 成功次数: 131493 失败次数: 198 撤单次数:141 错误率: 0% 开始时间:2018-11-28 15:34:54 结束时间:2018-11-28 15:37:17 最后成功请求时间:2018-11-28 15:37:17 请求时间: 143 成功运行时间:143 吞吐量:919/s QPS:920/s
可以看到,输出信息全面清晰。这样,我们就可以在linux下运行JMeter压测脚本时,实时获取压测详情了。
相关文章推荐
- 百晓生带你玩转linux系统服务搭建系列----AWStats日志分析系统的部署
- MySQL调优系列_日志分析
- 自定义View系列教程03--onLayout源码详尽分析
- 转载和积累系列 - 分析服务器日志常用命令
- ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总
- EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)
- spring Aspect 实现自定义注解的日志记录,有时候注解类不起作用的原因分析
- MySQL系列:innodb源码分析之重做日志结构
- 论“性能需求分析”系列专题(三)之 借助日志获取性能需求 推荐
- .net core系列之《对AOP思想的理解及使用AspectCore实现自定义日志拦截》
- ELK学习10_ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总
- Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能
- 【自定义View系列】03--onLayout源码分析
- 论“性能需求分析”系列专题(三)之 借助日志获取性能需求
- 自定义View系列教程04--Draw源码分析及其实践
- ELK学习10_ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总
- Android从零开搞系列:自定义View(4)基本的自定义ViewPager指示器+开源项目分析(上)
- MSDN Visual系列:SharePoint中用于审计日志的自定义实体的编写
- MySQL系列:innodb源码分析之重做日志结构
- 自定义View系列教程04--Draw源码分析及其实践