JMeter介绍与安装
性能测试基本概念
为什么要做性能测试?
1、满足用户使用需求:网站访问量大崩溃
2、最小化成本:新服务上线不知道多少台服务器
3、评估应用系统性能,给运维做系统容量规划提供依据、给开发提供应用优化参考。
性能测试的基本概念
1、什么是新能测试?
模拟多个用户测操作对服务器硬件性能的影响
2、TPS(Transaction per Second)每秒事物处理能力
3、RT(Response Time)响应时间
常见性能压力测试工具
Apache ab:APache HTTP服务性能基准工具
APache JMeter:支持很多协议,开源免费,使用java语言开发
LoadRunner:支持很多协议,收费软件,使用C语言开发
Locust:有Web界面,支持很多协议,开源免费,使用Python开发
nGrider:Naver公司基于Grider开发的性能测试平台。Grinder是一个能运行jython(在JVM上运行的Python)、groovy编写测试脚本的应用程序。免费软件,使用Java语言开发。(运行ngrinder-controller.war,默认账户与密码:admin)
JMeter优点
1、入门简单,有图形调试界面
2、使用java语言开发,支持多操作系统平台
3、插件机制,可以二次开发定制协议。可以使用三方开发者开发的协议支持
JMeter安装
安装JDK(1.8版本)
官网地址:https://www.oracle.com/cn/java/technologies/javase-downloads.html
windows系统环境变量配置
JAVA_HOME D:\Android\Java\jdk1.8.0_25 (注意这里面的JAVA_HOME大写后面会用到)
classpath .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; (注意最前面加点和分号)
path %JAVA_HOME%bin;%JAVA_HOME%\jre\bin;
mac配置
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME/bin:.
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
下载JMeter
JMete官网:http://jmeter.apache.org/download_jmeter.cgi
下载完成后直接解压
点击bin目录下的jmeter可执行文件
压测脚本的录制和编写
前提
1、JMeter配置
2、浏览器配置
3、录制与回放
操作
1、添加Recording Controller
路径:Test Plan -> Thread Groud ->Add ->Logic Controller ->Recording Controller
新建HTTP Test Script Recoder
监听对应的请求,记录到Recording Controller中
2、点击start后,bin目录下会生成对应的证书
3、点击安全证书,做安全认证。
- 火狐浏览器认证步骤
4、配置好代理,访问页面,这是就可以抓取到对应的请求信息
5、过滤请求资源
6、添加View Results Tree。用与查看手动发送的请求返回的结果
请求后返回结果
虚拟用户并发模拟
创建一个线程组,发送对应的请求,比如20个5秒,每秒发送4个请求。但是如果要求每秒发送的请求数量超过压载机的性能时。这时也会造成数据压不上去的情况,直接会报机器资源不够。内存溢出等情况。如果勾选上下面的Infinite请求就会一直发送。
通过jconsole查看性能情况
更改JMeter配置,提高压载(bin目录下,打开vim jmeter.sh)
通过jconsole查看查看性能(JDK自带)
其他两个线程组配置
Specify Thread lifetime设置
压测结果分析
View Results Tree
功能:
正则表达式测试:RegExp Tester
CSS选择器测试
XPath测试:XPath Tester(Use Tidy)
JSON Tester:
Aggregate Report 聚合报告
Aggregate Report:聚合报告
参数:
平局值:平局响应时间,所有请求的平均响应时间
中位数:50%的用户响应时间不超过这个值
99%Line:99%的用户响应时间不超过这个值。
Error%:异常百分比。(错误请求的数量/请求的总数)
Throughput:吞吐量,默认情况下每秒完成的请求数。
Received KB/sec:接收数据
不使用图形化界面操作
先在JMeter中保存请求文件,(请求线程中Control+S)比如这里保存HTTP Request.jmx
jmeter.sh -n -t HTTP Request.jmx -l test_HTTP.jtl
-n 不启动图形化界面 -t 指定运行的线程组文件 -l 指定我们的输出
JMeter分布式压测
分布式简介
为什么要使用分布式?
单机性能瓶颈:CPU、内存、IO
参考:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html#terminology
工作节点(Slave)部署
1、负载机(Slaves):端口tcp 1099
jmeter.properties
关闭SSL:server.rmi.ssl.disable=true
system.properties
java.rmi.server.hostname=192.xxx.xx.xx
2、运行:jmeter-server
jmeter.properties 关闭SSL:server.rmi.ssl.disable=true
system.properties 添加 java.rmi.server.hostname=IP
控制节点(Master)部署
控制端(Master):端口 udp 4445
jmeter.properties
添加负载机IP:remote_hosts=负载节点IP, 负载节点IP,负载节点IP
关闭SSL:server.rmi.ssl.disable=true
查看负载节点机器
run - Remote Start
启动远程所有负载节点
使用命令行驱动多个节点运行
jmeter.sh -n -t HTTP Request.jmx -l test_HTTP.jtl -R 负载分支节点IP,负载分支节点IP,负载分支节点IP
注意:
性能监控系统
InfluxDB简介
使用数据展示平台展示JMeter实时压测数据
GitHub地址:https://github.com/influxdata/influxdb
Docker仓库地址:https://hub.docker.com/_/influxdb
部署InfluxDB
influxDB是一个用Go语言开发的开源分布式时序数据库
新建容器网络:docker network create grafana
查看是否新建成功:docker network ls
下载influxdb:docker pull influxdb:1.7.10
运行容器:docker run -d --name=influxdb --network grafana -p 8086:8086 -v ${PWD}/influxdb/:/var/lib/influxdb influxdb:1.7.10
创建数据库:
第一种方式:curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE jmeter"
第二种方式:docker exec -it influxdb influx ,执行语句 create database jmeter;
简单使用:
show databases;
use jmeter;
show measurements;
select * from jmeter limit 3;
部署Grafana
GitHub地址:https://github.com/grafana/grafana
Docker仓库地址:https://hub.docker.com/r/grafana/grafana
1、Grafana是一个可视化面板(Dashboard)工具,有非常漂亮的图表展示功能、齐全的度量仪表和图形编辑器。
2、安装:docker pull grafana/grafana
3、运行容器:docker run -d --name grafana --network grafana -p 3000:3000 grafana/grafana:6.6.2
4、访问:http://localhost:3000
5、默认登陆账号:admin 密码:admin
Grafana配置数据源
配置InfluxDB数据源
URL:http://influxdb:8086
Database:jmeter
Min time interval : 5
查看Influxdb中url
新建Dashboards
配置对应的展示dashboards
点击import,进入大盘
Jmeter监听配置
补充
1、压测计划
2、模拟数据
3、设置全局变量
4、取获得返回值做参数
5、断言
6、等待
压测计划
模拟数据
直接在数据库插入,可以使用MySQL WorkBench手工插入
设置全局变量
设置随机变量
线程组 - add - config Element - Random Variable
设置全局变量
线程组 - add - config Element - CSV Data Set Config
本地预设变量
安装Random CSV Data Set Config插件
安装方式:
4、取获得返回值做参数
获取对应下域名(Domain)的Cookie .配置:线程组 - add - config Element - HTTP Cookie Manager
5、断言
6、时间限制
7、用例运行限制