一、网上有很多jmeter的资料,这篇博文就不介绍它的使用了
对于jmeter的初学者,推荐虫师的连载博文:http://www.testclass.net/jmeter
二、常用组件介绍:
1. 测试计划:用来描述一个性能测试,包括与本次性能测试相关的功能
2. 线程组:可以看做一个虚拟用户组。模拟复杂场景选用:jp@gc - Ultimate Thread Group,常用线程组
1. 设计并发场景
3. 取样器:常用:http请求
1. 确保每个请求下载全部资源:
4. 断言:检查测试得到的数据是否符合预期。常用:响应断言
5. 监听器:对测试结果数据进行处理和可视化展示的一系列元件。常用:察看结果树、聚合报告
1. 聚合报告:展示线程组运行后的事务数、响应时间、吞吐量等
Label----每个请求的名称,比如HTTP请求等
#Samples----发给服务器的请求数量
Average----单个请求的平均响应时间
Median----50%请求的响应时间
90%Line----90%请求响应时间
95%Line----95%请求响应时间
99%Line----99%请求的响应时间
Min----最小的响应时间
Max----最大的响应时间
Error%----错误率=错误的请求的数量/请求的总数
Throughput----吞吐量即表示每秒完成的请求数
Received KB/sec----每秒从服务器端接收到的数据量
Sent KB/sec----每秒从客户端发送的请求的数量
6. 配置元件:用于提供对静态数据配置的支持。常用:http cookies管理器、用户自定义变量、csv数据文件设置
1. csv数据文件设置:csv文件读取
7. 前置处理器:在实际请求发出之前对即将发出的请求进行特殊处理。常用:用户参数
8. 逻辑控制器:包括两类。一类:用于控制测试计划中个节点发送请求的逻辑顺序的控制器,常用:如果(if)控制器、循环控制器;另一类:用来组织可控制节点
的,常用:事务控制器
1. 事务控制器:将需要的核心业务多个请求整合成一个业务,关注点从单个请求变为整体。在聚合报告中也可以将每个请求的获取变成整个事务的获取。
2. 如果(if)控制器
9. 后置处理器:用于对发出的请求后得到的服务器响应进行处理。常用:正则表达式提取器
1. 正则表达式的使用方式,一般可以通过(.*?)来取得关键字段。但在获取的字符串中很多时候会遇到本身带有?号的情况,所以必须将问号转义(?)
10. 定时器:用于为请求之间设置的等待时间,常用:高斯随机定时器、固定定时器、synchronizing timer(集合点)
1. synchronizing timer:对某些业务请求需要做压力测试,而前面的操作或多或少的会影响线程到达执行该请求的时间。所以需要一个机制让先到的
线程等待到需要的线程数量时再一起运行
三、 一次普通的http请求流程:线程组--取样器:http请求--断言--监听器:察看结果树
四、参数化的实现方式:
1. 用户参数:线程组--前置处理器--用户参数,添加参数和用户,并设置对应的属性值
2. 用户定义的变量:线程组--配置元件--用户定义的变量,设置键值
3. 随机函数,通过函数助手生成参数随机数的变量。${__Random(100000,999999,randtitle)}}
4. 引入外部文件:csv文件读取
五、监听器之图像组件
1. jp@gc - Response Times Over Times:响应时间过程图
2. jp@gc - Transactions per Second:每秒处理的事务数
3. jp@gc - Response Times vs Threads:请求时间与虚拟用户数之间的关系
4. jp@gc - Transaction Throughput vs Threads:每秒事务吞吐量与虚拟用户数的关系
5. jp@gc - PerfMon Metrics Collector:服务器监控工具。需要Server Agent Tool工具的辅助(运行startAgent.bat或startAgent.sh)
监控项目一般选取:CPU、Memory、Disks I/O、Network I/O
六、执行
在使用Jmeter进行压力测试,有两种方式:GUI、非GUI,不管是使用GUI,还是非GUI进行测试,对测试结果都可以转化成HTML的测试报告,更直观和方便我们
查看和分析。
方式一:GUI
1、在测试计划里面添加一个Listener(添加任意一个Listener都可以),在Write result to file/Read from file的Filename的位置填写保存测试结果的路径(路径
可以自由指定)(如图所示)
jmeter中测试结果的文件格式为:jtl
2、通过命令把测试结果转换成HTML
jmeter -g D:Jmeterapache-jmeter-4.0in esult.jtl -e -o F:JmeterReport
说明:
-g --指定已存在的测试结果
-e:测试结束后,生成测试报告
-o --指定的文件夹必须是不存在的,否则执行失败(如图所示)
①、该命令必须在jmeter的bin目录下执行
②、D:Jmeterapache-jmeter-4.0in esult.jtl --是result.jtl所在目录【若result.jtl保存再bin目录下,路径可以省略,直接写测试结果的名称即可;若result.jtl
不是在bin目录下,就要填写完成的路径(如图所示)
③、F:JmeterReport --是转换后HTML报告保存的路径
方式二、非GUI
所有命令必须在jmeter的bin目录下执行
jmeter -n -t F:TestScriptControllerSQL.jmx -l result.jtl -e -o F: eport [第一个路径:测试脚本的路径;第二个路径:测试报告保存路径]
如果不需要直接生成HTML测试报告,则取消 -e -o F: eport 即可,测试完毕后再通过方式一的方法生成HTML报告即可
jmeter -n -t F:TestScriptControllerSQL.jmx -l result.jtl
参数说明:
-n:非GUI模式执行JMeter
-t:执行测试文件所在的位置
-l:指定生成测试结果的保存文件,jtl文件格式
-e:测试结束后,生成测试报告
-o:指定测试报告的存放位置
# 使用输出的数据生成html报告
jmeter -g <数据路径> -o <报告存放目录(需为空)>
七、联机负载
1. 基础概念:
1. 主控制机:存放JMeter脚本的机器叫做主控制机
2. 负载机:被连接并用来运行脚本的机器叫做负载机
2. 前提条件:
1. 保证在控制机和负载机上都能够运行Jmeter(jmeter和jdk版本需一致)
2. 要保证控制机和负载机、负载机和被测服务器之间的网络能够通信(同一个局域网内)
3. 操作步骤:
1. 在控制机上,找到jmeter所在目录中的bin文件夹下的jmeter.properties文件,打开找到# Remote Hosts - comma delimited
例:
# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010
remote_hosts=192.168.10.103:1099,192.168.10.104:1099
表示添加了两台负载机:一台是:192.168.10.103:1099,一台是:192.168.10.104:1099
2. 在负载机上启动Jmeter-server.bat
(Jmeter-server的默认服务端口是1099,如果在负载机上该端口被占用,则我们可以通过修改负载机上的Jmeter的配置文件jmeter.properties中的
属性server_port来指定服务端口)
将Jmeter-server的服务端口改为了8000,改完之后重启才会生效。示例:
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=8000
3. 在控制机上的执行
所有命令必须在jmeter的bin目录下执行
jmeter -n -t F:TestScriptControllerSQL.jmx -r -l result.jtl -e -o F: eport [第一个路径:测试脚本的路径;第二个路径:测试报告保存路径]
或
jmeter -n -t F:TestScriptControllerSQL.jmx -R 10.9.215.47:1029 -l result.jtl -e -o F: eport
5. 注意事项:
1. 联机负载时,要保证控制机和负载机的Jmeter的版本、JAVA环境的一致性
2.联机负载时,脚本的运行环境是负载机的环境,一般就要保证控制机和负载机的环境的一致性
3. 对于脚本中用到的第三方文件,包括jar包和参数文件等
1. 对于jar包,只需要保证第三方jar包同时在控制机和负载机的jmeter的lib目录下存在即可
2. 对于第三方文件,比如参数文件,也要求在控制机和负载机都有
4. 如果是使用的绝对路径,则要保证第三方文件在控制机和负载机的绝对路径的一致
5.如果使用相对路径,则要注意在控制机和负载机上的当前路径的区别:
在控制机(本地)上时,当前路径是脚本所在文件夹
在负载机(远程)上时,当前路径是Jmeter的bin目录
6.联机负载时,远程全部启动时,当前的测试计划是分别、独立、同步在每一台负载机上执行的。这就意味着此时对服务器造成的实际压力(RL)和测试计
划所设置的压力(DL)是不一样的,是和负载机的数量(N)有关的,RL=DL*N