linux安装jmeter及案例实记【纯干货,无废话】

一. 准备工作

在Linux服务器先安装jdk,配置环境变量

  1. 官方的下载地址:https://www.oracle.com/java/technologies/downloads/#java8-linux
    国内下载地址:http://www.codebaoku.com/jdk/jdk-index.html
  2. JDK的安装步骤:https://blog.csdn.net/gufenchen/article/details/105581495
Linux安装jdk小插曲

按照上面的第2步操作后发现Linux的环境变量不生效,首先要了解Linux读取环境变量的顺序如下

1.首先读入的是全局环境变量设定目录/etc/profile,然后根据其内容读取额外的设定的文档,如 /etc/profile.d和/etc/inputrc

2.然后去用户家目录下,读取~/.bash_profile,否则读取~/.bash_login,再否则~/.profile,这三个文档设定基本上是一样的,存在读取优先关系

3.然后再去用户家目录下,读取~/.bashrc

参考的资料如下:
https://blog.csdn.net/SZJXQ2021/article/details/121765006
https://blog.csdn.net/u011630575/article/details/49839893
https://cloud.tencent.com/developer/article/1758884
https://blog.51cto.com/u_7961702/5328998
https://blog.51cto.com/zpf666/2334770
cat ~/.bashrc
# jdk11 setting for path 
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.1
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

配置环境变量

  1. Jmeter下载地址:https://jmeter.apache.org/download_jmeter.cgi
    在这里插入图片描述

二. 开始安装

  1. 在linux系统下创建:mkdir jmeter_lhk,把下载好的apache-jmeter-5.5tgz上传到服务器的jmeter_lhk目录下,使用xftp或者electerm)
  2. 赋予安装包运行权限: chmod 755 apache-jmeter-5.5.tgz
  3. 将Jmeter安装包解压到当前目录:tar -zxvf apache-jmeter-5.5.tgz
  4. 在当前目录下创建存放脚本、报告、结果的目录,执行:mkdir testscript (脚本目录),mkdir testreport(报告目录),mkdir testresult(结果目录),mkdir testlogs(日志目录)
  5. 配置环境变量:vim /etc/profile ,在/etc/profile最后一行插入下面一段保存。
export JMETER_HOME=/home/xxxai/jmeter_lhk/apache-jmeter-5.5
exportCLASSPATH=${JMETER_HOME}/lib/ext/ApacheJMeter_core.jar:${JMETER_HOME}/lib/jorphan.jar:${CLASSPATH}
export PATH=${JMETER_HOME}/bin:$PATH

Q : E505: “/etc/profile” is read-only (add ! to override)
A: Linux下编辑文档报错is read-only (add ! to override) 解决方法:
1,你要先强制退出
:q!
2,退出后在执行
:sudo !!
3,再次编辑你要编辑的内容
vim …
4,再保存就可以了
:wq!

  1. 执行:source /etc/profile 使配置生效。
  2. 验证jmeter是否安装成功:jmeter -v ,如下图标说明配置成功了
    在这里插入图片描述
    参考资料:https://blog.csdn.net/hangzhang_joker/article/details/120437352
  3. JMeter插件的下载地址:https://jmeter-plugins.org/downloads/all/

下载完成之后,例如:plugins-manager.jar,以及其他的插件,下载完成之后,将下载的plugins-manager-1.6.jar文件放置到对应的jmeter/lib/ext目录下面,然后重启JMeter即可。

  1. 提前创建压测脚本存放的路径,路径创建规则如下
    在这里插入图片描述

三. 执行压测

1. 非 GUI 模式执行jmx脚本

类型:非参数化压测
使用命令在非GUI模式下运行jmeter脚本并生成html测试报告,参考命令如下:

jmeter -n -t test.jmx -l test.jtl -e -o /path
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t:source.jmx 脚本路径
-l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在
-e:在脚本运行结束后生成html报告
-o:用于存放html报告的目录,(需命令为不存在的文件夹)
-h 帮助 -> 打印出有用的信息并退出
-r 远程执行 -> 启动远程服务
-H 代理主机 -> 设置 JMeter 使用的代理主机
-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
-J参数名 本地执行命令的参数名称
-G参数名 远程执行命令的参数名称 例如:jmeter -n -t test1.jmx -l logfile1.jtl -H 192.168.1.1 -P 8080

jmeter -n -t test.jmx -l test.jtl -e -o /jmeter/test/report

参考:https://www.cnblogs.com/cjw996/articles/16088613.html

事例展示:

官方命令模版: jmeter -Jthreads=<Number of threads> -Jrampup=<rampup in seconds> -Jduration=<duration in seconds> -Jiterations=<Number of iterations, -1 means infinite> -e -o <report output folder>

在这里插入图片描述

${__P(threads,10)}   ,默认10并发
${__P(rampup,1)}     ,默认启动时间1s
${__P(iterations,-1)},默认永远循环
${__P(duration,60)}  ,默认持续时间60s

类型:参数化压测

  1. 首先在GUI模式中把脚本调试通过,然后使用命令行进行压测执行
  2. 配置上传文件参数(参数化文件要填写绝对路径)
  3. 生产csv文件,含有请求的变量参数
  4. 参考案例:https://www.jb51.cc/jmeter/3815915.html

Jmeter四大随机数

随机数
https://blog.csdn.net/qq19970496/article/details/101027184
随机日期
https://blog.csdn.net/qq19970496/article/details/101027813
随机字符串
https://blog.csdn.net/qq19970496/article/details/101027925
随机变量
https://blog.csdn.net/qq19970496/article/details/101028055

执行压测命令

jmeter -Jthreads=130 -Jrampup=1 -Jiterations=-1 -Jduration=300 -n -t ./testplans/v4v4v4.jmx -l ./testresult/testV4Result032.jtl -e -o ./testreport/testV4report032

压测过程及结果
在这里插入图片描述

名词解释:

summary =  60 in 00:00:05:在5秒内产生的总请求数是60个,其中的时间段是从脚本运行开始计算到当前时间为止,一般在脚本运行过程中主要关注 “summary=” 信息即可

11.8/s:系统每秒处理的请求数,相当于TPS

Avg:   83:平均响应时间

Min:   43:最小响应时间

Max:  248:最大响应时间

Err:     0 (0.00%):错误数/率

Active: 100:活动的线程数

后台执行Jmeter

Creating summariser <summary>
Created the tree successfully using /opt/JMeter/TestPlan/test.jmx
Starting the test @ Tue Jun 25 16:22:12 CST 2013 (1372148532713)
Waiting for possible shutdown message on port 4445
summary +   2075 in   107s =   19.4/s Avg:    51 Min:    12 Max:  2318 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary +   3753 in   180s =   20.8/s Avg:    47 Min:    12 Max:   849 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary =   5828 in   287s =   20.3/s Avg:    49 Min:    12 Max:  2318 Err:     0 (0.00%)
summary +   3864 in   180s =   21.4/s Avg:    46 Min:    11 Max:   634 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary =   9692 in   467s =   20.7/s Avg:    48 Min:    11 Max:  2318 Err:     0 (0.00%)
summary +   3847 in   180s =   21.4/s Avg:    46 Min:    11 Max:   697 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary =  13539 in   647s =   20.9/s Avg:    47 Min:    11 Max:  2318 Err:     0 (0.00%)
日志解析:

summary +是这三分钟的数据,

summary =是累计到当前时刻所有的数据

以第三行数据为例,5828是发出的请求数目,287s是时间, 20.3是每秒发出的请求,即吞吐量,

Avg, Min, Max分别是平均响应时间,最小响应时间和最大响应时间,响应时间指的是从请求发出到收到响应的时间,单位是ms,

Err后面跟的数据分别是错误数和错误比例。
对于summariser报告,可以通过写一个简单的脚本来解析并作图形化展示,下面是用Python写的一个简单脚本,可以画平均时延和吞吐量,使用方法是

参考:http://blog.csdn.net/just_lion/article/details/9209253

import matplotlib.pyplot as plt
import re
import sys

avgtime_data=[]
mintime_data=[]
maxtime_data=[]
throughput_data=[]

logfile=open(sys.argv[1])
try:
    while True:
        line=logfile.readline()
        if line=='':
            break
        if line.startswith('summary ='):
            result=re.split(r'\s+', line)
            avgtime_data.append(result[8])
            throughput=result[6]
            throughputvalue=throughput[:-2]
            throughput_data.append(throughputvalue)
finally:
    logfile.close()

plt.figure(figsize=(8,4))
plt.ylim(0,60)
plt.plot(avgtime_data,color="red",label="Avg ResponseTime (milliseconds)")
plt.plot(throughput_data,color="green",label="ThroughPut (/s)")
frame = plt.gca()
frame.axes.xaxis.set_ticklabels([])
plt.xlabel("Duration, 2013/06/25 16:30:00 -- 2013/06/28 6:00:00, about 60 hours")
plt.title("sundong Jmeter Test Report")
plt.legend()
plt.show()
一、命令,为了防止服务器挂掉,导致执行的压测脚本停止执行,所以一般在测试稳定性的时候,在后台执行压测脚本。(该命令执行的时候在一行不是三行),nohup 和&中间加上执行的命令,就是在后台执行。注意中间的一些空格。

nohup jmeter -n -t /root/jmeter/script/mixture_znkf.jmx -l  /root/jmeter/znkf/jtl/wd_znkf_0424_24h.jtl -j 

/root/jmeter/znkf/log/wd_znkf_0424_24h.log &

 例如:

 二、查看nohup执行的进程

jobs -l     ---没有关闭xshell的界面,如果关闭xhell的界面,查询不到进程

ps -ef |grep jmeter  

kill -9 线程ip

2. GUI模式运行jmx脚本

参考:https://www.likecs.com/show-204224058.html
Windows 安装配置参考:https://mp.csdn.net/mdeditor/99716655

shell编写一个简单的jmeter自动化压测脚本
https://blog.csdn.net/xu547823501/article/details/85859537

登录机器,在/home/xxxai/jmeter_lhk/apache-jmeter-5.5/bin下找到jmeter.sh 文件,在当前目录打开终端,执行./jmeter.sh 如下图所示

l-bash: ./jmeter.sh: Permission denied
解决办法:jmeter.sh的执行权限改改,是权限不够
chmod 777 jmeter.sh

在这里插入图片描述
在这里插入图片描述

执行demo:

只需一行命令:sh jmeter.sh -n -t http.jmx -l result_*.jtl

sh jmeter.sh  -n -t my-script.jmx -R 10.6.5.31,10.6.5.35,10.6.5.36,10.6.5.37,10.6.5.72 -l 8.jtl 

上面一条命令应该可以满足大部分需求。

-n:使用命令行模式运行
-t:指定要运行的jmx脚本
-R:指定使用那些slave节点压测
-l:压测记录保存在哪里 使用-R指定节点时,当然要首先在这些节点上启动jmeter-server的服务,-l指定日志,jmeter运行过程中的所有请求记录,都会保存在这个jtl文件中。

随便找一个可执行的脚本放到/opt/apache-jmeter-4.0/bin/script 目录,然后执行:
sh jmeter.sh -n -t ./script/云鹊医.jmx -l ./report/demo_jtl
解释:运行 ./script 目录下的 云鹊医.jmx ,将报告生成到 ./report 目录,名字叫 demo_jtl

参数介绍:
sh jmeter.sh :启动shell脚本
-n : 表示以nogui方式运行测试计划
-t 表示测试计划,后面跟测试计划名称
-l 表示测试结果,后面跟测试结果文件名称
- 跑完之后可以下载jtl文件导入到我们的jmeter软件中添加监听器查看结果
  • 也可以通过jtl转换成html,操作方式:sh jmeter.sh -g jtl文件 -o html路径 操作如下:
  • 1.生成文件:sh jmeter.sh -g ./report/demo_jtl -o ./report/demo_html 解释:根据 ./report/ 目录下的 demo_jtl 文件生成一个 demo_html的文件(这个文件包含HTML、css)
    2.将文件压缩: zip -r result.zip result/ 将result 目录压缩为result.zip
    3.将压缩文件下载到本地:sz ./result.zip

四、压缩下载报告

最后将生成报告的文件进行压缩打包并下载到本地,然后可以查看结果

tar -zcvf 压缩文件名 .tar.gz 被压缩文件名
scp root@121.37.99.55:/test/报告.gz /本地文件夹

结果文件
结果文件即之前保存过的result.jtl格式文件
该文件可以使用 GUI 模式下的聚合报告查看,可以打开 JMeter GUI 界面 -> 测试计划 -> 添加线程组 -> 添加聚合报告 -> 点击 “浏览…” 按钮找到你刚生成的 jtl 文件打开即可统计结果进行分析。
在这里插入图片描述

文件打开有错误,可以参考如下🔗进行解决
https://cloud.tencent.com/developer/article/2035742
https://blog.csdn.net/whataryou/article/details/121804646
https://www.yisu.com/zixun/111601.html
https://www.cnblogs.com/jxba/p/16442454.html
https://www.bbsmax.com/A/x9J2LDeVd6/

使用命令自动生成HTML性能报告和各种指标的图表
修改jmeter.properties
jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss
修改user.properties统计间隔
jmeter.reportgenerator.overall_granularity=1000

五. jmeter之jtl文件解析

jemter中结果都存在.jtl文件。

保存下来的jtl文件有如下项:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency

请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属的线程,数据类型,是否成功,失败信息,字节,延迟。


————————————————
版权声明:本文为CSDN博主「桃子さん」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/htsssss/article/details/79444139

在这里插入图片描述

根据字段名称,这个逗号分隔的列表似乎是JMeter测试结果CSV(逗号分隔值)文件的列头信息。

每个字段名称及其常见含义如下:

- timeStamp - 时间戳,记录测试时的时间
- elapsed - 执行时间
- label - 样本标签 
- responseCode - HTTP响应代码 
- responseMessage - HTTP响应消息
- threadName - 线程名称
- dataType - 数据类型
- success - 是否成功
- failureMessage - 失败信息
- bytes - 字节数
- sentBytes - 发送字节数
- grpThreads - 线程组内线程数
- allThreads - 总线程数
- URL - 请求的URL
- Latency - 延迟
- IdleTime - 空闲时间
- Connect - 连接时间

所以这是一个典型的JMeter测试结果文件,包含了请求的重要统计信息,比如响应时间、线程数、延迟等数据。

这可以帮助解析和理解JMeter测试结果,用于找到性能瓶颈等信息。

我们知道命令行的方式执行完成jmeter后,会生成jtl文件,里面打开后就是一行行的测试结果,

<httpSample t="1" lt="1" ts="1450684950333" s="true" lb="app.testdelay" rc="200" rm="OK" tn="appdelay-3000g3m 1-1" dt="" by="2265"/>
  • t表示从请求开始到响应结束的时间
  • lt表示整个的空闲时间
  • ts表示访问的时刻
  • s表示返回的结果true表示成功,false表示失败
  • lb表示标题
  • rc表示返回的响应码
  • rm表示响应信息
  • tn表示线程的名字“1-138”表示第1个线程组的第138个线程。
  • dt表示响应的文件类型
  • by表示请求和响应的字节数
    运行完成后,可以在指定的目录下看到生成结果文件夹/lihangkun/jmeter/testreport
https://codeantenna.com/a/jeqBEDagYB

当把JMeter使用命令行运行后,JMeter会把结果保存到一个指定文件中(使用 -l 参数指定)。这个文件记录了每条Query的响应时间、状态等,如:

*<?xml version="1.0" encoding="UTF-8"?>
<testResultsversion="1.2">
<httpSamplet="232"lt="232"ts="1305880045755"s="true"lb="HTTP Request"rc="200"rm="OK"tn="CardEye 1-1"dt="text"by="2508"/>
</testResults>*

这其中:

t 是该Query的响应时间
ts 是该Query的发送时间,以毫秒为单位
rc 是返回码
 **Usage**
java -jar JTLParser.jar 
 --jtlFile JTLFile                      :需要解析的JTL文件
 --percentFields PercentFields          :需要展示的不同百分比下的Query响应时间,使用逗号分割
 --responseTimeFields ResponseTimeField:需要展示的不同响应时间段的Query数,使用逗号分割

**默认使用**
我这个JTLParser就是来解析这个文件,然后返回一些常用的性能结果指标,返回的性能指标有:

QPS:平均一秒内处理的Query数
Latency: 平均响应时间
最大响应时间
Query Success Number:返回码是200的Query数
Query Failed Number:返回码不是200的Query数


**默认只要使用\-\-jtlFile接一个JTL文件就可以,可以得到类似如下的结果:**

FROM:                   05/20/1104:27:25
END:                    05/20/1104:37:25
SendedQueryNumber:    11721
TotalSpendedTime(s):  599.72
QPS:                    19.54
Latency(ms):            43
MaxResponseTime(ms):  403
QuerySuccessNumber:   11721
QueryFailedNumber:    0

**展示不同百分比下的Query平均响应时间**
运行类似:java -jar JTLParser.jar --jtlFile YourJTLFile --percentFields 40,70,80,90就可以得到如下结果:

40Percentile(ms):      17
70Percentile(ms):      30
80Percentile(ms):      35
90Percentile(ms):      39

**展示的不同响应时间段的Query数**
运行类似:java -jar JTLParser.jar --jtlFile YourJTLFile --responseTimeFields 30,40,50就可以得到类似如下结果:

Latency>=30(ms):      7665    65.40%
Latency>=40(ms):      6288    53.65%
Latency>=50(ms):      4951    42.24%

下载testreport文件,然后用浏览器打开index.html文件就能看到报告内容了。
Dashboard
Test and Report information
在这里插入图片描述

APDEX (Application Performance Index)
基于容忍和满足的阈值,为每个事务计算APDEX
在这里插入图片描述

file:文件名
start time:开始时间
end time:结束时间
filter for display:过滤器
APDEX(Application performance Index):应用程序性能指标,计算每笔交易APDEX的容忍和满足阈值基于可配置的值,范围在 0-1 之间,1表示达到所有用户均满意
T(Toleration threshold):容忍或满意阈值
F(Frustration threshold):失败阈值
requests summary中KO指失败率,OK指成功率
备注:
“道琼斯指数帮助人们衡量股市行情变化,Apdex 指数帮助您衡量用户心情变化。“
性能指数,Apdex(Application Performance Index)是一个国际通用标准,Apdex 是用户对应用性能满意度的量化值。它提供了一个统一的测量和报告用户体验的方法,把最终用户的体验和应用性能作为一个完整的指标进行统一度量。
参考路径:http://oneapm.udesk.cn/hc/articles/515
Requests Summary
显示成功、失败的请求
在这里插入图片描述
在这里插入图片描述

  • 解释:
  • statistics:数据分析, 基本将 Summary Report 和 Aggrerate Report 的结果合并,含义分别为:
  • 请求名称、请求数目、失败请求数目、错误率(本次测试中出现错误的请求的数量/请求的总数)、90%用户响应时间、95%用户响应时间、99%用户响应时间、吞吐量(吞吐量——默认情况下表示每秒完成的请求数Request
    per Second,当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的
    Transaction per Second
    数)、Kb/sec(每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec)、最小响应时间、最大响应时间
  • errors:错误情况,依据不同的错误类型,将所有错误结果展示
  • Chart-Over Time-Response Times Over Time:随着时间推移响应时间变化趋势图
    在这里插入图片描述
  • 可以看到历时3分钟,响应时间由0.334ms慢慢下滑到0.225ms

  • Chart-Over Time-Bytes Throughput Over Time:随着时间推移每秒接收和请求字节数变化趋势图,蓝色为每秒发送字节数,黄色为每秒接收字节数:
    在这里插入图片描述

  • Chart-Over Time-Latencies Over Time:随着时间推移平均响应延时趋势图,记录客户端发送请求完成后,服务器端返回请求之前这段时间
    在这里插入图片描述
  • 由于我测试用的并发请求百度,请求都被拒绝了,并没有收到从服务端返回的请求,所以这里看到一条0的线
  • 以上就是over time栏的所有图表,除了over time还有throuput和response times栏
  • throuput栏:
    在这里插入图片描述
  • Throughput栏包括:
  • hits per second:每秒点击率
  • codes per second:每秒状态码数量
  • Transactions per second:每秒事务量
  • Response Time Vs Request: 响应时间点请求的 成功/失败 数
  • Latency Vs Request: 延迟时间点请求的 成功/失败 数
  • Response Times栏:
    在这里插入图片描述
  • response times栏包括:
  • Response Time Percentiles: 响应时间百分比
  • Active Threads Over Time: 随着时间推移活跃线程数
  • Time Vs Threads: 测试过程中的线程数时续图
  • Response Time Distribution: 响应时间分布
    • 第二种:使用之前的测试结果,生成测试报告
  • ./jmeter -g baidu_requests_results.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport
  • -g : 指定已存在的测试结果文件
  • -e :测试结果后,生成测试报告
  • -o : 指定测试报告的存放位置
  • -o 指定的文件及文件夹,必须 不存在 ,否则执行会失败
  • 第一种和第二种其实最终都依赖生成的jtl文件,将jtl文件生成测试报告。双击测试报告中的index.html文件即可查看报告内容
  • 2:插件模式将jtl转成测试图表
    • 第三种:利用GUI页面图形化展示jtl文件数据
  • 下载插件JMeterPlugins-Extras.jar、CMDRunner.jar、JMeterPlugins-Standard.jar放到本地windows机器的jmeter的lib/ext目录下,插件可以去官网下载,这里我也给出我的插件地址(只需解压缩拷贝其中lib包下的jar文件到lib/ext目录下即可):http://pan.baidu.com/s/1pLexxcZ
    密码:f4rb
  • 在windows机器上需要安装jmeter,下载的插件放在jmeter安装目录的lib/ext目录下,然后去bin目录下双击jmeter.bat打开jmeter的gui页面
  • 在线程组下面添加你想要的监听器,然后点击监听器页面的浏览按钮,选择你想浏览的jtl文件,等待一会,就能出现你想要的图形报告
  • 以jp@gc - Bytes Throughput Over Time为例:
  • 第一步:添加该监听器,当我们把下载的jar包放到lib/ext下面然后重启jmeter后,监听器中就会多出很多的扩展监听插件,选择你关注的结果插件即可
    在这里插入图片描述
  • 第二步:选择你要浏览的jtl文件,监听器添加成功后,在监听器页面都会有一个浏览按钮,点击浏览按钮找到并选择你要看的jtl文件
    在这里插入图片描述
  • 第三步:点击打开后,等待一会,就能在相应的监听器页面看到你想要看到的结果了
    在这里插入图片描述
  • 如果你还想要看其他的数据比如聚合报告,吞吐量,响应时间等等一切你关心的数据,按上面的3个步骤走一遍就行
    • 第四种:利用CMDRunner.jar插件用命令行的方式将jtl转成想要的png或者csv形式,这个方式比3的好处在于3利用gui页面有时jtl文件数据量很大可能要等很久
  • 首先进入libext目录下,然后去执行响应的命令
  • cd F:apache-jmeter-3.0apache-jmeter-3.0libext
  • java -jar CMDRunner.jar --tool Reporter --generate-png baidu_ThreadsStateOverTime.png --input-jtl baidu_requests_results.jtl
    –plugin-type TransactionsPerSecond
  • cmd运行上面的命令,结果在libext目录下可以看到生成了一个baidu_ThreadsStateOverTime.png图片:
    在这里插入图片描述
  • 双击打开png图片,就能看到想要的图形效果
    在这里插入图片描述
  • 注意此处的的图片是断续的共15分钟,这跟jtl有关,测试时jtl文件如果不删除或清空,下一次测试的数据会追加到jtl的末尾,所以可以看到上面的图片中我的测试结果分了3次3分钟,其余时间其实是并没有进行测试的情况。
  • 命令解析:
  • 命令最后有个命令类型:TransactionsPerSecond,除了这个还支持如下命令类型:
  • ThreadsStateOverTime、 BytesThroughputOverTime、 HitsPerSecond、 LatenciesOverTime、 ResponseCodesPerSecond、 ResponseTimesDistribution、
  • ResponseTimesOverTime、 ResponseTimesPercentiles、 ThroughputVsThreads、 TimesVsThreads、 PageDataExtractorOverTime、
    PerfMon
  • 我们可以用一个windows的bat批处理文件,来执行上面的命令,命令执行完以后去相应目录下收取结果png图片就可以了
    在这里插入图片描述
  • 最后一行PerfMon:服务器参数随时间变化曲线注意这个需要在jmx脚本中添加,服务器监控,要指定ip、端口、监控项,还需要指定perfMon的输出文件,或者在命令行指定,如./jmeter
    -n -t baidu.jmx -l 2.jtp -JforcePerfmonFile=true,这样会输出在当前路径。
  • bat命令为:对文件名称和生成的jtl文件名以及CMDRunner.jar包路径可根据需要修改
  • 按 Ctrl+C 复制代码
  • 按 Ctrl+C 复制代码
  • 双击该bat文件后,我们在libext目录下去看,就可以看到生成了很多png图片
    在这里插入图片描述
  • 关心哪个图表直接双击打开即可,这样就方便很多了。
  • 当然除了生成png,还可以生成csv文件,如:
  • 按 Ctrl+C 复制代码
  • 按 Ctrl+C 复制代码
  • 双击该bat文件,然后去对应目录下就能看到生成了很多csv文件,比如AggregateReport.csv就是聚合报告
    在这里插入图片描述
  • 好了,以上就是jmeter的jtl文件查看方式了
  • 复制到这里方便自己查看
  • 源文档:http://www.cnblogs.com/miaomiaokaixin/p/6118081.html

六. 分布式压测

https://www.cnblogs.com/yandh/p/13879847.html
http://t.zoukankan.com/wangxiaoqun-p-12800109.html
https://www.jianshu.com/p/347d889cc327
https://blog.csdn.net/sankoudoudou/article/details/120314115
https://www.jianshu.com/p/2f57c4d7d639
https://zhuanlan.zhihu.com/p/487175865

七.Jmeter使用shell启动

参考:https://blog.csdn.net/zeeslo/article/details/120037571

背景
 在linux中执行Jmeter脚本时候,大家是否一直使用【jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]】命令执行,是否想过通过shell命令执行或者python执行,今天简单介绍下shell命令执行,前置条件需要配置Jmeter环境变量,如果没有配置,需要在脚本中修改相应位置。

在这里插入图片描述

shell脚本如下:
基础版

#/bin/bash
#入参:并发数、文件时间戳. eg: . jmeter_params_244_1203.sh 1 1203002
#/home/xxxai/jmeter_lhk/apache-jmeter-5.5/bin/jmeter -Jthreads=$1 -Jrampup=1 -Jiterations=-1 -Jduration=120 -n -t ./testplans/187ai/244-187-480x640-2022111218.jmx -l ./testresult/187-480640/187-result_$2.jtl -e -o ./testreport/187-480640/187aifirereport_$2

# 自定义参数执行jmeter脚本,注意:前面有个点
. jmeterParams_8g16_to_8g24_0202.sh 1 0202001

升级版

脚本执行方法:

给予可执行权限:chomd a+x startJmeter.sh
执行方法:bash startJmeter.sh 脚本名字 并发数 执行时间 备注

在这里插入图片描述

shell脚本代码(./ta.sh ; . ta.sh ;sh ta.sh ;bash ta.sh)

#前置条件需要配置 JMeter 环境变量,如果没有配置,需要在脚本中修改相应位置,看上面解释
#!/bin/bash
# author:lihangkun
# 2023/02/05/16/00

#定义相应参数如下:
caseName=$1  #脚本名字
numThreads=$2  #并发数/ 线程数 
durationTime=$3  #执行时间
mark=$4    #备注

echo -e "\033[32m 正在检查输入参数的合法性... \033[0m"

echo testcaseName:${caseName}_${numThreads}_${durationTime}_${mark}
if [ -z ${caseName} ];then
        echo -e "\033[31m请输入脚本名,线程数,执行时间,备注! 输入脚本名\033[0m"
        echo "ERROR"
        exit 1
fi
if [ -z ${numThreads} ];then
        echo -e "\033[31m请输入脚本名,线程数,执行时间,备注! 输入线程数\033[0m"
        echo "ERROR"
        exit 1
fi
if [ -z ${durationTime} ];then
        echo -e "\033[31m请输入脚本名,线程数,执行时间,备注! 输入备注\033[0m"
        echo "ERROR"                                                                                                                          
        exit 1
fi

echo -e "\033[32m 压力机开始执行,请等待... \033[1m"

filename=${caseName}_${numThreads}_${durationTime}_${mark}

echo -e "filename:"${filename}

currentTime=`date "+%Y%m%d-%H:%M:%S"`
echo -e "JMeter开始压测时间:${currentTime}"

#压力机开始执行压测命令
jmeter -Jthreads=${numThreads} -Jrampup=1 -Jiterations=-1 -Jduration=${durationTime} -n -t ./testplans/192/${caseName}.jmx -l ./testresult/192-480640/${filename}.jtl -j ./testlogs/192-480640/${filename}.log -e -o ./testreport/192-480640/${filename}

#休眠5s,让程序跑完结束
sleep 5
endTime=`date "+%Y%m%d-%H:%M:%S"`
echo -e "JMeter结束压测时间:${endTime}"

echo -e "\033[32m 本次压测已结束 \033[0m"
                                             

在这里插入图片描述

总结
 通过shell脚本顺利执行Jmeter脚本,如果是长时间执行可以采用后台执行方法,加上【nohup sh startJm.sh 脚本 并发数据 执行时间 备注 &】这样执行不用担心ssh窗口执行Jmeter失败,通过tail -f nohup.log查看执行日志。

相关系列:
性能工具之 JMeter 使用 shell 脚本快速执行
性能工具之 JMeter 使用 Python 脚本快速执行

八. Jmeter压测结果分析和优化思路(持续更新…)

先看压测报告表
在这里插入图片描述
主要从下面几个维度去找问题:
(1)查看错误率是否在可容许范围内。
压测线程一多,肯定会有错误率,就算是一个简单的return 0;也会有响应超时。我们可以判断在这种压力环境下,对应的错误率是否允许的。同时我们可以通过优化代码,优化SQL,提高响应速度。

(2)TPS吞吐量是否满足业务场景需求。
压测过程中随时留意TPS变化,查看最大TPS吞吐量大约为多少,是否满足业务需求,记录一下最高TPS的并发数走位最优并发数。如果TPS每秒处理数大于并发数,可以再继续增加线程,如果TPS小于并发数,则要把并发线程数减少。

(3)随时保持与被压服务器的内存,CPU使用率进行对比。
及时发现问题,优化代码质量(例如是否产生过多的Full GC , 及时调整内存分配,是否有慢SQL,是否有某种条件产生的死循环,大对象和容器的创建是否合理)。

九. 压测问题积累

  1. Jmeter — Error generating the report: java.lang.NullPointerException
    在用命令行执行Jmeter时,出现了 Error generating the report: java.lang.NullPointerException, 在网上查了好久也没有找到解决方案,但是给了我一些解决问题的思路,感觉也很棒。
      解决思路是,CMD中只给出了一个很粗的错误提示,但是你可以从jmeter.log中去找具体的原因, 地址在: “apache-jmeter-5.3apache-jmeter-5.3injmeter.log”中可以很容易的看到问题所在。
      我这次遇到的问题是jmeter的脚本中的一些读取文件的地址跟实际的地址不一致造成的nullPointerException。 修改后运行正常,之前这种怀疑,以为是jar的问题。
  2. Windows安装JMeter
    https://blog.csdn.net/weixin_46074836/article/details/125409999
    https://www.cnblogs.com/laosun0204/p/16688305.html
    https://i.vycc.cn/article/349687.html
    https://www.cnblogs.com/sheepboy/p/16126784.html
    https://blog.csdn.net/weixin_58149977/article/details/126976875
  3. 使用curl导入命令到jmeter中,执行请求发送,http request 组件进行请求,获取的入参是空
    解决方法:新建一个http request组件尝试解决了
  • 21
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值