第六章:Jmeter 性能测试基础实战
1.测试需求:测试20个用户访问https://blog.csdn.net/God_XiangYu 在负载达到30 QPS 时的平均响应时间。
QRPS:Query Per Second 每秒查询率。是一台查询服务器每秒能够处理的查询次数。在因特网上,作为域名系统服务器的性能经常用每秒查询率来衡量
2.测试步骤:
-
第一步:添加线程组
线程组主要包含三个参数:线程数、准备时长(Ranp-Up Period(in seconds))、循环次数。
- 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数
- 准备时长(单位为s):设置的虚拟用户数需要多长时间全部启动,如果线程数为20,时长为10,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程
- 循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为6,那么每个线程发送5次请求。总请求数为20*5=100。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
-
第二步:增加HTTP请求
一个HTTP请求有着许多的配置参数,下面将详细介绍:
-
名称 :本属性用于标识一个取样器,建议使用一个有意义的名称
-
注释 :对于测试没有任何作用,仅用户记录用户可读的注释信息
-
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址
-
端口号 :目标服务器的端口号,默认值为80
-
Timeouts(milliseconds):设置请求和响应的超时时间
-
方法 :发送HTTP请求的方法,可用方法包括 GET、POST、HEAD、PUI、OPTIONS、TRACE、DELETE等
-
Contene encoding :内容的编码方式,默认值为ios8859
-
路劲:目标URL路径(不包括服务器地址和端口)
-
自动重定向 :如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面
-
Use keep Alive :当该选项被选中时,jmeter和目标服务之间使用Keep-Alive方式(又称持久连接、连接重用)进行HTTP通信,默认选中
-
Use multipart/from-data for HTTP POST :当我发送HTTP POST请求时,使用Use multipart/from-data 方法发送,默认不选中
-
同请求一起发送参数 :在请求中发送URL,jmeter 提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置本表中,表中的每一行是一个参数值(对应RUL中的名称1=值1)
-
同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这种方式模拟。
-
从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse 并获取HTML中包含的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。
-
用作监视器:此取样器被当成监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息。默认为不选中。
-
Save response as MD5 hash? :选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。
注意:tips 默认时间单位是毫秒,报告输出文件后缀 .jtl
-
-
第三步:设置QPS限制
Jmeter提供了一个非常有用的定时器,称为Constant Throughput Timer (常数吞吐量定时器),该定时器可以方便地控制给定的取样器发送请求的吞吐量。
右键点击fnng.cnblogs.com ,弹出菜单(添加—>定时器—>Constant Throughput Timer)选择Constant Throughput Timer
-
Constant Throughput Timer 的主要属性介绍:
名称 :定时器的名称
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
-
Calculate Throughput based on :有5个选项,分别是:
-
This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以矣线程的数量。
-
All active threads : 设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
-
All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。
-
All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
-
All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
-
如上图,该元件仅作用于fnng.cnblogs.com ,设置定时器的Target throughput为1200/分钟(20 QPS),设置Calculate Throughput based on 的值为All active threads 。
当然,Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput Timer的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。
- 第四步:添加监视器
脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,在本例中,我们关心的是请求的响应时间。
Jmeter 中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。Jmeter有各种不同的监听器类型,因为上HTTP请求,我们可在添加聚合报告,更为直观的查看测试结果。
添加聚合报告,右键点击线程组,在弹的菜单(添加—>监听器—>聚合报告)中选择聚合报告。
添加查看结果数(添加—>监听器—>查看结果数)
- 第五步:运行脚本
添加完成聚合报告后,我们来运行脚本,稍后介绍聚合报告的参数。
在运脚本之前,我们来查看一下,各个元件的参数设置:
线程组:
线程数:20
准备时长: 10
循环次数:10
HTTP请求:
名称:访问CSDN博客
服务器名称或IP :https://blog.csdn.net/God_XiangYu
Implementation : HttpClient4
协议: http
方法: GET
路径:/
常数吞吐量定时器:
Target throughput(in samples per minute):1200.0
Calculate Throughput based on :All active threads
点击工具栏上的运行按钮,或者点击菜单栏“ 运行—>启动 ” 或者使用快捷键ctrl+r 来运行程序。
- 第六步:聚合报告分析
查看聚合报告的运行结果: