共计 4124 个字符,预计需要花费 11 分钟才能阅读完成。
一、概述
JMeter 是 Apache 下一款在国外非常流行和受欢迎的开源性能测试工具,JMeter 可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能。
1、压测不同的协议和应用
1) Web – HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
2) SOAP / REST Webservices
3) FTP
4) Database via JDBC
5) LDAP 轻量目录访问协议
6) Message-oriented middleware (MOM) via JMS
7) Mail – SMTP(S), POP3(S) and IMAP(S)
8) TCP 等等
2、使用场景
1)功能测试
2)压力测试
3)分布式压力测试
3、优点
1)纯 java 开发
2)上手容易,高性能
3)提供测试数据分析
4)各种报表数据图形展示
4、本地快速安装 Jmeter4.x
(1)需要安装 JDK8 或者 JDK9,JDK10
(2)快速下载
windows:http://mirrors.tuna.tsinghua….
mac 或者 linux:http://mirrors.tuna.tsinghua….
(3)、文档地址:http://jmeter.apache.org/user…
(4)、配置环境变量(mac):
> vi .bash_profile
export JMETER_HOME=/Users/xxx/applications/apache-jmeter-5.3
export PATH=.:$JMETER_HOME/bin:$PATH
>source .bash_profile
二、Jmeter 目录文件讲解
简介: 讲解 jmeter 解压文件里面的各个目录,文件等
1、目录
bin: 核心可执行文件,包含配置
jmeter.bat: windows 启动文件:
jmeter: mac 或者 linux 启动文件:
jmeter-server:mac 或者 Liunx 分布式压测使用的启动文件
jmeter-server.bat:mac 或者 Liunx 分布式压测使用的启动文件
jmeter.properties: 核心配置文件
extras:插件拓展的包
lib: 核心的依赖包
ext: 核心包
junit: 单元测试包
2、Jmeter 语言切换
Jmeter 默认是英文版本的,你想改成中文版本可以在控制台:
- menu -> options -> choose language
当然如果你闲每次都手动修改语言麻烦,那么可以通过修改配置文件,直接设置成中文,设置方式:
- bin 目录 -> jmeter.properties
默认 #language=en
改为 language=zh_CN
JMeter—HTTP 压测
一、创建线程组
右击 –> 添加 –>Threads(Users)–> 线程组
下面对比较重要的几个参数,讲解下:
名称:就是给你这个线程组起名字。
线程数:指压力测试时候模拟几个用户测试接口。
Ramp-Up:这里指几秒运行完上面的模拟用户数。
循环次数:指循环几次线程数。
总的理解下:上面的意思是 2 秒内模拟 5 个用户请求 API,循环 2 次。
二、添加 HTTP
在线程组上右击 –> 添加 –>Sampler–>HTTP 请求
在 java 代码中添加 API 接口
@RequestMapping(value = "users", method = RequestMethod.GET)
@ResponseBody
public Object users() {List<String> userList = new ArrayList<>();
userList.add("张三");
userList.add("李四");
userList.add("王五");
System.out.println("获取用户接口......"); return userList;
}
三、查看结果树
在 线程组
上右击 –> 添加 –> 监听器 –> 察看结果树
运行 JMter 查看结果:
通过测试可以发现,已经向 users 接口请求 10 次,10 次都成功,也都有返回数据。
四、响应断言
响应断言:断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。
增加断言: 在线程组上右击 –> 添加 –> 断言 –> 响应断言
apply to(应用范围):
Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,则就有 sub sample(比较少用)
常用响应字段:
响应文本:即响应的数据,比如 json 等文本
响应代码:http 的响应状态码,比如 200,302,404 这些
响应信息:http 响应代码对应的响应信息,例如:OK, Found
Response Header: 响应头
模式匹配规则:
包括:包含在里面就成功
equals:完全匹配,区分大小写
再次运行 JMeter,查看结果:
发现 http 请求报错,因为返回数据不包含断言中所设定的数据。(一般调试阶段可以设置断言,但真实压力测试情况下建议不要开启断言和查看结果树,因为会因为性能问题,使测试结果不十分准确)
五、聚合报告
线程组右击 –> 添加 -> 监听器 -> 聚合报告(Aggregate Report)
lable: sampler 的名称
Samples: 一共发出去多少请求, 例如 5 个用户,循环 2 次,则是 10
Average: 平均响应时间
Median: 中位数,也就是 50% 用户的响应时间
90% Line : 90% 用户的响应不会超过该时间(90%的样本不超过这个时间。剩下的样本至少与此一样长)
95% Line : 95% 用户的响应不会超过该时间
99% Line : 99% 用户的响应不会超过该时间
min : 最小响应时间
max : 最大响应时间
Error%:错误的请求的数量 / 请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为 qps
KB/Sec: 每秒接收数据量
六、自定义变量
为什么使用:很多变量在全局中都有使用,或者测试数据更改,可以在一处定义,四处使用比如服务器地址你如果每一个里面都手动输入 127.0.0.1,那万一那天服务器地址变了,总不能在一个一个改服务器地址
吧,那么这里我们可以写在全局配置文件中。
线程组 ->add -> Config Element(配置原件)-> User Definde Variable(用户定义的变量)
上面配置了两个全局变量:
引用方式 ${XXX},在接口中变量中使用:
七、CSV 可变参数压测
作用:你在 API 接口传入参数的时候,不可能 100 次请求都传一样的参数,为了更真是的模拟用户,所传的参数当然也是随机的,这样才更真实。
线程组右击 –>add -> Config Element(配置原件)–> CSV data set config (CSV 数据文件设置)
比较关键的参数:
文件名:就是你引用的文件地址(因为大量的数据都会写在外部文件中)
变量名称:如果有多个用逗号隔开
分隔符:csv 默认用逗号,如果是 txt 文件这个需要设置符号
1、user.csv 文件
2、HTTP 请求
3、API 接口
@RequestMapping(value = "login", method = RequestMethod.POST)
@ResponseBody
public Object login(String name, String pwd) {List<String> userList = new ArrayList<>();
userList.add(name);
userList.add(pwd);
userList.add(name.length()+""); // 输出客户端传来的值
System.out.println("name:"+name+"----pwd:"+pwd); return userList;
}
测试运行(看 java 控制台)
JMeter—MySQL 压测
一、添加 MySQL 驱动 jar 包
在测试计划(Test Plan)页面添加 jar 包
二、添加 MySQL 连接配置
添加线程组右击 –> 添加(add)–> 配置元件(config element)–>JDBC connection configuration
核心配置
variable name for created pool(已创建池的变量名称)
Max Number of connections : 最大连接数
MAX wait : 最大等待时间
Auto Commit: 是否自动提交事务
DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/blog
JDBC Driver Class : 数据库驱动,选择不同数据库对应的驱动
username: 数据库用户名
password: 数据库密码
三、添加 JDBC Request
首先是添加线程组,然后右击 –> 添加 –>Samplar–>JDBC Request
参数讲解:(注意:上面的 sql 结尾不要加 ”;”)
variable name of pool declared in JDBC connection configuration(注意:这里要和上面的 variable name for created pool 里面一致)
Query Type:查询类型
parameter values: 参数值
parameter types:参数类型
variable names:sql 执行结果变量名
result variable names:所有结果当做一个对象存储
query timeouts:查询超时时间
handle results:处理结果集
执行不同语句选择不同的 Query Type
数据库信息
四、运行结果
说明数据库压测成功