JMeter 入门使用

JMeter

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具。体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为 JMeter 是 Java 开发的,所以运行的时候必须先要安装 jdk。JMeter 是免安装的,拿到安装包之后直接解压就可以使用,同时它在 linux/windows/macos 上都可以使用。安装包也是一个。

JMeter 最初被设计用于Web应用测试,但后来扩展到其他测试领域。

  • JMeter 可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。
  • JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。
  • 另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

官网:http://jmeter.apache.org/download_jmeter.cgi

安装

因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境,暂时不讲不如安装JAVA环境了。

下载安装包

下载地址: https://jmeter.apache.org/download_jmeter.cgi

Windows 和 Linux 的安装包一样,下载 tgz 或者 zip 格式的均可

windows 使用

解压下载的二进制包,进入bin目录,双击jmeter.bat启动程序。

启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI。前面不要忽略CMD窗口的提示信息:

1
2
3
4
5
6
7
8
9

================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use NON GUI Mode:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

上面的意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。

Linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 解压
tar -zxvf apache-jmeter-5.2.1.tgz


# 配置环境变量
# vi /etc/profile 添加如下内容
export JMETER_HOME=/usr/local/jmeter/apache-jmeter-5.2.1
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin


# 更新环境变量
source /etc/profile

# 赋予权限
chmod +x /usr/local/jmeter/apache-jmeter-5.2.1


# 查看jmeter是否正确安装
jmeter -v

JMeter 语法

1
2
# 直接使用命令运行
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

参数:

  • -n: 指定 JMeter 将在cli模式下运行

  • -t [jmx file]: 包含测试计划的JMX文件的名称。

  • -l [results file]: 将样本结果记录到的JTL文件的名称。

  • -j: JMeter运行日志文件的名称。

  • -r: 在JMeter属性 remote_hosts 指定的服务器上运行测试

  • -R [远程服务器列表]: 在指定的远程服务器中运行测试

  • -G [CSV文件的路径]: 仅生成报告仪表板

  • -e: 负载测试后生成报告仪表板

  • -o: 负载测试后在何处生成报告仪表板的输出文件夹。文件夹不能存在或为空 该脚本还允许您指定可选的防火墙/代理服务器信息:

  • -H [代理服务器主机名或IP地址]: 设置供JMeter使用的代理服务器

  • -P [代理服务器端口]: 设置供JMeter使用的代理服务器端口

测试

一般的测试步骤

  1. 在GUI模式(即图形化界面模式)下,新建一个测试计划,形成一个jmx文件,保存并上传到linux机器对应目录。

  2. 执行命令:jmeter –n –t [路径]/[名称].jmx -j [路径]/[名称].log –l [路径]/[名称].jtl -e -o [路径],如:jmeter -n -t /opt/test.jmx -j /opt/test.log -l /opt/test.jtl -e -o /opt/test

  3. 结果文件通过Xterm传入本地,打开jmeter,然后点击:创建测试计划,创建监听–聚合报告,创建查看结果树等;点击浏览,把jtl文件加载进来,就可以看到测试的报告结果。

1.为什么在linux下运行jmeter脚本?

答案:在windows下运行jmeter脚本也是可以的,但是因为linux系统的性能是优于Windows系统,我们在加载并发用户数时,是利用系统的线程加载出来的,而linux系统更能处理这些多线程问题,还有Linux运行jmeter脚本是用命令执行,而windows执行jmeter脚本是GUI运行,这样对比的话,纯命令跑脚本对性能影响最小,windows本身在用着,再加上jmeter的GUI,会导致windows系统的性能瓶颈,影响服务器最佳的性能测试结果,总之一句话:意思就是linux下运行jmeter脚本,消耗比windows小,加载的请求更多,响应更快

更改语言为中文

官方默认为我们提供了简体中文。通过 【Options】->【Choose Language】变更为简体中文

1.创建线程组

在“测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】。

设置线程数和循环次数。我这里设置线程数为500,循环一次。

2.配置元件

在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP请求默认值】。配置我们需要进行测试的程序协议、地址和端口

当所有的接口测试的访问域名和端口都一样时,可以使用该元件,一旦服务器地址变更,只需要修改请求默认值即可。

3.构造HTTP请求

在“线程组”右键 【添加-】->【samlper】–>【HTTP 请求】设置我们需要测试的API的请求路径和数据。我这里是用的json

4.添加HTTP请求头

在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】。

因为我要传输的数据为json,所以设置一个 Content-Type:application/json

5.添加断言

在我们刚刚创建的线程组上右键 【添加】–>【断言】–>【响应断言】。

根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。还可以配置错误信息

6.添加察看结果树

在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【察看结果树】。

直接添加,然后点击运行按钮就可以看到结果了。

7.添加Summary Report

在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【Summary Report】。

直接添加,然后点击运行按钮就可以看到结果了。

为了不引起不必要的争论,隐藏了TPS。此数据不具备任何价值,仅仅为文章演示。

8.测试计划创建完成

记得点保存。

五.执行测试计划

前面我们说过,执行测试计划不能用GUI,需要用命令行来执行。

1
jmeter -n -t testplan/RedisLock.jmx -l testplan/result/result.txt -e -o testplan/webreport

参数说明:

  • testplan/RedisLock.jmx 为测试计划文件路径
  • testplan/result/result.txt 为测试结果文件路径
  • testplan/webreport 为web报告保存路径。

执行结果说明

表格显示,属性说明

  • Sample:每个请求的序号

  • Start Time:每个请求开始时间

  • Thread Name:每个线程的名称

  • Label:Http 请求名称

  • Sample Time:每个请求所花时间,单位毫秒

  • Status:请求状态,如果为勾则表示成功,如果为叉表示失败。

  • Bytes:请求的字节数

  • 样本数目:也就是上面所说的请求个数,成功的情况下等于你设定的并发数目乘以循环次数

  • 平均:每个线程请求的平均时间

  • 最新样本:表示服务器响应最后一个请求的时间

  • 偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布

聚合报告显示 属性说明

  • Label:每个 JMeter 的 element 的 Name 值。例如 HTTP Request 的 Name

  • #Samples | #样本:样本数量。多少个请求

  • Average | 平均值:平均响应时间(单位:)。默认是单个 Request 的平均响应时间,当使用了 TransactionController 时,也可以以 Transaction 为单位显示平均响应时间

  • Median:中位数,也就是 50% 用户的响应时间

  • 90% Line:90% 用户的响应时间

  • 95% Line:95% 用户的响应时间

  • 99% Line:99% 用户的响应时间

    • 注:为什么要有 *% 用户响应时间?因为在评估一次测试的结果时,仅仅有平均事物响应时间是不够的。假如有一次测试,总共有 100 个请求被响应,其中最小响应时间为 0.02 秒,最大响应时间为 110 秒,平均事务响应时间为 4.7 秒,你会不会想到最小和最大响应时间如此大的偏差是否会导致平均值本身并不可信?
    • 我们可以在 95 th 之后继续添加 96/ 97/ 98/ 99/ 99.9/ 99.99 th,并利用 Excel 的图表功能画一条曲线,来更加清晰表现出系统响应时间的分布情况。这时候你也许会发现,那个最大值的出现几率只不过是千分之一甚至万分之一,而且 99%的用户请求的响应时间都是在性能需求所定义的范围之内的;如下图则是最低响应时间的值出现几率是很小的,实际 99% 的用户请求响应时间都要 20000+。
  • Min | 最小值:最小响应时间

  • Max | 最大值:最大响应时间

  • Error% | 异常%:本次测试中出现错误的请求的数量 / 请求的总数

  • Throughput | 吞吐量:吞吐量。默认情况下标示每秒完成的请求数(具体单位如下图)

  • KB/sec | 接收KB:每秒从服务器端接收到的数据量。

  • 发送KB:每秒发送到服务器端的数据量。

聚合报告界面,属性说明

  • Label:取样器名称(或者是事务名)。

  • #Samples:取样器运行次数(提交了多少笔业务)。

  • Average:请求(事务)的平均响应时间,单位为毫秒。

  • Min:请求的最小响应时间,单位为毫秒。

  • Max:请求的最大响应时间,单位为毫秒。

  • Std.Dev:响应时间的标准方差。

  • Error%:事务错误率。

  • Throughput:吞吐率(TPS)。

  • KB/sec:每秒数据包流量,单位是 KB。

  • Avg.Bytes:平均数据流量,单位是 Byte。


JMeter 入门使用
https://flepeng.github.io/test-Stress-Test-JMeter-JMeter-入门使用/
作者
Lepeng
发布于
2022年3月8日
许可协议