• 0
  • 1
分享
  • JMeter日志查看与日志分析——软件测试圈
  • 橙子 2024-06-27 14:16:46 字数 3356 阅读 611 收藏 1

  1 JMeter日志概览

  jmeter日志文件保存在bin目录中,名称为jmeter.log。我们可以在面板中直接察看日志,点击右上角黄色标志物可以打开日志面板,再次点击收起。

1-1.png

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

1-2.png

  通过这种方式修改日志级别,只是零时修改,不会改变配置文件中的值。当Jmeter重启后,又会恢复为默认的日志级别。

  在Jmeter/bin 路径下打开 log4j2.xml文件,修改日志级别,这里修改该是永久性修改

  通过修改Root level 值改变日志级别,该修改是永久性的。对Jmeter 的GUI页面运行脚本和命令模式运行脚本都会生效。

1-3.png

  2 JMeter自定义日志

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

1-4.png

  在实际项目中,将JMeter脚本部署到Linux服务器上进行压力测试,存在一些日志详情查看的不便之处:

  吞吐量统计中包括了所有请求,包括一些辅助请求(beanshell请求),导致真正的tps统计数据不准确。

  业务是否成功,以及具体失败原因难以排查。

  这就需要用到beanshell下的自定义日志。log.info,log.error,如用log.error()打印错误信息

  import org.apache.log4j.Logger;
   
  // 获取接口的响应数据
  String result = prev.getResponseDataAsString();
   
  if(result.contains("error")){
      Failure=true;
      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{
  Failure=true;
  log.error("FailureMessage: " + result);
  }

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

  #!/bin/bash
  jmeter_log=/home/xxx/jmeter.log
   
  if [ -f "$jmeter_log" ]; then
   // 将原日志文件备份后删除
   cp $jmeter_log /home/xxx/jmeter.log_back
   rm -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即可查看日志详情。

  3 JMeter日志分析

  针对该日志写一个日志分析脚本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,效果如下:

  线程数:200
  请求次数: 120000
  成功次数:120000
  失败次数: 0
  错误率: 0%
  ...
  吞吐量:9000/s
  QPS:9000/s

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


作者:bulabula2022    

来源:http://www.51testing.com/html/93/n-7796493.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   现如今互联网行业飞速发展,IT行业也是水涨船高,软件行业的未来发展也是越来越好。而软件测试在软件行业可谓是一个必不可少的职业,它不仅算得上一个长青工作,而且也是一个在需求持续增长的职业。如果你已经入行软件测试了,那就沉住气继续努力下去,保持不断学习的习惯,你会越来越吃香,随着时间的增长和个人经验的不断增加,你在软件测试这个行业的眼光、见识、技能都会持续增长。据不完全统计,每年都有十多万的测试需求在增长,国内软件测试的人员缺口在持续增加,工作前景也比较好,想要入软件测试这行得趁早啦。 根据十来余年的工作经验和个人经历,有以下这么几点,只要你满足了,就大胆的进入软测这行即可:  1、有个大专以...
            0 0 1116
            分享
          •   前几天在我创建的技术交流群,几位同学聊起了兼容性测试相关的话题。有测试的方法技巧,有如何选择测试时的切入点,也有在质量和投入成本之间如何做平衡的思考。  翻了翻写过的技术文章,大多集中在后端、中间件以及稳定性测试方面,兼容性测试也有做过专项。这篇文章,我想结合自己对兼容性测试的理解,以及做技术专项的一些经验,谈谈我的一些看法。  如何理解兼容性测试  兼容性测试,最初是为了检查软件在不同的硬件、操作系统以及软件平台上是否可以正常运行,即软件的可移植性和正确性检查。操作系统如 Windows 和 Mac,各种浏览器兼容如Chrome、Firefox、IE。  近几年随着移...
            0 0 669
            分享
          • 1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?首先,将问题提交到缺陷管理库里面进行备案。然后,要获取判断的依据和标准:根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;根据用户的一般使用习惯,来确认是否是缺陷;与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪。等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的...
            4 5 3057
            分享
          • Xpath常用的定位方法相信做过selenium UI自动化的朋友都知道,工作中大部分的元素定位都是使用xpath进行定位,所以xpath是UI自动化工作中非常重要的一个环节,所以我单独整理出来一篇博客出来~~希望对大家有帮助~相对定位相对定位是两个杠表示“//”,相对路径易维护绝对路径绝对定位用一个杠“/”, 绝对路径一个层级变化所有空间都有变化/html/body/div[1]/section/section/main/div[2]/div[2]/div[1]/div[2]/button[1]/spanlast()方法当标签存在多个相同的时候,可以使用xpath中的last()方法,定位到...
            2 2 11105
            分享
          • 相信很多小伙伴想要自学性能测试,但网上的资料查阅出来的都比较干燥,对实际的性能测试经验并没有什么提升,本文从测试前的准备带你了解如何成为一名性能测试工程师。在开始性能测试前,我们需要跟项目组确认的几点内容:性能测试环境与生产环境服务器资源差异,并做差异分析,如测试环境的服务器资源与生产环境的服务器资源差距较大,需反馈给项目组,不然测出来的结果没有太大的参考意义;开始测试前,确认日志级别,日志级别需要与生产保持一致。如生产的日志是Info级别,则在测试环境的日志也应该是Info级别;确认数据库铺底数据(采用的方式为:让运维取生产上的每日成交量的数据库数据量),如数据库都是空表在测试查询交易的时候...
            0 0 1406
            分享
      • 51testing软件测试圈微信