Jmeter场景设置
场景的概念:
场景是用来尽量真实模拟用户操作的工作单元,场景设计源自于用户真实操作。
场景设计:
场景设计是根据收集分析用户的实际操作而定义的Jmeter脚本的执行策略。
性能测试中涉及的基本场景有两种,即单一业务场景和混合业务场景,这两种业务场景缺一不可, 缺少任何一种都不能准确评估系统性能,定位系统瓶颈。如果只做单-业务场景,得到的结果与实际生产环境差距较大,没有实际指导意义;如果只做混合业务场景,不能快速定位系统性能快速降低的原因,起不到定位瓶颈、系统调优的作用。只有两种场景互为补充,才可以获取最符合客户要求的测试结果。
在Jmeter场景主要通过线程组设置来完成。通过组合用户各种操作到场景中来,当然场景设计不仅仅是设置线程组,有些复杂场景还需要与逻辑控制器配合。Jmeter线程组实际上是建立一个线程池。
线程组界面如下:
线程组界面参数说明:
名称、注释与之前元件一样可以随意设置。
在取样器错误后要执行的动作:设置线程组中某一个请求出错后的异常处理方式。
继续:请求出错后继续运行。勾选此项后,有请求出错也继续运行。在大量用户并发情况下,服务器偶尔响应错误是正常现象,比如服务器由于性能问题不能正常响应或者响应不及时,此时我们把过程中错误记录下来,作为有性能问题的依据。
Start Next Thread Loop:遇到sampler执行出错时,直接进行下次循环,当前循环剩下的所有sampler不再执行。
停止线程:遇到sampler执行出错时,当前线程停止进行,其他线程继续。
停止测试:遇到sampler执行出错时,当前所有线程执行完当前循环停止进行。
stop Test now:遇到sampler执行出错时,当前所有线程立即停止
线程属性:
线程数:设置并发用户线程数量,即通常意义的并发用户数,一个线程对应一个模拟用户。
Ramp-Up Period (in seconds) :设置并发用户加载时间,即线程启动开始运行的时间间隔,单位是秒。假设并发用户数设置为50,此处设置为10,那么每秒就会启动50/10,5个线程;如果设置0,则开始就50个线程就立即启动。
循环次数:输入框与复选框只能选择一种, 不能同时被选择为场景循环方式;输入框输入数字则被认为是当前线程组所控制的脚本区域的执行次数; [永远] 复选框选后,输入框内的数字将失效,启动后脚本将一直执行下去。 输入框输入0表示执行0次无意义,所以不支持。
Delay Thread creation util needed:直到需要时延迟线程的创建,设置后,线程在Ramp-Up Period的间隔时间启动并运行。不设置,测试计划开始后启动所有线程
(NEW状态),但不立即运行Sampler,是按照Ramp-Up Period时间来运行的。
在实际性能测试过程中,设置或者不设置都影响不大。
调度器:选中之后可以配置启动时间,立即或者预定的时间。
启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时当前时间也会覆盖它(但启动时间页面显示不会变)。
结束时间:测试计划什么时候结束,持续时间会覆盖它。
持续时间(秒) :测试计划持续多长时间,会覆盖结束时间。
启动延迟(秒) :测试计划延迟多长时间启动,会覆盖启动时间。
场景运行
Jmeter的场景运行方式分为两种,一种是GUI界面方式运行,一种是命令窗口(Windows的DOS命令窗口)运行。
Jmeter的场景运行架构分为两种,一种是本地运行,另一种是远程运行。不管是GUI还是命令方式都支持本地和远程运行。
GUI方式运行:
1、本地运行:本地运行即只运行本地一台]meter机器, 所有的请求通过该机器发
送。
2、本地运行点击绿色的运行按钮,如下左图所示
3、点击运行后,通过右上角可以查看线程信息,0代表没有线程异常,0/4中的前一个0代表当前运行活跃的进程数为0,后一一个4代表了总共运行了4个线程。灰色的圆框如果是绿色的代表运行正确。如果要停止测试,点击STOP按钮
2、远程运行:
远程运行是用-台Jmeter控制机控制远程的多台机器来产生负载。控制机与负载机之间通过RMI方式来完成通信。
操作步骤如下:
1、在负载机上部署Jmeter,确保Jmeter的bin目 录下存在ApacheJMeter.jar与jmeter-server.bat两个文件。
2、双击启动负载机的jmeter- server.bat程序。
3、在Jmeter控制机的bin目 录下找到jmeter.properties文件并修改"remote.hosts",
增加负载机IP,多个IP使用英文逗号隔开,修改后要重启Jmeter。如下图:
4、进入Jmeter控制机的GUI图形界面,远程运行点击上图按钮即可。点击后,Jmeter控制机会自动探测,只要先启动远程负载机上的Agent,开始运行测试计划时就会自己连接负载机去完成。
5、如果要停止,点击上面右图的后面两个按钮即可。前者是执行完成当前迭代停止(比如脚本中有5个请求,在运行第2个的时候收到停止命令,那么将继续执行完5个请求然后再停止), 后者是立即终止。
备注:设置127.0.0.1, 需要控制机也启动jmeter-server.bat
命令窗口运行:
命令窗口运行没有Jmeter界面,通过DOS命令窗口运行场景。用纯命令方式运行Jmeter是因为]meter可视化界面及监听器动态展示结果都比较消耗负载机资源,在大并发情况下GUI方式往往会导致负载机资源紧张,会对性能结果产生影响。
这个影响不是指被测系统的性能受到影响,而是指负载机的性能受到影响,导致负载量上不去,比如命令模式100个线程可产生100TPS的负载,而GUI方式只产生80TPS的负载。所以推荐进行性能测试的时候,使用命令方式来运行测试计划。
Jmeter命令窗口方式运行场景的命令如下:
1、java -jar %JMETER_ HOME%inApacheJMeter.jar -n -t
%JMETER_ HOME%scriptscript.jmx -r -l result.jtl
2、%JMETER_ HOME%injmeter -n -t %JMETER HOME%scriptscript.jmx -r -l result,jtl
备注:
两条命令都可以运行测试计划,其中%JMETER_HOME%必须配置jmeter的环境变量,%JMETER_HOME%scriptscriptjmx为jmeter脚本存放路径。
jmeter命令行工具部分参数说明:
-n:非GUI方式运行
-t:指定运行的测试脚本地址与名称,可以是相对或绝对路径
-h:查看帮助
-v:查看版本
-p:指定读取Jmeter属性文件,比如jmeter.properties文件中设置的
-1:记录测试结果到文件,指定名称与路径,可以是相对或绝对路径
-s:以服务器方式运行(远程方式)
-r:开启远程负载机,远程负载机列表在jmeter.properties文件中指定
-R:开启远程负载机,可以指定负载机IP,会覆盖jmeter.properties中的设置
-L:定义Jmeter的日志级别,如DEBUG、INFO、ERROR等
-H:设置代理IP
-P:设置代理端口
-u:设置代理帐号
-a:设置代理帐号密码
-X:停止远程执行
-J:定义Jmeter属性, 等同于在jmeter.properties中设置
-G:定义Jmeter全局属性,等同于在Global.properties中设置,线程间可相互共享
Jmeter场景运行优化配置:
在性能测试场景运行时,使用GUI方式会占用资源,其实不管是GUI或者命名模式都会占用一定资源。因为Jmeter是纯Java开发,所以可以调整其性能参数,让其在Java虚拟机上运行起来更顺畅、效率更高。
配置如下:
打开Jmeter安装路径in下的jmeter.bat文件,打开后,其中rem属于注释。
可以修改如下参数:
set HEAP:设置JVM堆大小,-Xms设置 初始堆大小,-Xmx设置最大堆大小
set NEW:设置年青代大小,-XX:NewSize设置年 青代初始内存大小,-
XX:MaxNewSize设置年青代最大内存大小,建议设为整个堆大小的1/3或者1/4,两
个值设为一样大。
set PERM: -XX:PermSize设置 持久代初始大小,-XX:MaxPermSize: 最大大小
set TENURING:年青代晋升年老代周期,默认是15
整个堆大小=年轻代大小+年老代大小+持久代大小,持久代-般固定大小为64m,所以增大年轻代后,将会减小年老代大小。
Jmeter测试监控
性能测试执行过程中,场景监控的主要任务是收集测试结果,测试结果有事务响应时间、吞吐量、TPS、 服务器硬件性能、JVM使用情况和数据库性能状态等。Jmeter中通过 监听器来完成测试结果收集工作。
Jmeter监听器元件比较多,- -般做性能测试用到比较多的监听器主要是Summary Report或者Aggregate Report(聚合报告)。
Summary Report以表格的形式显示取样器结果,如果不同取样器(不同请求)拥有相同的名字,那么在Summary Report中会统计到同一行,所以在给取样器取别名时最好不要为空,按业务功能来命名较好。
在执行性能测试之前,先通过右击线程组--添加--监听器- Summary Report,执行后生成的结果图如下:
Summary Report界面说明:
名称、注释与之前元件-样可以随意设置。
所有数据写入一个文件:保存测试结果到本地。
文件名:指定保存结果。
仅日志错误:仅保存日志中报错的部分。
Successes:保存日志中成功的部分。
Configure:设置结果属性,即保存哪些结果字段到文件。-般保存必要的字段
信息即可,保存的越多,对负载机的I0会产生影响。
Label:取样器名称(或者是事务名)。
Samples:取样器运行次数(提交了多少笔业务)。
Average:请求(事务)的平均响应时间,单位为毫秒。
Min:请求的最小响应时间,单位为毫秒。
Max:请求的最大响应时间,单位为毫秒。
Std.Dev:响应时间的标准方差。
Error%:事务错误率。
Throughput:吞吐率(TPS)。
KB/sec:每秒数据包流量,单位是KB。
Avg.Bytes:平均数据流量,单位是Byte。
Aggregate Report(聚合报告)与Summary Report-样,也是以表格显示取样器结果。在执行性能测试之前,先通过右击线程组-添加--监听器-聚合报告,执行后生成的结果图如下:
聚合报告中大部分字段与Summary Report-致,不再重复介绍,其它说明如下:
Median:响应时间中间值,指50%请求的响应时间。
90%Line: 90%请求的响应时间
95%Line: 95%请求的响应时间
99%Line: 99%请求的响应时间
标准方差的理解:
1.数据分布离平均值越近,标准方差越小;数据分布离平均值越远,标准
方差越大。
2.标准方差为0,意味着数列中每-个数都相等。
3.序列中每一个数都加上一个常数,标准方差保持不变的
所以,在查看测试报告时,标准方差越小,表示系统越趋于稳定。
90%Line的理解:
表示90%请求的响应时间,服务器的响应都维持在某个值附近。‘Average"值对于平均事务响应时间变动趋势很大的情况统计就不准确了,比如有三个时间: 1秒、5秒、12秒,则平均时间为6秒,
而另外一种情况:5秒、6秒、7秒,平均时间也为6秒,显然第二种比第一种要稳定多 了。所以,如果整体趋势比较稳定,取90%Line与Average区别不大。
Jmeter监控服务器资源:
商业性能测试工具如LR都提供了对被测服务器进行性能监控的功能,在使用Jmeter执行性能测试时,为了尽量减少负载机的资源消耗,一般不建议使用服务器资源监控的功能。而可以使用第三方工具去监控收集服务器资源。
但一些普通的场景(负 载小)还是可以利用]meter来进行服务器资源监控的。在Jmeter中通过第三方开源组件来完成此功能。
Jmeter监控服务器资源配置如下:
1、进入https:/ /jmeter-plugins.org/ downloads/all/下载jmeter-plugins-manager-0.11.jar,放置到jmeter安装 目录/lib/ext,然后重启jmeter
2、重启后从菜单-选项--Plugins Manager,进入插件管理界面,下 载PerfMon插件,重启Jmeter
3、进入https://jmeter-plugins.org/wiki/PerfMonAgent/ 下载ServerAgent-2.2.1.zip,把该压缩包在被测服务器上解压,解压后在dos命令窗口运行startAgent.sh命令,默认使用4444端口
4、在Jmeter工具端输入telnet服务器ip 4444然后输入test ,查看被测服务器是否有收到相应信息,收到表示连接正常,如果连接异常检查防火墙等原因。
5、在Jmeter控制机添加一个PerfMon Metrics Collector监听器, 点击运行即可获取。
命令窗口模式下性能测试结果收集:
聚合报告:在用命令模式执行时保存了后缀为,jtl格式的结果文件。打开JMeter
GUI界面->测试计划->添加线程组->添加聚合报告->点击"所有数据写入-个文
件"下的"浏览.."按钮找到你刚生成的jtl文件就可以对执行结果进行直观分析。
服务器资源:在GUI中为服务器性能监控监听器配置好要输出到的结果文件即可,
就像为其他监听器所配置的那样。压力脚本运行结束之后,就可以把保存的文件
拖到GUI并查看图形数据了。