接口测试 Jmeter
1.Jmeter概述
1.1 Jmeter简介
? Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
? 是一款接口压测工具,同类的产品有loadrunner,loadrunner是收费的。
1.2 Jmeter作用
1.接口测试
? 2.性能测试:内在 —程序的算法 响应时间 1个功能的花费时间
? postman,但jmeter有参数化,更强大
? 3.压力测试:外在 —12306买票 响应时间要求不高,但并发用户数 系统不会挂 要好 测最大的负载量 用户数
4.web自动化测试
5.数据库测试:测试数据库 jmeter能连接数据库
6.Java程序测试
1.3 Jmeter优点
1.开源、免费
2.支持多协议:http https ftp文件传输协议
3.小巧 47M
4.功能强大
1.4 Jmeter缺点
1.不支持IP欺骗 天气预报接口 1天内超过2次就收费
? 如果能IP欺骗,就可以免费访问接口
2.不支持前端测试,前端用Selenium测试
2.Jmeter环境搭建
2.1 Jmeter下载
? 进入官网:http://jmeter.apache.org/
1.第一步进入官网如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYtCyXYe-1632792995399)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193738.png)]
2.选择进行下载,下载下来为一个压缩包,解压即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kWdmoOQ6-1632792995404)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210928092856.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vjx6t87-1632792995407)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193800.png)]
3.我下载的是jmeter5.4版本,对应jdk1.8。然后就进行解压。
2.2 JDK安装
JDK1.7 意思即可(安装省略)
2.3 Jmeter安装
1.) 电脑桌面----》“计算机”图标----》鼠标右键选择“属性”----》点击高级系统设置----》高级—》环境变量页面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXdrq4dJ-1632792995410)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193817.png)]
2) 开始配置环境变量了。在系统变量框,点击“新建”,建立一个变量:JMETER_HOME,值为你解压的jmeter安装路径。我的安装路径是在D盘,这个路径根据自己实际安装路径进行填写。然后点击确定保存即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZLw4rZw-1632792995412)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927131129.png)]
3)配置classpath变量
? path: %JMETER_HOME%\lib
4)基本配置完成,然后验证一下是否配置正确,是否可用。
首先进到你的jmeter安装路径,找到bin文件夹,点击进去,找到jmeter.bat,鼠标右键用管理员方式运行,或者直接双击打开,此时会弹出2个界面:1.个是命令窗口,使用jmeter的时候此命令窗口不能关,你缩小到电脑任务栏即可。2.还有一个界面是jmeter工作页面,你可以在里面进行相关的操作.具体如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UeAFZAfL-1632792995414)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193902.png)]
5)确认安装是否成功,双击jmeter.bat或者以管理员方式运行,页面如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNCaNWu1-1632792995415)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193920.png)]
6)jmeter的工作区域如下:,我们每次使用jmeter的首先打开方式就是进入bin文件下双击这个jmeter.bat,如果觉得麻烦,可以鼠标右键快捷方式发送电脑桌面,就会方便很多。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KsS6dpkI-1632792995417)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193930.png)]
3.Jmeter线程组
3.1 什么是线程组
进程:正在运作中的程序—QQ、微信、迅雷
线程:进程中的执行单元 一个进程包含多个线程 —下载 播放
? 每发起一个http请求,系统对应一个线程
线程组:按照线程性质对线程进行分组 --单个下载 批量下载 – 接口分组
接口分组:
接口分组 http请求------对应----线程 线程组
顺序执行:按照线程的启动顺序挨个执行 ----线程组内顺序执行
并发执行:多个线程同时执行 特定:执行结束顺序和线程的启动顺序不一定一致 —线程组间并发执行
? 线程数5:–模拟用户数 5个用户 时间(秒数)10:指定时间内启动所有线数 10 10秒钟之内启动3个用户(区间内) 2个小时内 陆陆续续有300个用户 ? 循环次数3:单个用户访问次数 3 每个用户执行3次
3.2 Http请求
一个接口请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6E020ohg-1632792995420)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193948.png)]
关于http请求的的属性参数说明:
1)名称:用于标识一个sample。建议使用一个有意义的名称
2)注释:对于测试没任何影响,仅用来记录用户可读的注释信息
3)服务器名称或IP:http请求发送的目标服务器名称或者IP地址,比如http://www.baidu.com
4)端口号:目标服务器的端口号,默认值为80,可不填
5)协议:向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http
6)方法:发送http请求的方法(链接:https://blog.csdn.net/frank_ldw/article/details/88394063)
7)Content encoding:内容的编码方式(Content-Type=application/json;charset=utf-8)
8)路径:目标的URL路径(不包括服务器地址和端口)
3.3 Http信息头管理器
JMeter不是浏览器,因此其行为并不和浏览器完全一致。这些JMeter提供的配置元件中的HTTP属性管理器用于尽可能模拟浏览器行为,在HTTP协议层上发送给被测应用的http请求
http信息头管理器添加好之后,需要填入信息头的名称以及对应的值,如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vIsyljzQ-1632792995421)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927193958.png)]
3.4 查看结果树
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WGGFcHGk-1632792995422)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194006.png)]
如上,测试结束后,如果我们的请求成功发送给服务器,那么结果树里面的模拟请求会显示为绿色,可以通过取样器结果里面的响应状态码信息来判断。
也可以点击请求模块,查看我们发送的请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pcj6Rlgd-1632792995424)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194014.png)]
里面有我们发送的请求的方法、协议、地址以及实体主体数据,以及数据类型,大小,发送时间,客户端版本等信息
响应数据:里面包含服务器返回给我们的响应数据实体,如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5WEXUox0-1632792995425)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194026.png)]
3.5 Http Cookie管理器
web网站的请求大部分都有cookies,jmeter的HTTP Cookie管理器可以很好的管理cookies。
直接加一个HTTP Cookie管理器放到请求的最前面,就可以自动管理cookies了。
比如:当登录成功了,服务端会返回2个token,
添加后会自动保存你每次请求的cookies,
后续的请求都会带上前面的cookies,就跟你正常访问浏览器是一样的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pAYqtvgC-1632792995426)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194036.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lfhN00q4-1632792995428)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194050.png)]
3.6 聚合报告
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C3XdXeDS-1632792995430)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194058.png)]
对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量.
Label:请求的名称,就是我们在进行测试的httprequest sampler的名称
Samples:总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次;
Average:默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间 ,单位是毫秒
Median: 50%用户的请求的响应时间,中位数
90%Line:90%的请求的响应时间
95%Line:95%的请求的响应时间
99%Line:99%的请求的响应时间
Min:最小的响应时间
Max:最大的响应时间
Error%:错误率=错误的请求的数量/请求的总数
Throughput: 默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/sec: 每秒从服务器端接收到的数据量
3.7 Http请求默认值
一般情况下,我们在一个项目中调用的接口中域名、端口等都是相同的。当我们创建多个HTTP 请求时,由于这些数据是必填项,所以,我们就需要不停地填写相同的数据。如果项目进行过程中出现了更改域名、更改端口号等情况,我们又需要把每一个请求中的数据都做更改,这样看上去似乎有些麻烦了。
下面我们就来介绍一种方法将这些相同的参数设置为默认的,每次创建 HTTP 请求时就不用再输入了,这就需要我们配置【HTTP 请求默认值】来实现了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dvb9BqVG-1632792995431)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194119.png)]
3.8 调度器(计时器)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pOEhovzV-1632792995433)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194124.png)]
? 一般勾选永远 ? 循环次数:设置为永远 ? 持续时间: 5秒 ? 启动延迟时间:3秒 3秒后开始启动,持续访问5秒钟 ? x秒后访问服务器,持续y秒
3.9 setUp线程组
最先执行的线程组 用途:资源加载,数据初始化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIsk7I77-1632792995434)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194135.png)]
3.10 tearDown线程组
最后执行的线程组 用途:程序正式关闭之前,将数据保存进内存
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-96YbMBGv-1632792995436)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194143.png)]
4.Jmeter函数
4.1 计数器函数
1.设置计数器函数
选择counter函数,输入TRUE,每个用户有自己的计数器,点击生成:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sOH64UPN-1632792995437)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194150.png)]
2.使用计数器函数
复制生成的函数字符串:${__counter(TRUE,)},放到需要用的地方:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6FNAA7x2-1632792995438)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194158.png)]
4.2 随机数函数
1.设置随机数函数
选择Random函数,输入最小值和最大值,点击生成:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q6GQxOI6-1632792995440)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194205.png)]
2.使用随机数函数
复制生成的函数字符串:${__Random(1,99,)},放到需要用的地方:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJ8JLvC4-1632792995441)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194213.png)]
4.3 时间函数
1.设置时间函数
选择time函数,输入时间格式yyyy-mm-dd HH:MM:SS,点击生成:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PCCOvx32-1632792995442)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194224.png)]
2.使用时间函数
复制生成的函数字符串:${__time(yyyy-mm-dd HH:MM:SS,)},放到需要用的地方:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTioMQ2G-1632792995444)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194233.png)]
5.Jmeter参数化
参数化是指动态的设置并获取数据
参数化就是可以程序代替人工设置并获取数据:安全 高效
5.1用户定义的变量
jmeter的自定义变量可以让我们随机选取变量,从而达到在性能测试过程中可以随机选取变量的目的。
设置自定义变量如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDzYpdnQ-1632792995445)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194241.png)]
获取自定义变量:
? 引用已定义的变量:${变量名},比如: ${user1}
5.2 CSV Data Set Config
批量读取数据, 从文件中读取变量值,用于变量的参数化
A. Jmeter 参数CSV Data Set Config
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oumb4w1G-1632792995448)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194257.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lDKZytP8-1632792995450)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194304.png)]
B.CSV文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCxOnOvi-1632792995451)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194310.png)]
C.body传值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VOvIYa79-1632792995452)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194316.png)]
6.Jmeter高并发
高并发场景:模拟100个用户同时访问服务器资源,要求平均响应时间在30ms内,且错误率为0
线程组:线程数:100 http请求: 同步定时器: 模拟用户组的数量:100 一个批次请求的人数 100人分1批 超时时间以毫秒为单位:10
? 聚合报告:对结果汇总分析
5.1 线程组设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b0ZQhnCG-1632792995455)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194324.png)]
5.2 同步定时器设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X4gCohOe-1632792995456)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194333.png)]
7.Jmeter断言
7.1 什么是断言
在 jmeter 中断言用于验证服务器返回的数据是否满足我们的要求
让程序代替人工判断响应结果是否符合预期。
Restful风格:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KTUaBJGr-1632792995457)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195929.png)]
1.响应断言 = 断言状态码和响应文本
? 响应状态码: 相等 200
? 响应文本:包含 相等
2.大小断言 = 判断响应内容的字节长度
3.断言持续时间 = 判断响应时间
7.2 响应断言
响应文本:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JDOTJXzq-1632792995459)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194342.png)]
响应代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SOMhy8OX-1632792995460)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194347.png)]
7.3 大小断言
判断字符大小的长度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9U7iS7Bk-1632792995463)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194352.png)]
7.4 断言持续时间
判断响应时间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwbiM19b-1632792995466)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194610.png)]
8.循环控制器
8.1 仅一次控制器
? 设置了“仅一次控制器”的接口请求,一个用户只会执行一次。
http请求要放到“仅一次控制器”里面,被控制器控制才有效。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFCBcegF-1632792995468)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194636.png)]
8.2 if逻辑控制器
if逻辑控制器,当满足指定的条件时,才执行http请求。
http请求要放到“if逻辑控制器”里面,被if逻辑控制器控制才有效。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dxq3TXbK-1632792995470)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194719.png)]
设置if控制器的判断条件:
设置变量val的值为 abc,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YmgNVlXh-1632792995472)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194738.png)]
设置判断条件:"${val}"==“abc”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRFEtxNG-1632792995473)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194802.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lnYucdkP-1632792995476)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194822.png)]
8.3 foreach逻辑控制器
业务逻辑:
ForEach控制器一般与用户自定义变量/JDBC结果变量一起使用,可以认为他就是一种遍历型循环,该节点下的脚本内容会根据结和使用的变量被执行一次或者多次
控制器选项介绍:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1HUmWZem-1632792995477)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194828.png)]
**Input variable prefix:**变量前缀,比如上面的test_1,这里就输入test
**Start index for loop:**开始循环字段,不包含输入的数值,按照上图从1开始,则这里输入0,为空和非数字都从0开始
**End index for loop:**结束循环字段,包含输入的数值,这里输入范围内的数值则遍历到该值后停止,如果非范围内的值,则一直遍历至结束
**Output variable name:**输出变量名称,将前面拼凑起来的变量的值复给该变量,以便后续使用
JDBC请求获取的值格式也是 XX_1、XX_2、XX_3,因此也同样适用于类似上述的用户自定义变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CU93kgkd-1632792995478)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194834.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-quNb9SEZ-1632792995481)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194840.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5J6kb0BC-1632792995483)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194952.png)]
最后的结果:取到值放入请求路径中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqsWIxXN-1632792995484)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194848.png)]
8.4 逻辑控制器
当http请求设置为逻辑控制器时,就会按设定的次数循环执行http请求。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lQzLiMAX-1632792995486)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194857.png)]
执行结果:执行3次http请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RDChz9Cd-1632792995488)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927194904.png)]
9.关联
9.1 xpath提取器
–xpath提取器(网页数据): 后置处理器 ----针对网页数据 勾选Use Tidy 引用名称:val Xpath query: //title 提取方式 匹配数字:1 缺省值:黑马
设置界面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0oWleLnW-1632792995489)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195352.png)]
使用获取到的值:
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCUUUp7R-1632792995493)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195407.png)]
9.2 正则表达式提取器
–正则表达式提取器(非网页数据): -------json数据 前后端接口数据 引 用 名称: val 正则表达式:“dep_name”:"(.*?)" ?:贪婪终止模式 模 板:
1
1
1 匹 配 数字:1 缺 省 值:黑马(没匹配上就选黑马)
接口返回:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tKe3NMt-1632792995495)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195413.png)]
设置界面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o5Fvv6yY-1632792995496)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195419.png)]
使用获取的结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QrcmZ4Of-1632792995498)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195424.png)]
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tt06gtH1-1632792995499)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195429.png)]
10.跨越线程组传值
跨线程组关联:
? 全局:跨线程组 线程组直接相互传值
? 局部:同一个线程组
设置全局变量 setProperty:
? BeamShell取样器: KaTeX parse error: Expected '}', got 'EOF' at end of input: …etProperty(out,{val},)}_
获取全局变量 property: ${_property(out,)}
1.正则表达式提取器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcV6QNZV-1632792995501)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195436.png)]
2.setProperty函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PnMngD7i-1632792995504)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195441.png)]
3.BeanShell取样器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMsszvAf-1632792995506)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195447.png)]
4.property函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSquSSEY-1632792995508)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195453.png)]
5.使用全局变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N4puZwAO-1632792995509)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195459.png)]
6.运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zizhXFzt-1632792995510)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195505.png)]
11.生成测试报告
11.1、生成测试报告
利用已有.jtl文件生成报告,如果已经有经过测试生成的.jtl文件,可以利用该文件直接生成HTML可视化测试报告。
进入jmeter的bin目录下,输入如下命令:
jmeter -g test.jtl -o /path
# -g:后跟test.jtl文件所在的路径
# -o:后跟生成的HTML文件存放的路径
jmeter -g …\run_result\业务办理_建聪.jtl -o …\report\ywbl_jiancong
? (.jtl文件路径) (测试报告存放目录)
如果是在Windows环境命令行运行,必须指定生成的HTML文件存放文件夹,否则会报错;
如果是linux环境,如指定路径下不存在该文件夹,会生成对应的文件夹存放报告文件!
执行完毕后,用浏览器打开生成的文件目录下的index文件,效果展示如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i7IicWtb-1632792995512)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195526.png)]
11.2、图表信息详解
测试报告分为两部分,Dashboard和Charts,下面分开解析。
1、Dashboard(概览仪表盘)
①、Test and Report informations
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XlpAQWM5-1632792995513)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195550.png)]
②、APDEX (应用性能指标)
关于APDEX的相关信息,请参考这里:应用性能指标;英文原文,参考这里:Apdex-Wikipedia
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-efqaoYzb-1632792995515)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195555.png)]
③、Requests Summary
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ybi8fhgW-1632792995517)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195606.png)]
2、Charts(详细信息图表)
PS:由于详细信息图表有点多,这里我挑几个性能测试过程中比较关键的图表解析!
Over Time
①、Response Times Over Time(脚本运行期间的响应时间变化趋势图)
说明:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jyt8jsDL-1632792995519)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195613.png)]
②、 Response Time Percentiles Over Time (successful responses)
说明:脚本运行期间成功的请求响应时间百分比分布图,可以理解为聚合报告里面不同%的数据,图形化展示的结果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RBig46XQ-1632792995520)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195621.png)]
③、Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图)
说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opHRju4P-1632792995521)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195626.png)]
④、 Latencies Over Time(脚本运行期间的响应延时变化趋势图)
说明:在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BiMNwbYD-1632792995523)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195638.png)]
Throughput
①、Transactions Per Second(每秒事务数)
说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gqaSu3R3-1632792995525)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195646.png)]
Response Times
①、 Response Time Percentiles(响应时间百分比分布曲线图)
说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SrsqxwLu-1632792995526)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195652.png)]
②、Time Vs Threads(平均响应时间和线程数的对应变化曲线)
说明:可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。
[外链图片转存中…(img-RBig46XQ-1632792995520)]
③、Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图)
说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。
[外链图片转存中…(img-opHRju4P-1632792995521)]
④、 Latencies Over Time(脚本运行期间的响应延时变化趋势图)
说明:在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素。
[外链图片转存中…(img-BiMNwbYD-1632792995523)]
Throughput
①、Transactions Per Second(每秒事务数)
说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。
[外链图片转存中…(img-gqaSu3R3-1632792995525)]
Response Times
①、 Response Time Percentiles(响应时间百分比分布曲线图)
说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。
[外链图片转存中…(img-SrsqxwLu-1632792995526)]
②、Time Vs Threads(平均响应时间和线程数的对应变化曲线)
说明:可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1IaSn2o6-1632792995527)(https://raw.githubusercontent.com/tangguanlin2006/image/main/img/20210927195657.png)]
|