Jmeter压力测试教程

Jmeter5.1.1

下载地址:https://archive.apache.org/dist/jmeter/binaries/

介绍

一、背景简介

我们公司开发的交互式应用系统,老板要求测试系统,需要分析系统最大负载,以及在大并发下服务器的整体性能,发现系统中的瓶颈问题。文档简单介绍一款JMeter压力测试工具。

二、简介与安装

2.1 JMeter简介

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器,等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。

2.2 JMeter安装

1)JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境。Jmeter5.1.1需要安装java8。

2)JMeter可以从Apache官网下载:

https://archive.apache.org/dist/jmeter/binaries/

下载后解压即可使用。

默认Jmeter中的菜单、子菜单的文字为英文的,所以需要在解压目录下的bin/下修改jmeter.properties中的参数:

将这一行的注释去掉后,将en修改为zh_CN

language=zh_CN

 

Windows下,双击bin目录下的jmeter.bat即可用图形化界面操作配置测试任务。

 

三、JMeter使用

下面结合某次测试介绍JMeter的简单使用。

1、添加测试计划

添加线程组。一个线程组包含多个http请求服务,网站的一次访问基本上都会发送多个http,每一个http请求就是一个资源的访问。

 

 2、设置线程数(线程数可以认为是并发用户数)

修改线程组的名字,修改并发线程数,然后按 ctrl +s 保存测试计划

 上述配置的含义:在1秒内,启动10个线程,循环1次进行压力测试。

关于Ramp-up period的说明:

(1)决定多长时间启动所有线程。如果使用50个线程,ramp-up period是10秒,那么JMeter用10秒使所有50个线程启动并运行。每个线程会在上一个线程启动后0.2秒(10/50)启动。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。 一般设置ramp-up=线程数启动,并上下调整到所需的。

(2)用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。

(3)Ramp-Up Period(in-seconds)代表隔多长时间执行,0代表同时并发.

可以选择永远循环,如下图:

也可以设置压力测试的时间。比如:10个线程并发访问,持续2分钟。这个的意思是说,在120S之内,最大活跃线程数一直保持为10个。

注意:配置持续时间来测试,需要勾选循环次数为永远,不然调度器会不生效。

3、设置测试接口

本样例的测试接口是:用http协议访问官网测试。右击线程组,选择“添加”、“取样器、“http请求”

设置http请求的协议、服务器地址、端口、请求方式、请求路径。

 4、一般需要查看调用结果,则需添加“察看结果树”

5、执行测试计划

点击绿色右三角,即可执行测试计划。可能会弹框提醒是否保存测试计划,选择“是”,则需要选择保存路径,选择“否”,则直接执行测试计划。如果中途需停止测试,点击“stop”即可。

调用结束后,可以通过设置的“察看结果树”,“响应数据”看到接口返回结果.。例如:本样例接口,如果调用成功则返回“ok”

 6. 查看发出的请求和响应的数据:

 

7、查看测试的统计报告:统计失败率、吞吐量、调用次数等

可以通过添加“聚合报告”实现

添加后,执行测试,产生的节后如下:

样本10,是因为我之前设置的线程数。

 

1)Label - 请求对应的name属性值。

Samples - 具有相同标号的样本数,总的发出请求数。
3)Average - 请求的平均响应时间。

4)Median - 50%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第50%的值。

5)90% Line - 90%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第90%的值。

6)95% Line - 95%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第95%的值。

7)99% Line - 99%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第99%的值。

8)Min - 最小响应时间。

9)Max - 最大响应时间。

10)Error % - 本次测试中,有错误请求的百分比。

11)Throughput - 吞吐量是以每秒/分钟/小时的请求量来度量的。这里表示每秒完成的请求数。

12)Received KB/sec - 收到的千字节每秒的吞吐量测试。

13)Sent KB/sec - 发送的千字节每秒的吞吐量测试。

8、读取csv文件

本测试样例,需要多线程读取多个用户的账密来模拟真实用户的登录。实现方式:按行将所有模拟的账密的路径放在csv文件中,用JMeter去读取。

有的时候要测试系统的登录并发,那就需要模拟成百上千的用户登录。那就需要先给应用系统添加很多账号。然后将账号和密码保存到CSV文件中,如下图:是我的批量登录用户、密码的文件。

csv文件的每一行的账密使用,号分隔。

 

 

 

 

 

1)文件名: CSV文件路径。

2)文件编码: CSV文件编码,可选UTF8。默认为ANSI

3)变量名称: 给csv文件中各列起个名字(有多列时,用英文逗号隔开列名)便于后面引用

4)分隔符:与 .csv文件的分隔符保持一致。如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\t;

5)是否允许带引号:不知道,一般选False。

6)遇到文件结束符再次循环:到了文件尾是否循环,True—继续从文件第一行开始读取,False—不再循环

7)遇到文件结束符停止线程 :到了文件尾是否停止线程,True—停止,False—不停止,注:当Recycle on EOF设置为True时,此项设置无效。

8)线程共享模式:共享模式,All threads –所有线程,Current thread group—当前线程组,Current thread—当前线程。

如下图:参数中的值是使用${password}和${username}取的CSV中的每一行的变量名称,也就是上一步的第三行的username,password。

 

 

可以看到,调用接口后的响应数据是一个json字符串。一个登录请求会调用多个接口,所以当登录接口返回数据后,这些数据会在后面的接口调用中作为参数再次传递给服务器端,也就是说后面还会用到这个json中的数据。所以在这个接口请求中添加JSON提取器。把accss_token 和 redresh_token作为变量,让后面的接口使用。

 

 添加json内容的提取器

 

 

 

使用$.access_token来获取接口响应的json数据中access_token,并赋值给变量access_token,这样在后面的其他接口都可以使用${access_token}来获取这个接口返回的json数据中的access_token了。

 

 同样,使用$.refresh_token来获取refresh并赋值给refresh变量

 

 

在后面的接口中使用${}获取上边json提取器获取的变量。如下图:

 

 重新运行压测,查看如下图的接口的请求结果,可以看到,已经将${access_token}解析成了真实的数据,如下图:

 

 

总结:

1.可以使用导入CSV文件来模拟大量用户。

2.给CSV文件使用多个变量接收每一行的多个值。

3.每一个接口的参数中使用${变量名}来获取CSV中的列。

4.接口访问后返回的数据一般为json数据。在接口的http请求创建多个json提取器来分别获取返回值中的token信息,这样后面的接口使用这些token就可以用变量来获取使用。

 

 

四、jmeter监控服务器CPU、内存、i/o的资源 ,jmeter监控服务器资源插件

1.

使用ServerAgent-2.2.3.zip采集服务器信息,下载地址如下:

https://objects.githubusercontent.com/github-production-release-asset-2e65be/8249130/8c40039e-7c77-11e7-99e2-51166e028338?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230207%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230207T075943Z&X-Amz-Expires=300&X-Amz-Signature=bd5ababafbbf5d84df5dc100b6a1fca18a55cba4c8650da80e81b8d0587dde0c&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=8249130&response-content-disposition=attachment%3B%20filename%3DServerAgent-2.2.3.zip&response-content-type=application%2Foctet-stream

上传到被测试的服务器上,执行

sh startAgent.sh    
//默认端口为4444,也可以参数指定 –udp-port 4445 –tcp-port 4445

本地安装jmeter的windows上也需要执行,点下下图的bat文件:

 

下载:https://jmeter-plugins.org/install/Install/下载 plugs-manage.jar

部署:将下载到的plugins-manager.jar插件存放到%JMETER_HOME%/lib/ext目录下 

 

如果lib/ext目录下有plugins-manager.jar这个包,那就不用再手动的下载安装了。

 如果下载的jmeter包已经自带plugins-manager.jar,可忽略下步:

启动jmeter并安装jpgc插件

 

 

 

2.使用

添加检测器jpgc

 

 添加一行:填写服务器监听的端口4444,选择监控的哪种数据

 

 

 

再次启动压测,就可以实时看到被测服务器的CPU和内存的使用详情了

 

 

Jmeter通过http代理服务器录制脚本:

右击测试计划--->添加--->非测试元件--->http代理服务器。

修改代理端口。

在浏览器上打开代理服务器

 

 

在线程组下新建一个录制控制器。右击线程组--->添加--->逻辑控制器--->录制控制器。

 

然后刚添加的jmeter代理服务器点击-->启动。目标控制器选择刚才上面添加的控制器。

 

 

在浏览器访问要录制的测试网站。

 

posted @ 2023-02-13 14:48  粉色纽扣  阅读(2474)  评论(0编辑  收藏  举报