由于一些接口,只能通过服务器访问,不能外网访问,不得已只能在其它服务器上压测
一、安装
1、安装Java
1 2
| # 切换到root用户 ]# yum install java
|
2、配置Java环境变量
在文件最后加入:
1 2 3 4 5 6 7 8 9 10 11
| #set java environment (通过yum安装的默认路径为:/usr/lib/jvm) JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64 PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME CLASSPATH PATH
# 修改/etc/profile之后让其生效 ]# source /etc/profile
# 验证java ]# java -version
|
3、安装jmeter
上传jmeter到linux服务器、解压
1 2
| ]# cd /data ]# unzip apache-jmeter.5.2.1.zip
|
4、Jmeter环境变量
1 2 3 4 5 6 7
| ]# vi /etc/profile # 在文件最后添加以下内容: export JMETER=/data/apache-jmeter.5.2.1 (Jmeter的安装目录) export CLASSPATH=$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$CLASSPATH export PATH=${JMETER}/bin/:${PATH} # 使环境变量生效 ]# source /etc/profile
|
1 2 3
| # 验证是否安装成功: ]# jmeter -v # 如出现版本号,则安装成功
|
二、Jmeter配置
1、基础配置修改
1 2 3 4 5 6 7 8
| # 修改bin目录下的user.properties(可以看到请求数据和响应数据,调试通了建议关闭) jmeter.save.saveservice.output_format=xml jmeter.save.saveservice.response_data=true jmeter.save.saveservice.samplerData=true jmeter.save.saveservice.requestHeaders=true jmeter.save.saveservice.url=true jmeter.save.saveservice.responseHeaders=true jmeter.save.saveservice.encoding=true
|
1 2 3
| #修改bin 目录下的jmeter.properties jmeter.save.saveservice.response_data=true jmeter.save.saveservice.samplerData=true
|
2、修改句柄限制
1 2
| ]# ulimit -a ]# ulimit -n 65535
|
3、修改系统端口分配限制,做大数量并发测试
1 2 3 4 5 6 7 8 9 10 11
| # 查看liunx支持的客户端连接端口范围 ]# cat /proc/sys/net/ipv4/ip_local_port_range # 查看端口有没用完 netstat -an 查看是否有端口在 timewait # 调低端口释放后的等待时间,默认为60s,修改为15~30s。 ]# echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
# 修改 tcp/ip 协议配置,通过配置 /proc/sys/net/ipv4/tcp_tw_reuse,默认为0,修改为1,释放TIME_WAIT端口给新连接使用。 ]# echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
# 修改 ctp/ip 协议配置,快速回收socket资源,默认为0.修改为1。 ]# echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
|
4、分布式配置
调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1、 原理:jmeter通过线程组来驱动多线程运行测试脚本,对被测服务器发起负载,每一个负载机上都能运行多个线程组 2、分布式配置: (1)调度机修改:在调度机上修改bin/jmeter.properties,添加执行机的IP及端口(使用-r启动所有从机)1099是默认的rmi通信端口,取消server.rmi.ssl.disable=false的中注释并将false改为ture
# Remote Hosts - comma delimited #负载机改为负载机的ip remote_hosts=10.10.10.10:1099,10.10.10.11:1099 server.rmi.ssl.disable=true (2)负载机:修改执行机中jmeter.properties的server_port=1099 修改jmeter.properites: server.rmi.ssl.disable=true,关闭ssl功能
]# chmod 777 jmeter ]# chmod 777 jmeter-server ]# ./jmeter-server #运行jmeter-server (3)调度机: jmeter -n -t testplan/comic.jmx -r -l testresult/result1.jtl 启动所有从机执行脚本
|
三、接口测试
1、测试脚本编写
1、在windows系统下编写,注意客户端与服务端的版本最好一致
2、http请求注意勾选keep-alive
3、生成的jmx上传到测试服务器,可在服务器上直接编辑修改并发数量等数值
2、运行
1 2 3 4 5 6 7 8 9
| jmeter -n -t after_call.jmx -l result_1000.jtl
-n : 非GUI 模式执行JMeter -t : 执行测试文件所在的位置及文件名 -r : 远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r -l : 指定生成测试结果的保存文件, jtl 文件格式 -e : 测试结束后,生成测试报告 -o : 指定测试报告的存放位置 -o 指定的文件及文件夹,必须不存在 ,否则执行会失败,对应上面的命令就是resultReport文件夹必须不存在否则报错
|
四、结果分析
1、运行结果
1 2 3 4 5 6 7 8 9 10
| summary = 640000 in 00:06:17 = 1697.4/s Avg: 1722 Min: 6 Max: 43033 Err: 16807 (2.63%)
summary:总数 00:06:17:时间6分17秒 1697.4/s:qps为1697.4/s Avg:1722 : 平均响应时间为1722ms Min:最小响应时间 Max:最大响应时间 Err:错误数量 (2.63%):错误率
|
2、jtl文件
可以导出在windows上的jmeter中打开,查看结果树、聚合报告,在文件名后面的浏览按钮点击打开
3、性能监控
Zabbix监控系统:cpu负载、内存、网络i/o,磁盘i/o等