性能测试 —— Jmeter日志查看与分析

一、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()打印错误信息

  1. import org.apache.log4j.Logger;

  2. // 获取接口的响应数据

  3. String result = prev.getResponseDataAsString();

  4. if(result.contains("error")){

  5. Failure=true;

  6. log.error("接口失败: " + result);

  7. }

当然,自定义日志最重要应用场景还是在Linux服务器上压测时,方便查看日志信息(因linux上无图形化界面)

比如,获取orderid时脚本

  1. import org.apache.log4j.Logger;

  2. // 获取接口的响应数据

  3. String result = prev.getResponseDataAsString();

  4. // 从JSON提取器中获取code和orderId

  5. String code = vars.get("code");

  6. String orderId = vars.get("orderId");

  7. if(code.equals("0")){

  8. log.info("place order success, orderId=" + orderId);

  9. }else{

  10. Failure=true;

  11. log.error("FailureMessage: " + result);

  12. }

将该脚本上传到Linux中,顺便写个启动脚本:startup.sh

  1. #!/bin/bash

  2. jmeter_log=/home/xxx/jmeter.log

  3. if [ -f "$jmeter_log" ]; then

  4. // 将原日志文件备份后删除

  5. cp $jmeter_log /home/xxx/jmeter.log_back

  6. rm -rf $jmeter_log

  7. fi

  8. // 启动JMeter脚本

  9. 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:

  1. #!/bin/bash

  2. jmeter_log=/home/test/jmeter.log

  3. thread_num=`grep 'Thread started' $jmeter_log|tail -n 1|awk -F"-" '{print$6}'`

  4. start_time=`grep 'All thread groups have been started' $jmeter_log|awk -F" " '{print $1,$2}'|awk -F"," '{print $1}'`

  5. end_time=`grep 'Shutdown hook ended' $jmeter_log|awk -F" " '{print $1,$2}'|awk -F"," '{print $1}'`

  6. final_success_time=`grep "place order success" $jmeter_log|tail -n 1|awk -F" " '{print$1,$2}'|awk -F"," '{print$1}'`

  7. success_running_time=$[ $(date -d "$final_success_time" +%s) - $(date -d "$start_time" +%s) ]

  8. running_time=$[ $(date -d "$end_time" +%s) - $(date -d "$start_time" +%s) ]

  9. cancle_times=`grep "cancle orders success" $jmeter_log|wc -l` //撤单次数

  10. success_times=`grep success $jmeter_log|wc -l` // 成功次数

  11. failure_times=`grep FailureMessage $jmeter_log|wc -l`

  12. request_times=$[ $success_times+$failure_times ]

  13. error_rate=`echo "scale=2; $failure_times/$request_times*100" | bc`

  14. qps=$[ $request_times/$running_time ]

  15. throughput=$[ $success_times/$success_running_time ]

  16. echo -e '线程数:'$thread_num

  17. echo -e '请求次数:' $request_times

  18. echo -e '成功次数:' $success_times

  19. echo -e '失败次数:' $failure_times

  20. echo -e '撤单次数:'$cancle_times

  21. echo -e '错误率:' $error_rate'%'

  22. echo -e '开始时间:'$start_time

  23. echo -e '结束时间:'$end_time

  24. echo -e '最后成功请求时间:'$final_success_time

  25. echo -e '请求时间:' $running_time

  26. echo -e '成功运行时间:'$success_running_time

  27. echo -e '吞吐量:'$throughput'/s'

  28. echo -e 'QPS:'$qps'/s'

当JMeter脚本运行一段时间后,执行logAnalysis.sh,效果如下:线程数:200请求次数:120000成功次数:120000失败次数:0错误率:0%......吞吐量:9000/sQPS:9000/s

可以看到,输出信息全面清晰。这样,我们就可以在linux下运行JMeter压测脚本时,实时获取压测详情了。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值