由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

jmeter压测网站、数据库、接口及分布式压测

运维工具 西门飞冰 9245℃
[隐藏]

1.Jmeter介绍

Jmeter是apache组织开发的基于java的压力测试工具。

Jmeter可以用于对服务器、网络活对象模拟巨大的负载,来自不同压力类别下测试他们的强度和分析整体性能。另外,jmeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,jmeter允许使用正则表达式创建断言。

2.Jmeter工作原理

image001

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打开后页面如下所示:

image003
补充:如果是Windows平台运行jmeter,也是需要配置java环境,然后下载jmeter,解压之后,运行jmeter安装目录下的bin/jmeter.bat即可,通常也有很大一部分人在Windows上面配置jmeter做控制器,linux做压力机。

4.jmeter压测网站

测试步骤:
(1)测试计划
(2)线程组
(3)http请求
(4)监听器
(5)运行脚本
(6)查看报告
1、整个测试都是以测试计划为基础,基于测试计划进行的测试,比如线程组和http请求都是在测试计划的基础上创建的。

image005
2、添加一个线程组

image006
线程数:也就是开启多少线程进行测试
Ramp up period:设置的虚拟用户数需要多长时间全部启动。如果线程数为20,时间为10,也就是每秒钟启动2个线程。
循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为100,那个每个线程发送100次请求。总请求数为20*100=2000。如果勾选了“永远”,那么所有线程会一直发送请求,一直选择停止运行脚本。
调度器:可以更灵活的设置运行时间等,必须设置持续压测一个小时,或者压测一天。

image007
3、在线程组里面添加一个http请求

image009

image010
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、添加监听器
查看结果树和聚合报告

图像 8

5、运行测试:我们的测试计划都设置没有问题之后,点击测试运行按钮就可以开始测试了

image013
6、查看测试结果
结果树:这里可以查看每个请求的成功还有失败,还有响应的数据

image014
聚合报告:主要是查看请求的响应时间,错误率,每秒并发等

image016
参数说明:单位为毫秒
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/
添加驱动方式,按照下图进行

image017
2、配置:jdbc配置
在线程组里面添加jdbc配置

image019
配置jdbc:
Variable Name设置同数据库名称,然后就是配置最下面的四行,也就是mysql连接方式,jdbc的驱动类,还有就是帐号密码

image020
3、jdbc请求配置
添加jdbc请求

image021
在jdbc请求中,选择请求语句类型为select,并且在下方写入测试的sql语句

image022
添加两个监听器:查看结果树,聚合报告

image023
运行测试,并且从结果树中可以看到mysql的请求是成功的,也可以看到请求的语句还有请求的结果,如果需要压力测试,只需要修改线程组里面的用户数还有循环次数,在压测网站的案例中已经有介绍,可以参考设置。
image024

6.Jmeter压测接口

这里描述的的测试方式为jmeter自带的测试方法,我们在实际工作中由于token问题,测试接口都是自己编写python脚本测试,如果使用jmeter压力测试会使用python生成URL,然后把路径复制到jmeter中,并不会在jmeter中传递URL参数。

6.1.测试get接口:

测试计划如下:

image025
(1)HTTP请求配置如下:
1、配置服务器名称或者IP地址,注意这里需要带http还有域名后面的后缀
2、配置请求的方法,这里选择get
3、配置路径,也就是域名后面的路径

image026
(2)http设置完成就可以运行测试了
(3)查看结果树:text中请求为绿色,说明请求是成功的,也就是说明get请求没有问题

image028

6.2.测试post接口:

post和get配置前三个选项配置都一样,但是post接口需要传入参数,只需要在Parameters页面中添加相应的接口参数即可

image030

7.Jmeter分布式压力测试

测试架构如下:

image032
测试前的准备:
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启动

image033

转载请注明:西门飞冰的博客-专注于Linux运维 » jmeter压测网站、数据库、接口及分布式压测

喜欢 (8)or分享 (0)