jmeter压测网站、数据库、接口及分布式压测
Jmeter是apache组织开发的基于java的压力测试工具。
Jmeter可以用于对服务器、网络活对象模拟巨大的负载,来自不同压力类别下测试他们的强度和分析整体性能。另外,jmeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,jmeter允许使用正则表达式创建断言。
2.Jmeter工作原理
3.Jmeter安装
实验环境:
系统:centos6.6 64位
Java:1.8.0_65
Jmeter:3.0
(1)安装java
tar xf jdk-8u65-linux-x64.tar.gz -C /usr/local/ cd /usr/local/ ln -s jdk1.8.0_65/ jdk echo "JAVA_HOME=/usr/local/jdk" > /etc/profile.d/java.sh echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile.d/java.sh source /etc/profile.d/java.sh java -version
(2)安装jmeter
wget http://apache.fayea.com//jmeter/binaries/apache-jmeter-3.0.tgz tar xf apache-jmeter-3.0.tgz -C /usr/local/ cd /usr/local/ ln -s apache-jmeter-3.0/ jmeter
(3)运行jmeter,需要你的远程工具支持打开图形界面,我这里使用xmanager
/usr/local/jmeter/bin/jmeter
Jmeter打开后页面如下所示:
补充:如果是Windows平台运行jmeter,也是需要配置java环境,然后下载jmeter,解压之后,运行jmeter安装目录下的bin/jmeter.bat即可,通常也有很大一部分人在Windows上面配置jmeter做控制器,linux做压力机。
4.jmeter压测网站
测试步骤:
(1)测试计划
(2)线程组
(3)http请求
(4)监听器
(5)运行脚本
(6)查看报告
1、整个测试都是以测试计划为基础,基于测试计划进行的测试,比如线程组和http请求都是在测试计划的基础上创建的。
2、添加一个线程组
线程数:也就是开启多少线程进行测试
Ramp up period:设置的虚拟用户数需要多长时间全部启动。如果线程数为20,时间为10,也就是每秒钟启动2个线程。
循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为100,那个每个线程发送100次请求。总请求数为20*100=2000。如果勾选了“永远”,那么所有线程会一直发送请求,一直选择停止运行脚本。
调度器:可以更灵活的设置运行时间等,必须设置持续压测一个小时,或者压测一天。
3、在线程组里面添加一个http请求
Http请求设置-保持默认即可:
名称:本属性用于标识一个取样器,建议使用一个有意义的名称
注释:对于测试没有任何作用,仅用户记录可读的注释信息
服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号,默认值80.后面的超时定义可以不用填写。
协议:向目标服务器发送http请求时的协议,可以是http或者是https,默认值为http
方法:发送http请求的方法,可用方法包括get、post、head、put、options、trace、delete等。
Content encoding:内容编码方式
路径:目标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参数,对于带参数的URL、jmeter提供了一个简单的对参数化的方法。用户可以将url中所有参数设置在本表中,表中的每一行是一个参数值对(对应URL中的名称 名称1=值1 )
同请求一起发送文件:在请求中发送文件,通常,http文件上传行为可以通过这种方式模拟。
4、添加监听器
查看结果树和聚合报告
5、运行测试:我们的测试计划都设置没有问题之后,点击测试运行按钮就可以开始测试了
6、查看测试结果
结果树:这里可以查看每个请求的成功还有失败,还有响应的数据
聚合报告:主要是查看请求的响应时间,错误率,每秒并发等
参数说明:单位为毫秒
Label:定义HTTP请求名称
Samples:表示这次测试中发出了多少个请求
Average:平均响应时长——默认情况下是单个request的平均响应时长
Median:中位数,也就是50%用户的响应时长
90% Line:90%用户的响应时长
Min:访问页面的最小响应时长
Max:访问页面的最大响应时长
Error%:错误请求的数量/请求的总数
Throughput:默认情况下表示每秒完成的请求数(request per second)
KB/Sec:每秒从服务器端接收到的数据量
5.Jmeter压测数据库
环境准备:
1、下载mysql驱动,并且在测试计划中添加驱动,驱动下载地址
驱动下载地址:http://repo.maven.apache.org/maven2/mysql/mysql-connector-java/
添加驱动方式,按照下图进行
2、配置:jdbc配置
在线程组里面添加jdbc配置
配置jdbc:
Variable Name设置同数据库名称,然后就是配置最下面的四行,也就是mysql连接方式,jdbc的驱动类,还有就是帐号密码
3、jdbc请求配置
添加jdbc请求
在jdbc请求中,选择请求语句类型为select,并且在下方写入测试的sql语句
添加两个监听器:查看结果树,聚合报告
运行测试,并且从结果树中可以看到mysql的请求是成功的,也可以看到请求的语句还有请求的结果,如果需要压力测试,只需要修改线程组里面的用户数还有循环次数,在压测网站的案例中已经有介绍,可以参考设置。
6.Jmeter压测接口
这里描述的的测试方式为jmeter自带的测试方法,我们在实际工作中由于token问题,测试接口都是自己编写python脚本测试,如果使用jmeter压力测试会使用python生成URL,然后把路径复制到jmeter中,并不会在jmeter中传递URL参数。
6.1.测试get接口:
测试计划如下:
(1)HTTP请求配置如下:
1、配置服务器名称或者IP地址,注意这里需要带http还有域名后面的后缀
2、配置请求的方法,这里选择get
3、配置路径,也就是域名后面的路径
(2)http设置完成就可以运行测试了
(3)查看结果树:text中请求为绿色,说明请求是成功的,也就是说明get请求没有问题
6.2.测试post接口:
post和get配置前三个选项配置都一样,但是post接口需要传入参数,只需要在Parameters页面中添加相应的接口参数即可
7.Jmeter分布式压力测试
测试架构如下:
测试前的准备:
1、 防火墙关闭
2、 主机名解析
3、 时间同步
(1)压力机安装Jmeter,步骤和上面安装Jmeter步骤相同
(2)在controller机器的jmeter的bin目录下,找到jmeter.properties文件,修改远程主机选项
[root@jmeter~]# vim /usr/local/jmeter/bin/jmeter.properties remote_hosts=172.16.4.102,172.16.4.103
(3)Agent启动服务,如果启动1099端口说明jmeter的压力机启动正常
[root@agent-01 ~]# /usr/local/jmeter/bin/jmeter-server & [root@agent-01 ~]# netstat -lntp | grep 1099 tcp 0 0 :::1099 :::* LISTEN 47783/java
(4)启动controller机器上的jmeter应用,选择菜单“运行”–>“远程启动”来分别启动agent,也可以直接选择“远程全部启动来将所有的agent启动