51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 404|回复: 1
打印 上一主题 下一主题

浅聊JMeter日志查看与分析

[复制链接]
  • TA的每日心情
    无聊
    前天 09:06
  • 签到天数: 941 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-6-5 13:27:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1 JMeter日志概览
      jmeter日志文件保存在bin目录中,名称为jmeter.log。我们可以在面板中直接察看日志,点击右上角黄色标志物可以打开日志面板,再次点击收起。

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

      通过这种方式修改日志级别,只是零时修改,不会改变配置文件中的值。当Jmeter重启后,又会恢复为默认的日志级别。
      在Jmeter/bin 路径下打开 log4j2.xml文件,修改日志级别,这里修改该是永久性修改
      通过修改Root level 值改变日志级别,该修改是永久性的。对Jmeter 的GUI页面运行脚本和命令模式运行脚本都会生效。

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

      在实际项目中,将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压测脚本时,实时获取压测详情了。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-2 22:16 , Processed in 0.067197 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表