文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何实现JMeter自定义日志与日志分析

2023-06-22 03:29

关注

这篇文章主要介绍如何实现JMeter自定义日志与日志分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1 JMeter日志概览

JMeter与Java程序一样,会记录事件日志,日志文件保存在bin目录中,名称为jmeter.log。当然,我们也可以在面板中直接察看日志,点击右上角黄色标志物可以打开日志面板,再次点击收起。

如何实现JMeter自定义日志与日志分析

可见,通过日志可以帮助我们定位一些不容易直接察觉的问题。

另外,JMeter可以很方便地设置日志输出级别:

如何实现JMeter自定义日志与日志分析

2 JMeter自定义日志

前面所看到的都是系统日志,也就是JMeter本身所打印的日志。如果我们自己想输出一些日志,该怎么办呢?这个一般就要借助Beanshell了。

例如,一个接口响应结果如下:

如何实现JMeter自定义日志与日志分析

在该请求下添加Beanshell断言,运行后,日志中输出了相应内容:

如何实现JMeter自定义日志与日志分析

import org.apache.log4j.Logger;// 获取接口的响应数据String result = prev.getResponseDataAsString();if(result.contains("error")){Failure=true;log.error("接口失败: " + result);}

当然,自定义日志最重要的作用还是在Linux服务器上运行脚本时,因为没有界面,排查问题更加麻烦。

承接前文,将JMeter脚本部署到Linux服务器上进行压力测试,存在一些不便之处:

首先,测试接口的响应内容如图所示:

如何实现JMeter自定义日志与日志分析

在接口下添加2个【JSON Path Extractor】,分别用于在测试接口的响应内容里提取code、orderId。

如何实现JMeter自定义日志与日志分析

如何实现JMeter自定义日志与日志分析

再在测试接口下添加【BeanShell断言】:

import org.apache.log4j.Logger;// 获取接口的响应数据String result = prev.getResponseDataAsString();// 从JSON提取器中获取code和orderIdString code = vars.get("code");String orderId = vars.get("orderId");if(code.equals("0")){log.info("place order success, orderId=" + orderId);}else{Failure=true;log.error("FailureMessage: " + result);}

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

#!/bin/bashjmeter_log=/home/test/jmeter.logif [ -f "$jmeter_log" ]; then // 将原日志文件备份后删除 cp $jmeter_log /home/test/jmeter.log_back rm -rf $jmeter_logfi// 启动JMeter脚本jmeter -n -t /home/test/test.jmx -l /home/test/result/test.jtl

运行脚本后,cat jmeter.log,效果如下:

如何实现JMeter自定义日志与日志分析

3 JMeter日志分析

针对该日志写一个日志分析脚本logAnalysis.sh

#!/bin/bashjmeter_log=/home/test/jmeter.logthread_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_numecho -e '请求次数:' $request_timesecho -e '成功次数:' $success_timesecho -e '失败次数:' $failure_timesecho -e '撤单次数:'$cancle_timesecho -e '错误率:' $error_rate'%'echo -e '开始时间:'$start_timeecho -e '结束时间:'$end_timeecho -e '最后成功请求时间:'$final_success_timeecho -e '请求时间:' $running_time echo -e '成功运行时间:'$success_running_timeecho -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压测脚本时,实时获取压测详情了。

以上是“如何实现JMeter自定义日志与日志分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯