一、jmeter简介
1.1 jmeter概念
Apache JMeter是Apache组织开发的基于Java的压力测试工具。
1.2 为什么使用Jmeter
开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件
支持接口测试,压力(负载和压力)测试等多种功能,支持录制回放,
入门简单相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试
多平台支持,可在Linux,Windows,Mac上运行
支持多协议
1.3 Jmeter的作用
接口测试
性能测试
压力测试
Web自动化测试
数据库测试
1.4 Jmeter怎么用
Windows下Jmeter下载安装
登录 http://jmeter.apache.org/download_jmeter.cgi ,根据自己平台,下载对应文件
1.5 安装JAVA环境
安装JDK,配置环境变量




验证jdk是否配置成功
win+r:进入cmd黑窗口

二、jmeter安装使用
2.1 jmeter安装使用
将下载Jmeter文件解压,打开/bin/jmeter.bat
这里注意,在windows环境下启动时黑窗口一定不要关闭,否则,jmeter无法启动

2.2 jmeter的目录结构

/bin 目录(常用文件介绍)
examples:目录下包含Jmeter使用实例
ApacheJMeter.jar:JMeter源码包
jmeter.bat:windows下启动文件
jmeter.sh:Linux下启动文件
jmeter.log:Jmeter运行日志文件
jmeter.properties:Jmeter配置文件
jmeter-server.bat:windows下启动负载生成器服务文件
jmeter-server:Linux下启动负载生成器文件
/docs目录——Jmeter帮助文档
/extras目录——提供了对Ant的支持文件,可也用于持续集成
/lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
/licenses目录——软件许可文件,不用管
/printable_docs目录——Jmeter用户手册
第三方插件目录路径:D:\install\jmeter\apache-jmeter-4.0\lib\ext
测windows服务器:
测linux服务器性能指标:
三、jmeter快速入门
3.1 jmeter界面了解
首先需要知道所有东西都是基于测试计划去进行操作的,也就是说这个测试计划相当于根目录
组件1:线程
标红的 jp@ 开头的是第三方插件,原本是没有的
第三方插件主要位置如下:
1)右击添加一个线程组
2)右击线程组查看监听器–>第三方插件
3)查看CPU和内存的插件
4)查看 TPS 的插件
5)线程组用来测数据库的功能按钮
6)预期结果和实际结果的对比
7)接口较多时需要用到定时器,他们之间需要有一个等待的时间
8)前置处理器—>用户参数:用户的设置在用户参数里配置好了的
9)后置处理器---->正则表达式提取器:多个接口之间有关联的,第一个接口响应的数据可能是第二接口请求的参数
10)配置原件:接口和本地数据的关联
11)监听器:监听接口的返回数据,常用的是察看结果树和聚合报告
3.2 jmeter简单演示
这里使用免费测试接口—>测qq吉凶 来演示
验证测qq吉凶这个接口通不通,操作如下:
1)比如说你拿到的接口文档如下:
2)使用jmeter,http请求进行测试
3)启动进行测试
保存接口脚本

4)查看测试结果
此时证明接口是通的,那么我们就可以进行并发操作了!!!
5)聚合报告参数详解
label:显示接口名字
samples:跑了多少并发(可通过点击线程组进行设置)
average:平均响应时间,单位是毫秒
median:50%的人请求响应时间
90%line:90%的人请求响应时间
95%line:95%的人请求响应时间
min:最小响应时间
max:最大响应时间
error%:错误率
throughput:吞吐量,单位时间内请求的次数
3.3 jmeter使用详解
3.3.1 线程组了解和使用
1)右击测试计划在取样器中找到线程组并添加
2)线程属性使用详情(结合察看结果树和聚合报告使用)
添加一个http请求演示


运行结果如下

这里设置开启10个线程,规定1秒内完成,循环次数为2,所以最后结果相当于将百度的http请求循环了20次,也就是请求了20次
3.3.2 图形结果和用表格察看结果
1)添加
2)结合压测使用
3)清空之前的数据
4)运行结果如下

3.3.3 固定定时器使用
1)添加
2)设定时间为3秒
3)运行察看效果
你会明显看到他请求的速度变慢,3秒后请求成功
3.3.4 响应断言和json断言使用
3.3.4.1 响应断言
1)添加
2)添加你想要的结果,测试响应后的内容中是否包含

3)运行察看效果
添加无效的关键词的返回结果(报红证明没有)

添加有效关键词

3.3.4.1 json断言
聚合报告—QQ测吉凶
1)添加对应的http请求
2)测试接口通不通
3)添加json断言
4)填写对应的断言信息
默认勾选的是正则表达式
5)运行看效果
6)修改返回值为错误的并运行看效果
3.3.5 CSV数据文件设置
这里使用免费测试接口,测试星座运势
https://www.juhe.cn/box/index/id/58
1)添加csv数据文件设置
2)在本地新建一个txt文件并填入内容
3)指定本地的txt文件
4)更改http请求中的参数为自定义参数
使用下方的手动填充参数时,需要勾选编码
5)运行测试查看结果
是否再次循环处于打开状态(true)
txt文件中的参数有5行及对应的日期
设置循环次数为6次
结果如下:

你会发现第6次返回的结果和第1次的结果是一样的
是否再次循环处于关闭状态(false)

你会发现第6次的结果为空,请求不到数据了
3.3.6 循环控制器
测试百度为例
1)添加循环控制器
2)将百度请求下拉到(添加到)循环控制器
注意:如果不把请求添加到循环控制器,那么你的循环效果是无效的
无效:

有效:

3)添加循环次数并查看效果



3.3.7 事务控制器
1)添加
2)在事务控制器下添加3个http请求
3)具体使用
勾选Generate parent sample
此时它会将这3个http请求看成是一个整体
运行结果如下:

不勾选Generate parent sample
此时运行后会请求3次并且加一个事务控制器,也就是显示4项内容
运行结果如下:

3.3.8 函数助手使用
在使用过程中,本地建的txt路径粘贴到函数助手,点击生成字符串时有可能会报错,我们可以将报错信息中的路径复制一下重新粘贴到需要粘贴路径的值的位置,其实俩个路径都是一样的,但是报错了,所以我们就用报错中的路径,如果还是不能够解决问题,我们可以将txt文件放在jmeter的bin目录下,这样就能够彻底解决问题了
1)添加http请求以及聚合报告和察看结果树
2)以测试新闻头条为例
找到函数助手并添加本地txt文件的路径
选择_CSVRead
找到本地txt文件的路径
注意:使用函数助手生成函数字符串时,解析出来的中文是乱码,需要自己上网解决
粘贴到名称对应的值中(值为0,第一个参数)
粘贴到名称对应的值中(值为1,第二个参数)
修改http请求中的参数值为生成的字符串
设置开启的线程数为7(txt文件中参数共6条)
运行效果如下
3.3.9 用户自定义变量
1)添加http请求
2)添加用户自定义变量
3)调用自定义变量
4)复制当前http请求,多复制几个,方便看效果
5)查看运行效果
你会发现自定义的变量成功了,请求返回的结果都是一样的
6)此时我们可以再更改一下变量试试
这里改成了上海,之前是温州
7)再次看看效果
恭喜你,已经会用自定义变量了!!!
3.3.10 正则表达式提取
运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
示例:
第一个接口返回值可能是第二个接口请求的参数
这里以测试新华字典和成语词典为例
比如:
汉字:为
成语:为所欲为
我们使用正则提取成语的为
1)添加基本请求以及聚合报告和察看结果树
2)测试俩个接口通不通
返回结果都是绿色的并且在响应数据中也能看到对应的内容,此时证明这俩个接口都是通的
3)添加正则表达式提取器
4)编辑正则表达式
5)调用正则提取器中的引用名称并填在成语词典的请求参数中
6)运行看看效果
如果想要对比一下的话,可以再将参数改成"为"
说明:
1.引用名称:
下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
2.正则表达式:
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
3.模板:

4.匹配数字:
0代表随机取值,1代表全部取值,通常情况下填0
5.缺省值:
如果参数没有取得到值,那默认给一个值让它取。
3.3.11 传参的使用(get,post,files upload)
get传参

post传参
post传递的是一个json串,而且你在接口文档中复制粘贴的json串可能会出现一些小错误,是开发那边编辑接口文档时不规范造成的,所以说一般情况下我们测接口是不用jmeter的,使用postman更方便!!!
files upload
用来传文件的