首先,定时器(Timers),断言(Assertions),前置和后置处理器(Pre,Post-Processors)只有在应用它们的采样器存在时才会运行;
其次,控制器(Controllers)和采样器(Samplers)按照它们在测试计划配置树中出现的顺序执行;
最后,其他对象按照它们出现的范围和类型顺序执行,在一个特定类型的对象范围内,按照它们在测试计划配置树中出现的顺序执行;
上述这一堆阐述重点在于理解各个测试对象的作用,以及在什么位置使用它们,至于对象的执行顺序理解即可,不用死记硬背。
关于JMeter中的组件列表,详见:Introduction 。
JMeter的测试计划有2种方式生成:
手动编写
录制脚本
***实践是针对不同的场景选择对应的测试计划生成方式,比如:对于接口测试使用手动编写可能更加合适,而对于网页的测试,使用录制脚本的方式会更加方便。
编写测试计划在GUI模式下编辑测试计划时,关键在于理解清楚JMeter中涉及的配置对象的作用,在此基础上就可以借助图形化界面设计测试计划并将其保存为一个脚本文件。
具体的测试计划编写可以参考官方的一个Web测试计划示例:Building a Web Test Plan。
设置“Ramp-up period”参数
在手动编写测试计划时,值得注意点的是:线程池参数“Ramp-up period”值一定要设置合理,该参数的设置关系到测试启动时是否会给服务器带来非常大的冲击甚至过载,或者是达不到性能测试的要求。
“Ramp-up period”参数的含义是设置一个时长(单位:秒),使得在Thread Group中设置的线程根据该时长逐步启动。
举例说明:
(1)在Thread Group中设置线程数为10,Ramp-up period参数设置为100s,JMeter将会在100s内逐步启动10个线程,也就是说,每个线程的启动间隔为10s(100s/10),可能最后一个线程启动的时候第一个线程已经结束。
(2)在Thread Group中设置线程数为100,Ramp-up period参数设置为10s,每个线程的启动间隔为0.1s(10s/100),可能在测试刚启动时给服务器产生很大的负载。
综上所述,Ramp-up period参数值不能设置太大,也不能设置太小,JMeter官方文档的解释是:可以将该参数值与线程数设置为相同,或者比线程数略大或稍小即可。
根据经验来讲,一般需要将Ramp-up period参数值设置比线程数略小更加合适。
其他一些关于Ramp-up period参数的设置技巧可以参考:
关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念
JMeter技巧集锦
除了常见的Web测试,JMeter官方也给出了许多其他类型的测试计划示例,详见: 。
录制测试脚本录制测试脚本就是通过工具自动生成测试测试的方式,在JMeter中这种方式更适合于Web页面测试,但是实践中发现,自动生成的测试用例也很难直接就能用于性能测试,还需要对测试用例做一些调整。
无论怎样,有胜于无,通过脚本录制方式还是能在一定程度上减少手动编辑测试计划的工作量。
在JMeter中录制测试脚本有2种方式:
使用JMeter自带的Http服务代理功能录制,不同版本的JMter操作界面不同
借助于插件和第三方工具录制,如:badboy工具,blazemeter插件等等
更多关于录制JMeter测试脚本的实现可以参考如下博客:
1.Jmeter学习笔记五录制脚本
2.JMeter中级篇-1-JMeter自带的录制功能举例
3.利用Jmeter录制脚本的两种方法
4.录制Jmeter脚本的N种方法
5.JMeter中级篇-2-Firefox录制JMeter脚本的方案
通常来讲,使用JMeter进行性能测试不会在GUI模式下进行,GUI图形化界面通常只用来编写测试计划。在GUI模式下调试好测试脚本之后,通过命令行的方式执行测试脚本。
关于JMeter的运行时参数详见
在命令行执行性能测试的常用参数:
-n:非GUI模式
-t:指定测试计划文件路径,可以是相对路径或者绝对路径
-l:输出测试结果文件路径,可以是相对路径或者绝对路径
-e:输出测试报告
-o:测试报告保存目录,可以是相对路径或者绝对路径
示例如下:
$ jmeter -n -t xxx.jmx -l ./yyy.jtl -e -o ./zzz关于JMeter命令行参数详见: 。
分布式测试当在单机环境下使用JMeter无法模拟足够的并发量时,可以使用分布式模式进行压测。
在分布式模式下,存在一个控制节点Master,多个真正执行测试的从节点Slave,在Master上控制多个Slave进行压力测试。
具体实现:
启动Slave:在Slave节点启动JMeter服务器模式,进入到JMETER_HOME/bin目录下,执行:jmeter-server或jmeter-server.bat