一. Jmeter概述
1.Jmeter介绍
Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件。它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP服务器等等。JMeter可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或者分析在不同的负载类型下的全面性能。
另外,JMeter能够通过用断言创建测试脚本来验证我们的应用程序是否返回了我们期望的结果,从而帮助我们回归测试我们的程序。为了最大的灵活性,JMeter允许我们使用正则表达式创建断言。
2.Jmeter常用术语
测试计划(Test Plan)
测试计划时Jmeter测试脚本的根节点,用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就是说本次性能测试的所有内容是基于一个计划的。
线程组(Thread Group)
线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。
取样器(Sampler)
性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。
逻辑控制器(Logic Controllers)
包括两类无件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、循 环控制器等。另一类是用来组织可控制 sampler 来节点的,如 事务控制器、吞吐量控制器。
监听器(Listenters)
用来对测试结果数据进行处理和可视化展示的一系列元件。 图行结果、查看结果树、聚合报告等都是我们经常用到的元件。
配置元件(Configuration Elements)
用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池(Data Pool),而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配制无件则可以修改Sampler的默认数据。
例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的cookie 进行管理
断言(Assertions)
用于检查测试中得到的相应数据等能否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互能否与预期一致。
定时器(Timers)
用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手端。类似于LoadRunner里面的“思考时间”
前置处理器(Pre-Processors)
用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符则可以实现URL重写,当RUL中有sessionID 一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID 。
后置处理器(Post-Processors)
用于对Sampler 发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。
二.Jmeter安装
1.首选需要安装Java运行环境,请参考: http://jingyan.baidu.com/article/ab69b270c01a4d2ca7189f8c.html
2.目前Jmeter最新为3.2版本,下载页面地址为:
http://jmeter.apache.org/download_jmeter.cgi
3.下载后直接解压,解压后目录如下:
目录说明:
bin 包含启动、配置等相关命令
docs 官方本地文档目录
extras 辅助库
lib 核心库,包含JMeter用到的各种基础库和插件
licenses 包含non-ASF软件的许可证
printable_docs 可打印版本文档目录
LICENSE JMeter许可说明
NOTICE JMeter简单信息说明
README.md JMeter官方基本介绍
主要介绍bin目录下我们最关注几个文件:
jmeter.properties JMeter核心配置文件,各种配置基本在这完成
log4j.conf JMeter日志配置管理
jmeter.log JMeter运行日志记录,什么输出信息、警告、报错都在这里进行了记录
jmeter.bat windows下jmeter启动文件
shutdown.cmd windows下jmeter关闭文件
stoptest.cmd windows下jmeter测试停止文件
jmeter-server.bat windows下jmeter服务器模式启动文件
注:每一个.cmd文件都对应一个.sh文件,.sh是Linux下的对应功能的文件
4.另外DRDS测试必须下载Mysql的JDBC驱动程序包并放到Jmeter的Lib目录中,下载地址为:
https://dev.mysql.com/downloads/connector/j/
下载完成并解压,拷贝驱动程序Jar包到Jmeter Lib目录下:
1.要运行JMeter, 运行 jmeter.bat (for Windows) 或者 jmeter (for Linux) 文件。那些文件在bin目录下。稍微暂停后,JMeter GUI会显示出来。
在bin目录你发现有些附加脚本很有用。Windows脚本文件(CMD文件需要Win2K或者更新):
|
2.目前Jmeter程序默认进程内存大小设置512Mb,往往不能满足大并发压力发起的需求,需要提高单机压力机配置或部署Jmeter压测集群。
3.直接修改jmeter.properties配置文件中HEAP变量,结合压力机本身配置规格来进行设置,比如2C4G的云服务我设置的JVM进程大小为3072M.
4.另外,在大规模模拟压测请求发起时,单机无论从CPU、MEM、网络等资源是无法满足需求的,这个时候我们就需要部署压测集群。压测集群由一台控制机器和多台压力发起机器组成:配置压力机内存及启动端口,端口配置在jmeter.properties 配置文件中,修改server_port端口,可以使用默认1099
5.运行jmeter-server.bat,以服务器模式启动JMeter,启动完成后通过netstat –an|findstr 1099查看端口是否启动
7.另外在压力机上可以配置为开机启动运行jmeter-server.bat脚本,然后通过生成自定义镜像的方式,快速复制和部署压力机。
最后需要配置控制机,打开jmeter.properties文件修改remote_hosts变量,添加压力机IP和端口
8.在控制机上运行jmeter.bat以GUI的方式运行Jmeter,点击运行菜单-启动远程机,可以看到配置的远程压力机;
四.创建DRDS压测脚本和场景
1.创建测试计划
一个测试计划描述了一系列Jmeter运行时要执行的步骤。一个完整的测试计划包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言和配置元件。
2.创建线程组
处理每个JMeter测试计划的第一步就是添加线程组元件。这个线程组会告诉JMeter想要模拟的用户数量,用户应该发送请求的频率和应该发送的数量。
开始来添加一个线程组:首先选择这个测试计划,点击鼠标右键得到添加菜单,然后选择添加-->线程组。这时应该看到这个线程组已经在测试计划下了,如果没有看到,就点击测试计划元件展开这个测试计划树。
线程数:等同于并发用户数
循环次数:一般在脚本调试的时候设置为1或多次,在正式压测的时候选择永远,表示压测如果没有手工停止或执行时间未定线程会一直迭代循环执行。
调度器:一般在正式测试的时候会选有,比如测试计划需要压测十分钟,需在持续时间输入600s,如果需要计划在固定的时间设置启动和停止的时间
3.添加JDBC连接池配置元件
首先选择JDBC用户元件,点击鼠标右键,得到添加菜单,然后选择添加-->配置元件-->JDBC连接配置。
进入JDBC连接配置页面:
- 绑定到池变量: 这需要能够唯一标识这个配置。这是用来被JDBC取样器识别这个配置来使用.
- 数据库URL: jdbc: mysql:// IP或域名地址 : 端口/库名
- JDBC驱动类: com.mysql.jdbc.Driver
- 用户名: 数据库用户
- 密码: 数据库密码
4.添加JDBC采样器
在线程组元素上鼠标右键添加JDBC请求采样器:在JDBC请求采样器中配置相关信息:连接池信息、SQL执行类型、SQL语句、SQL参数等。
但有时候测试需要使用不同的变量表模拟不同的插入的记录/或者查询语句有不同的查询条件,这个时候就需要使用到参数化来做,Jmeter提供函数助手提供简单的随机字符串或随机数,或者准备参数化文件通过__CSVRead函数读取文件中的参数值
随机数生成函数:
随机字符串生成函数
5.压测调试-添加结果树、调试设置
调试运行的时候,需要对JDBC请求发送内容、响应内容和结果进行查看,请求是否成功;这个时候需要添加察看结果树:右击JDBC采样器-添加-监听器-察看结果树
调试过程中将线程数和循环次数设置为比较小的值:
点击本机运行调整:
调试完成后察看结果树内容:
调试运行结果后,我们可以看到运行结果,主要包含3块内容:取样器结果、请求详细内容、响应详细内容。
6.压测运行-添加集合报告、运行设置
在运行测试之前需添加聚合报告监听器到测试计划元素或线程组元素之下,聚合报告主要提供压测的汇总聚合方面的数据。
点击线程组鼠标右键—添加—监听器—聚合报告:
点击线程组元素--设置压测运行设置,按测试需求主要设置并发用户数和压测场景运行时间:
禁用察看结果树元素,此元素建议在正式压测前禁用,在发起大力压测时,此元素会记录每一个请求的发送和接受信息导致控制台机器资源消耗比较大。
压测设置准备完成后,启动场景:建议只启动远程压测机,不要启动本地压测进程,只在本地运行控制端就可以;
在场景运行期间可以点击聚合报告产看性能压测指标数据:请求数、响应时间(平均、最大、最小、90%),请求失败率、每秒请求数等
如果运行期间需要手工停止场景可以点击停止运行:
7.压测场景按业务模型比例发起压力
压测的时候往往需要去模拟生产业务环境真实的压力情况,而正是的生产各个业务的请求频率是不一样的,往往通过统计分析,我们会得到一个各业务比例的模型。
在Jmeter中我们可以通过吞吐量控制器来模拟,点击线程元素—右击添加-控制器-吞吐量控制器,然后将需要控制的JDBC请求采样器放置到吞吐量控制器元素之下,比如截图中设置运行总次数的百分百为20,比如线程迭代运行脚本100次,这个吞吐量控制器下面的采样器就运行20次。
比如插入和查询、更新SQL语句需要按2:7:1的比例运行场景,就需要创建多个吞吐量控制器:
运行测试,通过聚合报告我们可以看到运行的结果,通过请求总数和每秒请求数都可以看出比例是和之前设置的比例一直的。