Jmeter 接口测试工具
(1)Jmeter 介绍
JMeter是一款 JAVA 桌面应用程序,常常被用来做接口测试、负载测试等等
JMeter是一款开源测试工具:
开源免费软件,不需要任何使用费用
小巧绿色,相比LoadRunner的庞大,它非常小巧并且不需要安装(需要安装 JDK)
功能强大,设计之初只是一个简单的性能测试工具,经过无数次更新已变得非常强大
(2)Jmeter 下载安装
1、Jmeter 下载
Jmeter 安装包下载(解压即可)
链接:apache-jmeter-5.0.rar 下载地址
提取码:njmp
2、JDK 安装
JDK 安装包下载(内含安装教程)
链接:jdk-8u191-windows-x64.exe 下载地址
提取码:q1f8
Jmeter 运行
Jmeter 启动相当简单,双击 bin 目录下的jmeter.bat文件即可
Jmeter 启动成功后的界面
(3)Jmeter 功能说明
1、接口测试- 示例
新建线程组 => 右键测试计划 => 添加 => 添加 => 线程(用户) => 线程组
线程数:模拟用户请求线程数(单接口用默认值1即可)
Ramp-Up时间(秒):启动设定线程数在设定时间内启动(单接口用默认值1即可)
循环次数:可勾选永远或指定循环次数(单接口用默认值1即可)
新建Http请求 => 添加 => 取样器 => Http 请求
名称:接口名称
协议:Http 、 HTTPS
服务器名称或 IP : 请求服务器域名或 IP 地址
端口号:XXXX(默认端口 80 可以省略)
方法:GET、POST 等等
路径:(接口地址名称)
内容编码:UTF-8(支持中文)
参数:添加行参数
消息体数据:JSON 格式数据等
文件上传:测试接口带有文件(文本文件、图片文件等)
测试计划
Test Plan (测试计划):用来描述一次接口测试或性能测试相关内容,也就说测试的所有内容是于基于计划完成的
3、线程组
Thread Group(线程组):线程组中的每个线程都是一个虚拟用户,线程组中包含的线程数量在测试执行过程中不会发生改变
线程组位置:右键测试计划 => 线程(用户) => 线程组
线程数:模拟用户请求线程数(即虚拟用户数)
Ramp-Up时间(秒):启动设定线程数在设定时间内启动,立即启动可设置0
4、取样器
Sampler(取样器):取样器是接口测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,Jmeter 支持特别多取样器:如 HTTP 请求、FTP 请求、JAVA 请求等等,在这里只介绍 HTTP Request(HTTP 请求),如需要了解更多,请自行百度
取样器位置:右键线程组 => 添加 => 取样器 => Http 请求
名称:接口名称
协议:Http 、 HTTPS
服务器名称或 IP : 请求服务器域名或 IP 地址
端口号:XXXX(默认端口 80 可以省略)
方法:GET、POST 等等
路径:(接口地址名称)
内容编码:UTF-8(支持中文)
参数:添加行参数
消息体数据:JSON 格式数据等文件上传:测试接口带有文件(文本文件、图片文件等)
文件上传:测试接口带有文件(文本文件、图片文件等)
5、逻辑控制器
Logic Controller(逻辑控制器):逻辑控制器对其子节点的取样器有效,作用是控制取样器的执行顺序,Jmeter 总数有 17 种逻辑控制器,功能各不相同,但是大概可以分为 2 种类型
第一种类型:控制测试计划节点的执行顺序 (如果(if)控制器、While控制器等)
如果(if)控制器 - 示例
如果(if)控制器:如需要对不同的条件做不同的操作,我们可以使用(if)控制器来实现
条件格式:${__jexl3(条件表达式)}:表达式可使用Jmeter 函数助手(参见12、函数助手)
完成需求:如果登录接口返回参数errno = 0,执行用户信息接口,否则不执行
实现步骤(已知登录接口返回 JSON 数据):
第一步:右键登录接口 => 后置处理器 => JSON 提取器
第二步:点击“选项”=> 函数助手 => 选择函数“__jexl3”=>引用变量名“login_judge”
获得函数:${__jexl3(${login_judge},)}
最终函数:${__jexl3(${login_judge}==0,)}(判断的条件为字符串需要加"")
第三步:在(if)控制器下添加用户信息接口
While 控制器 - 示例
While 控制器 :一直循环执行子节点内容,直到条件为False(假)
Condition 条件如下:
1、为空:直到请求失败退出循环
2、LAST:直到最后一个请求失败退出循环
3、其他:条件值为False,退出循环
While 控制器 - 示例:登录判断 errno != 0,退出循环
第二种类型:统计执行结果以及进行脚本的运行时控制(吞吐量控制器、事务控制器等)
吞吐量控制器 - 示例
吞吐量控制器:它跟吞吐量没有任何关系
两种执行方式:设置百分比行和设置线程数控制执行执行次数
前置处理器
Pre Processors(前置处理器):前置处理器用于在实际的请求发出之前,对发出的请求进行特殊处理,Jmeter 提供了 8 种(这里不一一说明,主要说明用户参数)
用户参数 - 示例
添加变量:添加用户参数,支持多参数
添加用户:添加参数使用用户,支持多用户
每次迭代更新一次:勾选后,每次运行都要重新获取参数(针对使用随机函数)
7、后置处理器
Post Processors(后置处理器):后置处理器是用于对取样器发出请求后得到的服务器响应进行处理,一般用来提取响应中的特定数据,Jmeter 提供了 11 种(这里不一一说明,主要说明 Json 提取器与正则表达式提取器)
Json 提取器 - 示例
如下 JSON 代码:提取 authToken 的值
{
"errno": 0,
"data": {
"authToken": "37f95bc40fb0ccb0be4e922655d4660b"
},
"errmsg": "登录成功"
}
位置:添加 => 后置处理器 => Json 提取器
引用变量:${authToken}
正则表达式 提取器 - 示例(可以提取任何格式数据,这以JSON数据为例)
如下 JSON 代码:提取 authToken 的值
{
"errno": 0,
"data": {
"authToken": "37f95bc40fb0ccb0be4e922655d4660b"
},
"errmsg": "登录成功"
}
位置:添加 => 后置处理器 => 正则表达式提取器
断言
Assertions(断言)一般用来设置检查点,用于检测实际数据是否符合预期,Jmeter 总数有13 种断言(这里不一一说明,主要说明:响应断言与 JSON 断言)
响应断言 - 示例
如下 JSON 代码:断言 errno = 0 为接口成功,反之接口失败
{
"errno": 0,
"data": {
"authToken": "37f95bc40fb0ccb0be4e922655d4660b"
},
"errmsg": "登录成功"
}
JSON 断言 - 示例
如下 JSON 代码:断言 errno = 0 为接口成功,反之接口失败
位置:添加 => 断言 => JSON 断言
定时器
Timer(定时器)用于操作之间设置等待时间,也就是我们常说的思考时间,Jmeter 有9 种定时器(这里不一一说明,主要说固定定时器、高斯随机定时器)
定时器作用域:定时器是在每个取样器之前执行,如果希望定时器仅应用于其中一个取样器,则在其子节点中加入,定时器的延时不会计入取样器的响应时间
固定定时器 - 示例
固定定时器:登录请求延迟1000毫秒执行
位置:添加 => 定时器 => 固定定时器
高斯随机定时器 - 示例
高斯随机定时器:要求随机时间在200毫秒~300毫秒之间
位置:添加 => 定时器 => 高斯随机定时器
配置元件
Config Element(配置原件),用于提供对各种数据支持,Jmeter 有19种配置原件(这里不一一说明,主要说明 CSV 数据文件设置、HTTP 信息头管理器、HTTP 请求默认值、用户自定义变量)
CSV 数据文件设置 - 示例
CSV 数据文件设置:
位置:添加 => 配置元件 => CSV 数据文件设置
准备 CSV 格式数据:
配置 CSV 数据:
引用 CSV 数据:
HTTP 信息头管理器 - 示例
HTTP 信息头管理器:
位置:添加 => 配置元件 => HTTP 信息头管理器
行后结果:
HTTP 请求默认值 - 示例
HTTP 请求默认值:
位置:添加 => 配置元件 => HTTP 请求默认值
使用后的效果:
用户自定义变量 - 示例
用户自定义变量:定义变量 phoneNumber = 18589236787
位置:添加 => 配置元件 => 用户自定义变量
引用自定义变量:
监听器
Listener(监听器),用于对测试结果数据处理和可视化展示的一系列元件,Jmeter 提供了16 种监听器(这里不一一说明,只讲解最常用察看结果树、聚合报告)
察看结果树 - 示例
察看结果树:显示了每一个取样器的结果、请求信息和响应信息,可以分析接口是否存在问题
位置:添加 => 监听器 => 察看结果树
聚合报告 - 示例
聚合报告:对于每个请求统计响应信息并提供请求数、平均值、最大、最小值、错误率、大约吞吐量、kb/秒为单位的吞吐量
1、Label:请求名称
2、#Samples:总线程数 = 线程数 * 循环次数
3、Average:单个请求的平均响应时间 = 总运行时间 / 发送到服务器的总请求数
4、Median、90%line、95%line、99%line:分别代表50%的用户响应时间、90%的用户响应时间、95%的用户响应时间、99%的用户响应时间(90%line是性能测试重要的一个衡量指标)
5、Min:最小响应时间
6、Max:最大响应时间
7、Error%:错误率 = 发生错误的请求 / 总请求数
8、Throughput:吞吐量,表示每秒完成的请求数
9、KB/sec:每秒发送的千字节为单位测量数据
12、函数助手
函数助手对话框(Ctrl + Shift + F1),可以参照一定的规则生成数据函数,Jmeter 支持的函数特别多(不一一说明,主要说明随机数、当前时间、唯一ID)
随机数函数 - 示例
随机数函数:可按照一定规则生成需要的随机数
位置:选项 => 函数助手对话框 => 随机数函数 => __Random()
当前时间函数 - 示例
随机数函数:可按照一定规则生成时间函数
位置:选项 => 函数助手对话框 => 随机数函数 => __time()
时间格式说明:
1、${__time(yyyy-MM-dd HH:mm:ss:SSS,time)} :格式化生成时间格式 2100-01-01 11:08:23:635
2、${__time(yyyy-MM-dd HH:mm:ss,time)} :格式化生成时间格式 2100-01-01 11:08:23
3、${__time(yyyy-MM-dd,time)} :格式化生成时间格式 2100-01-01
4、${__time(,)}:默认该公式精确到毫秒级别, 13位数 1527822855323
唯一ID函数 - 示例
唯一ID函数:可按照一定规则生成需要的唯一表示
位置:选项 => 函数助手对话框 => 随机数函数 => __UUID()