性能测试 —— 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()打印错误信息


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即可查看日志详情

三、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/sQPS:9000/s

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/749280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业制造业怎样进行进行智能、高效的机台文件管控?

对于工业制造业而言,机台是极为关键的基础设施,是正常生产经营的前提。工业制造业的机台包括很多种类,数控机床、防静电工作台、旋转工作台、机床工作台、车床等。 工业制造业机台产生的文件类型也有很多种类,如: 工艺…

NUC 14 Pro+:超越想象,夏日必备神机

夏日最让打工人意难平的大概是呼呼作响的主机风扇,即使在凉爽的空调房中,轰响的主机也让人心浮气躁。要怎样才能与它和平共处?它怎么就不明白,安安静静的陪伴真的很重要! 这时候NUC 14 Pro 就是你最佳的伙伴 &#xff…

【专业性强】地球科学SCI期刊,中科院2区,学术影响力大

一、期刊名称 GIScience & Remote Sensing 二、期刊简介概况 期刊类型:SCI 学科领域:地球科学 影响因子:6.7 中科院分区:2区 三、期刊征稿范围 GIScience & Remote Sensing是一本完全开放获取的期刊,发表…

音视频开发30 FFmpeg 视频编码- 流程以及重要API,H264编码原理说明,该章节使用h264编码说明

一.H264编码原理 1 视频为什么需要进行编码压缩 ◼ 一张为 720x480 的图像,用 YUV420P 的格式来表示,其大小为: 720*480*1.5 约等于 0.5MB 。 ◼ 如果是 25 帧, 10 分钟的数据量 0.5M*10*60*25 7500MB -> 7GB 多 ◼ …

RestTemplate修改默认转换器,使用FastJsonConverter

问题描述: 在使用RestTemplate发送POST请求时,发现发送的数据并未按配置的JSONField转换,导致服务方一直收不到参数 排查过程: 将itemList改成Items传输即可 原因分析: RestTemplate有默认的转换器,所以…

引入基于图的增强框架实现大模型的可控文本生成

尽管LLMs能够生成丰富多样的文本,但它们在生成特定属性文本时仍面临挑战。例如,如何确保生成的文本不仅语言流畅、语义准确,同时还具有所需的情感色彩或避免包含不当内容,是一个亟待解决的问题。传统的可控文本生成(CT…

2. jenkins发布java项目

jenkins发布java项目 一、环境描述二、部署tomcat业务服务器三、部署git服务器,上传测试代码1、部署git服务器2、上传测试代码 四、jenkins对接组件1、安装必要的插件2、对接git客户端3、对接maven工具4、配置maven需要的jdk5、配置gitlab服务器的连接6、在jenkins上…

windows下载jdk并安装步骤(保姆级教程)

一、下载jdk 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二、双击下载好的jdk 更改安装目录然后点击下一步 然后会弹出jre的安装,需要选择路径(注意:这里的路径必须跟前面的jdk在…

如何在Java中使用Levenshtein距离实现字符串相似度匹配

在许多应用中,我们需要根据用户输入的问题找到最匹配的已知问题。Levenshtein距离(编辑距离)是一个强大的工具,可以帮助我们衡量两个字符串之间的差异,并进一步计算它们的相似度。本文将使用一个具体的例子来展示如何在…

ESXI存储设备已经分区,无法创建数据存储。

问题:ESXi 存储设备已经分区完成,并且有 VMFS 文件系统,无法创建数据存储,选项是灰色。 解决办法:通过命令行工具 在现有的 VMFS 分区上创建数据存储。 在现有的 VMFS 分区上创建数据存储 1.ESXI开SSH2.windows自带CMD登入ESXI。&…

创意学生木工工具——木工锯床

开展创意木工课程丰富了学校的课程多样性,强化了实践教育,并实现了跨学科的融合,在教育理念方面,创意木工课程强调了学生的主体地位,注重了学生的全面发展,并倡导了实践育人的理念,培养学生的综…

NGINX配置web文件服务

一、需求描述 系统需要提供文件(pdf、图片)等上传后支持预览功能。 二、实现方式 2.1 文件权限配置 chmod arwx -R public/chmod 是更改文件权限的命令。-R 是递归选项,表示更改目录及其所有子目录和文件的权限。arwx 是权限设置&#xf…

零知识学习之DPDK与RDMA(2)—— 认识DPDK(2)

接前一篇文章:零知识学习之DPDK与RDMA(1)—— 认识DPDK(1) 本文内容参考: 《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社 https://blog.51cto.com/u_15301988/5181201 特此致谢&…

FineReport填报列权限控制

近期换东家啦,又回归使用帆软啦,对于填报报表列权限的控制我这边顺带记录一下 首先讲解下场景:填报报表需要不同角色决定对不同列是否有填写或者查看权限 以填写权限为例,首先考虑用到的是 帆软自带的权限编辑,其次考虑…

SQL Server2014 公司速通版

1、SQL Server 了解 SQL Server 2014是Microsoft公司推出的一款关系型数据库管理系统,它在数据库领域具有广泛的影响力和应用。 1.1 SQL Server 2014 主要特性【简单了解就行】 SQL Server 2014 引入了一系列新特性和改进,这些特性和改进旨在提高性能、增…

Charles 证书迁移/复制,实现手机安装一次证书可以连接多个设备的 charles 效果

如果你希望在一个手机上安装一次证书,但是使用这个手机可能在不同的时候去连接你自己安装了Charles的不同设备。比如你在公司有有一个电脑,你在家里也有一个电脑,甚至还有一个笔记本等。 如果想实现只给手机安装一次证书,就可以都…

基于halcon的眼在手外(Eye-to-Hand)标定

前言 上个月写了一个《基于halcon的眼在手上(Eye-in-Hand)标定》的文章,通过官方的示例代码进行了简单的叙述,想学习的小伙伴可以点击链接进行学习。之前博主认为眼在手上(Eye-in-Hand)的案例更多&#xff…

Embedding是什么?为什么重要?

本文为 Simon Willison 在 PyBay 上发表的演讲视频的文字改进版 原文链接: https://simonwillison.net/2023/Oct/23/embeddings/ 演讲视频链接: https://youtu.be/ArnMdc-ICCM Embedding 是一个非常巧妙的技术,但常常和一堆令人生畏的术…

国内首现AIGC环幕巨屏作品《大闹天宫》人工智能已经不知不觉的出现在我们身边了!

前言 春节期间在佛山紫薇星空光影艺术馆,由元响空间影音打造的AIGC作品《大闹天宫》迎来了第一批线下体验者,揭开一场深度融合了AIGC创作和空间影音技术的视听盛宴。 没想到全网火爆的AIGC,竟然已经真真切切的出现在了我们身边。春节期间在…

YOLOv10训练自己的数据集(图像目标检测)

目录 1、下载代码 2、环境配置 3、准备数据集 4、yolov10训练 可能会出现报错: 1、下载代码 源码地址:https://github.com/THU-MIG/yolov10 2、环境配置 打开源代码,在Terminal中,使用conda 创建虚拟环境配置 命令如下&a…