Jmeter
# 环境搭建
# 安装
- 下载:https://jmeter.apache.org/download_jmeter.cgi (opens new window)
- 解压到文件夹
- 修改编码集:修改bin目录下的 jmeter.properties
##sampleresult.default.encoding=ISO-8859-1
找到这行代码,取消注释并将ISO-8859-1改为UTF-8
# 启动

# 基本使用
# 快速入门
- 创建线程组

- 添加取样器

- 配置取样器的请求地址与请求参数

- 如果需要设置请求头则右键HTTP请求配置HTTP信息头管理器
- 添加监听器 - 查看结果树

- 点击绿色箭头启动测试
# 并发执行与顺序执行
并行执行:
顺序执行:选择测试计划 -> 下方勾选独立运行每个线程组

# 线程组常用属性配置

线程数:几个人 循环次数:每个人请求几次
# HTTP请求默认值
操作路径
右键测试计划 -> 添加 -> 配置元件 -> HTTP请求默认值
可以配置该分组下的一些默认HTTP采样器配置
# HTTP信息头管理器
操作路径
右键测试计划 -> 添加 -> 配置元件 -> HTTP信息头管理器
配置HTTP请求头信息,如token、content-type等
# 参数化
# 用户定义变量
操作路径
右键测试计划 -> 添加 -> 配置元件 -> 用户定义的变量
字面意思,定义变量,可复用
使用方式:${变量名}
# CSV 数据文件设置
操作路径
右键测试计划 -> 添加 -> 配置元件 -> CSV 数据文件设置
可以批量执行准备好的数据
CSV文件格式:
注意:要以UTF-8编码输出/保存文件
具体设置:
将线程组的循环次数设置为永远
因为是一行行读的,这里不设置永远的话读完一行就结束了
# 直连MySQL数据库
下载mysql jdbc驱动包。jmeter要连接mysql数据库,首先得下载mysql jdbc驱动包,尽量保证其版本和你的数据库版本一致,至少不低于数据库版本,否则可能有问题。
官网下载地址为:https://dev.mysql.com/downloads/connector/j/ (opens new window)
导入连接池jar包:
配置数据库连接池:
操作路径
右键测试计划 -> 添加 -> 配置元件 -> JDBC Connection Configuration

Variable Name:数据库连接池的名称,在JDBC Request中会用到;
Database URL:数据库URL,jdbc:mysql:// IP地址:端口/库名;
JDBC Driver Class:JDBC驱动;
Username:数据库用户名;
Password:数据库密码;
添加JDBC请求取样器:
操作路径
右键测试计划 -> 添加 -> 取样器 -> JDBC Request

# 断言
响应断言:断言状态码和响应体
大小断言:判断响应内容的字节长度
断言持续时间:判断响应时间
# 响应断言
操作路径
右键取样器 -> 添加 -> 断言 -> 响应断言

解释:(以测试模式下的内容为例)
注意
- 包括: 包含a和b
- 匹配: 正则匹配a和b
- 相等: 完全等于a和b
- 否: 结果取反
- 或者: 存在多测试模式时,取或,如包含a或b
# 大小断言
操作路径
右键取样器 -> 添加 -> 断言 -> 大小断言

注意比较的是测试字段的大小,而非值
# 断言持续时间
操作路径
右键取样器 -> 添加 -> 断言 -> 断言持续时间

# 性能测试
# 高并发
JMeter中内置了定时器,可以实现时间模式相关的性能测试
场景
需求:同一时刻100个请求去访问一个接口,统计高并发情况下平均响应时间以及错误率(高并发)
- 搭建框架,测试计划,线程组,取样器,结果树(局限性),指定线程组的线程数属性为100
- 添加定时器synchronizing timer(集合点组件)
- 运行并查看结果:聚合报告组件,可以对结果汇总分析
指定线程组的线程数为100
创建同步定时器组件
操作路径
右键取样器 -> 添加 -> 定时器 -> synchronizing timer

作用:可以理解成一趟车的座位数,坐满才发车,比如100人,100座,那就是一趟车;
如果是100人,30座,三趟车下来还剩10人,坐不满,这时等待超时时间如果是0,则会一直等待,所以一般不建议将超时时间设置为0,可能会出现线程傻等的情况
添加聚合报告
操作路径
右键测试计划 -> 添加 -> 监听器 -> 聚合报告

主要关注的就是异常率和吞吐量,其次是平均响应时间
# 高频率
场景
需求:一个用户以20QPS(20次/s)的频率访问一个接口,持续15秒,统计服务器的平均响应时间
QPS:Query per Seconds每秒钟查询数(查询率),每秒访问多少次服务器
- 搭建框架,测试计划,线程组,取样器,结果树,根据题干计算:循环次数=访问频率*持续时间
- 添加QPS访问频率控制的相关组件:每分钟访问次数=访问频率*60
指定线程组的循环次数
创建常量吞吐量定时器
操作路径
右键取样器 -> 添加 -> 定时器 -> Constant Throughput timer

添加聚合报告
操作路径
右键测试计划 -> 添加 -> 监听器 -> 聚合报告

主要关注的就是异常率和吞吐量,其次是平均响应时间
# 图形化测试报告
在JMeter中可以以图形化(饼状图、柱状图...)的方式显示脚本运行结果,较之于聚合报告或查看结果树组件实现更直观,用户体验更友好。
提示
生成图形化测试报告命令:jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
- -n 无图形化运行
- -t 被运行的脚本
- -l 将运行信息写入日志文件
- -e 生成测试报告
- -o 指定报告输出目录
注意
- 日志文件可以事先不创建,如果日志文件存在需要保证内容为空,否则会报错
- 如果没有配置环境变量,则需要在bin目录下执行
示例:jmeter -n -t post1.jmx -l test.txt -e -o ./log

出现end of run 则是运行完毕
最后在指定的目录下会生成这么些文件,打开其中的index.html
得到图形化报告
# 概念相关
# 线程组
进程:正在进行的程序
线程:进程中的执行单位
线程组:进程中有许多线程,为方便管理,可以对线程按照性质分组,分组的结果就是线程组
三者关系:一个进程包含多个线程组,一个线程组可以包含多个线程
特殊线程组
- setup线程组:最优先执行的线程组
- teardown线程组:最后执行的线程组
# 结果树
在哪个线程组获取哪个线程组的执行结果