JMeter自定义日志与日志分析的实现

目录
  • 1 JMeter日志概览
  • 2 JMeter自定义日志
  • 3 JMeter日志分析

1 JMeter日志概览

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

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

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

2 JMeter自定义日志

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

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

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

import org.apache.log4j.Logger;

// 获取接口的响应数据
String result = prev.getResponseDataAsString();

if(result.contains("error")){
	Failure=true;
	log.error("接口失败: " + result);
}

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

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

  • 吞吐量统计中包括了所有请求,包括一些辅助请求(beanshell请求),导致真正的tps统计数据不准确。
  • 业务是否成功,以及具体失败原因难以排查。

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

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

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

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中,顺便写个启动脚本: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,效果如下:

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,效果如下:

线程数: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自定义日志与日志分析的实现的文章就介绍到这了,更多相关JMeter自定义日志与日志分析内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Jmeter线程组的设置方法

    目录 一.事件背景 二.关于线程组的相关设置 一.事件背景 个人感觉自己做性能测试,可以说是轻车熟路了,而且工作多年一直都是这一套测试思路及体系,从未质疑过自己,也许是狮子座的迷之自信吧! 也就在上周让我对自己的测试方法及体系产生了质疑! 为什么?在性能测试的时候,压测500并发通过,人家40并发都过不去. 通俗点说,就是你测试没问题,在人家那测试出问题了,忽略脚本问题,显而易见因为测试方法差异导致测试结果的不同. 1.关于执行方法的差异 同事的做法是直接跑10分钟的稳定性测试,然后上并发数:

  • Jmeter环境搭建及安装步骤

    Jmeter是纯Java开发的, 能够运行Java程序的系统一般都可以运行Jmeter, 如:Windows. Linux. mac等. 由于是由Java开发,所以自然需要jdk环境. Windows下安装步骤如下: 第一步: 安装JDK, 必须JDK1.7以上, 推荐1.8版本 jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK一键安装,无需多讲,默认安装路径即可 环境配置:计算机>属性>

  • JMeter连接Mysql数据库的实现步骤

    JMeter连接mysql数据库是很方便的,下面就演示一下具体的操作. 首先,在本地安装好mysql服务器,建立库和表,并准备数据以供测试使用. 接下来,在[测试计划]中添加JDBC驱动,即下载mysql-connector-bin.jar并添加到classpath中.如下图所示: 当然,如果将这个jar包直接放在JMeter安装目录的lib文件夹中,就无需在[测试计划]中添加了. 当上面的准备工作完成后,就可以在线程组下添加一个[配置元件]–[JDBC Connection Configura

  • 解析Jmeter脱离Jenkins后Ant集成邮件通知问题

    目录 配置ant环境 配置jmeter.properties 配置ant jar包 配置build文件 引用jar包 ant构建 任务计划 总结 之前搭建在本地的Jenkins环境,由于重装系统的原因,环境不能用了.在用jmeter做测试的时候,索性用本地ant构建,运行下来也一样平稳. 结合Jenkins搭建环境,可以参考博文:Jenkins环境搭建(2)-搭建jmeter+ant+jenkins自动化测试环境 我们言归正传,今天来讲下本地的ant构建并发送邮件.配置下来挺顺利也挺简单的,我们

  • JMeter参数化4种实现方式(小结)

    目录 1 参数化释义 2 参数化实现 2.1 CSV Data Set Config CSV简介 CSV实例 注意事项 2.2 User Parameters 2.3 用户定义的变量 2.4 Random 1 参数化释义 什么是参数化?从字面上去理解的话,就是事先准备好数据(广义上来说,可以是具体的数据值,也可以是数据生成规则),而非在脚本中写死,脚本执行时从准备好的数据中取值. 参数化:是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,如登录时利用GET/POST请求方式传递

  • 使用Jmeter进行http接口测试的实践

    目录 前言: 一.开发接口测试案例的整体方案: 二.接口自动化适用场景: 三.接口测试环境准备 四.创建工程: 前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对Http接口的测试. 一.开发接口测试案例的整体方案: 第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档: 第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参

  • Jmeter入门教程

    目录 jemter简介 优点 一.下载 二.安装 三.运行 四.一个简单的压测实例 五.如何查看系统负载何性能瓶颈 jemter简介 jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简 单.因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以.jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在 linux/windows/macos上都可以使用.    jmeter可以做接

  • Jmeter固定定时器的使用详解

    目录 场景举例特殊说明 特殊说明 补充: 统一随机定时器 准确的吞吐量定时器 常数吞吐量定时器 Jmeter之固定定时器的使用 Jmeter的线程组在发送2个请求之间需要设置一个等待时间时,可以用固定定时器解决. 场景举例特殊说明 Jmeter的线程组在发送2个请求之间需要设置一个等待时间时,可以用固定定时器解决. 场景举例 顺序发送2个http请求,在第一个http请求发送完成之后,需要加一个等待时间,再发送第二个http请求. 配置方式,如图所示,在第2个请求中添加->定时器->固定定时器

  • JMeter自定义日志与日志分析的实现

    目录 1 JMeter日志概览 2 JMeter自定义日志 3 JMeter日志分析 1 JMeter日志概览 JMeter与Java程序一样,会记录事件日志,日志文件保存在bin目录中,名称为jmeter.log.当然,我们也可以在面板中直接察看日志,点击右上角黄色标志物可以打开日志面板,再次点击收起. 可见,通过日志可以帮助我们定位一些不容易直接察觉的问题. 另外,JMeter可以很方便地设置日志输出级别: 2 JMeter自定义日志 前面所看到的都是系统日志,也就是JMeter本身所打印的

  • 自定义Laravel (monolog)日志位置,并增加请求ID的实现

    修改 bootstrap/app.php 文件 $app->configureMonologUsing(function($monolog) use ($app) { $monolog->pushHandler( (new Monolog\Handler\RotatingFileHandler( '/var/logs/app/laravel', $app->make('config')->get('app.log_max_files', 5) ))->setFormatter

  • python自动化测试之异常及日志操作实例分析

    本文实例讲述了python自动化测试之异常及日志操作.分享给大家供大家参考,具体如下: 为了保持自动化测试用例的健壮性,异常的捕获及处理,日志的记录对掌握自动化测试执行情况尤为重要,这里便详细的介绍下在自动化测试中使用到的异常及日志,并介绍其详细的用法. 一.日志 打印日志是很多程序的重要需求,良好的日志输出可以帮我们更方便的检测程序运行状态.Python标准库提供了logging模块,切记Logger从来不直接实例化,其好处不言而喻,接下来慢慢讲解Logging模块提供了两种记录日志的方式.

  • Spring Boot如何通过自定义注解实现日志打印详解

    前言 在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的Bug,特别是在开发Controller层的接口时,我们一般会打印出Request请求参数和Response响应结果,但是如果这些打印日志的代码相对而言还是比较重复的,那么我们可以通过什么样的方式来简化日志打印的代码呢? SpringBoot 通过自定义注解实现权限检查可参考我的博客:SpringBoot 通过自定义注解实现权限检查 正文 Spring AOP Spring AOP 即面向切面,是对OO

  • SpringBoot通过自定义注解实现日志打印的示例代码

    前言 在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的Bug,特别是在开发Controller层的接口时,我们一般会打印出Request请求参数和Response响应结果,但是如果这些打印日志的代码相对而言还是比较重复的,那么我们可以通过什么样的方式来简化日志打印的代码呢? SpringBoot 通过自定义注解实现权限检查可参考我的博客:SpringBoot 通过自定义注解实现权限检查 正文 Spring AOP Spring AOP 即面向切面,是对OO

  • springAop实现权限管理数据校验操作日志的场景分析

    前言 作为一个写java的使用最多的轻量级框架莫过于spring,不管是老项目用到的springmvc,还是现在流行的springboot,都离不开spring的一些操作,我在面试的时候问的最多的spring的问题就是我们在平常的项目中使用spring最多的有哪几个点 在我看来无非就两个 spring的bean管理,说的高大上一点就是spring的ioc,di spring的AOP spring是一个很强大的轻量级框架,功能远不止这两点,但是我们用的最多的就是这两点. spring bean 管

  • MySQL日志的详细分析实例

    目录 前言 1.日志刷新操作 2.错误日志 3.一般查询日志 4.慢查询日志 5.二进制日志 5.1 二进制日志文件 5.2 查看二进制日志 5.2.1 mysqlbinlog 5.2.2 show binary logs 5.2.3 show binlog events 5.2.4 show master status 5.3 删除二进制日志 5.4 二进制日志的记录格式 5.5 二进制日志相关的变量 5.6 二进制日志定点还原数据库 总结 前言 官方手册:https://dev.mysql.

  • 阿里云日志服务日志过滤器配置

    日志收集流程 对于日志收集的客户端,其work pipeline通常包括三个过程:Input,Process,Output. Input: 适配各类日志接入源,目前Logtail支持文本文件.Syslog(TCP流式)两种形式数据写入. Process:自定义日志处理逻辑,常见的有:日志切分.日志编码转换.日志结构化解析.日志过滤等等. Output:定义日志输出,例如Logtail以HTTP协议写数据到日志服务. 今天要介绍Logtail在日志处理阶段的两个新功能:转码.过滤 日志转码 日志服

  • 解决Mysql收缩事务日志和日志文件过大无法收缩问题

    一.MS SQL SERVER 2005 --1.清空日志       exec('DUMP TRANSACTION 数据库名 WITH NO_LOG') --2.截断事务日志:      exec('BACKUP LOG 数据库名 WITH NO_LOG') --3.收缩数据库文件(如果不压缩,数据库的文件不会减小      exec('DBCC SHRINKDATABASE(数据库名) ') --4.设置自动收缩      exec('EXEC sp_dboption 数据库名,autosh

  • Python loguru日志库之高效输出控制台日志和日志记录

    1安装loguru loguru的PyPI地址为:https://pypi.org/project/loguru/ GitHub仓库地址为:https://github.com/Delgan/loguru 我们可以直接使用pip命令对其进行安装 pip install loguru 或者下载其源码,使用Python命令进行安装. |2loguru简单使用 from loguru import logger logger.info("中文loguru") logger.debug(&qu

随机推荐