Jmeter学习笔记

                接口测试 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

2.选择进行下载,下载下来为一个压缩包,解压即可。

img

img

3.我下载的是jmeter5.4版本,对应jdk1.8。然后就进行解压。

2.2 JDK安装

JDK1.7 意思即可(安装省略)

2.3 Jmeter安装

1.) 电脑桌面----》“计算机”图标----》鼠标右键选择“属性”----》点击高级系统设置----》高级—》环境变量页面

20210927131055

2) 开始配置环境变量了。在系统变量框,点击“新建”,建立一个变量:JMETER_HOME,值为你解压的jmeter安装路径。我的安装路径是在D盘,这个路径根据自己实际安装路径进行填写。然后点击确定保存即可


img

3)配置classpath变量

​ path: %JMETER_HOME%\lib

4)基本配置完成,然后验证一下是否配置正确,是否可用。

首先进到你的jmeter安装路径,找到bin文件夹,点击进去,找到jmeter.bat,鼠标右键用管理员方式运行,或者直接双击打开,此时会弹出2个界面:1.个是命令窗口,使用jmeter的时候此命令窗口不能关,你缩小到电脑任务栏即可。2.还有一个界面是jmeter工作页面,你可以在里面进行相关的操作.具体如图

image-20210921164209903

5)确认安装是否成功,双击jmeter.bat或者以管理员方式运行,页面如下:

20210927193920

6)jmeter的工作区域如下:,我们每次使用jmeter的首先打开方式就是进入bin文件下双击这个jmeter.bat,如果觉得麻烦,可以鼠标右键快捷方式发送电脑桌面,就会方便很多。

20210927193930

3.Jmeter线程组

3.1 什么是线程组

进程:正在运作中的程序—QQ、微信、迅雷

线程:进程中的执行单元 一个进程包含多个线程 —下载 播放

​ 每发起一个http请求,系统对应一个线程

线程组:按照线程性质对线程进行分组 --单个下载 批量下载 – 接口分组

接口分组:

接口分组 http请求------对应----线程 线程组

顺序执行:按照线程的启动顺序挨个执行 ----线程组内顺序执行

并发执行:多个线程同时执行 特定:执行结束顺序和线程的启动顺序不一定一致 —线程组间并发执行

image-20210921180753300

​ 线程数5:–模拟用户数 5个用户
时间(秒数)10:指定时间内启动所有线数 10 10秒钟之内启动3个用户(区间内) 2个小时内 陆陆续续有300个用户
​ 循环次数3:单个用户访问次数 3 每个用户执行3次

3.2 Http请求

一个接口请求

image-20210921182457456

关于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

3.4 查看结果树

20210927194006

如上,测试结束后,如果我们的请求成功发送给服务器,那么结果树里面的模拟请求会显示为绿色,可以通过取样器结果里面的响应状态码信息来判断。

也可以点击请求模块,查看我们发送的请求

20210927194014

里面有我们发送的请求的方法、协议、地址以及实体主体数据,以及数据类型,大小,发送时间,客户端版本等信息

响应数据:里面包含服务器返回给我们的响应数据实体,如下图

20210927194026

3.5 Http Cookie管理器

web网站的请求大部分都有cookies,jmeter的HTTP Cookie管理器可以很好的管理cookies。

直接加一个HTTP Cookie管理器放到请求的最前面,就可以自动管理cookies了。

比如:当登录成功了,服务端会返回2个token,

添加后会自动保存你每次请求的cookies,

后续的请求都会带上前面的cookies,就跟你正常访问浏览器是一样的。

20210927194036

20210927194050

3.6 聚合报告

20210927194058

对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以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 请求默认值】来实现了。

20210927194119

3.8 调度器(计时器)

20210927194124

​ 一般勾选永远
​ 循环次数:设置为永远
​ 持续时间: 5秒
​ 启动延迟时间:3秒 3秒后开始启动,持续访问5秒钟
​ x秒后访问服务器,持续y秒

3.9 setUp线程组

最先执行的线程组
用途:资源加载,数据初始化

20210927194135

3.10 tearDown线程组

最后执行的线程组
用途:程序正式关闭之前,将数据保存进内存

20210927194143

4.Jmeter函数

4.1 计数器函数

1.设置计数器函数

选择counter函数,输入TRUE,每个用户有自己的计数器,点击生成:

20210927194150

2.使用计数器函数

复制生成的函数字符串:${__counter(TRUE,)},放到需要用的地方:

20210927194158

4.2 随机数函数

1.设置随机数函数

选择Random函数,输入最小值和最大值,点击生成:

20210927194205

2.使用随机数函数

复制生成的函数字符串:${__Random(1,99,)},放到需要用的地方:

20210927194213

4.3 时间函数

1.设置时间函数

选择time函数,输入时间格式yyyy-mm-dd HH:MM:SS,点击生成:

20210927194224

2.使用时间函数

复制生成的函数字符串:${__time(yyyy-mm-dd HH:MM:SS,)},放到需要用的地方:

20210927194233

5.Jmeter参数化

参数化是指动态的设置并获取数据

参数化就是可以程序代替人工设置并获取数据:安全 高效

5.1用户定义的变量

jmeter的自定义变量可以让我们随机选取变量,从而达到在性能测试过程中可以随机选取变量的目的。

设置自定义变量如图:

20210927194241

获取自定义变量:

​ 引用已定义的变量:${变量名},比如: ${user1}

20210927194248

5.2 CSV Data Set Config

批量读取数据, 从文件中读取变量值,用于变量的参数化

A. Jmeter 参数CSV Data Set Config

20210927194257

20210927194304

B.CSV文件

20210927194310

C.body传值

20210927194316

6.Jmeter高并发

高并发场景:模拟100个用户同时访问服务器资源,要求平均响应时间在30ms内,且错误率为0

线程组:线程数:100
http请求:
同步定时器:
模拟用户组的数量:100 一个批次请求的人数 100人分1批
超时时间以毫秒为单位:10

​ 聚合报告:对结果汇总分析

5.1 线程组设置

20210927194324

5.2 同步定时器设置

20210927194333

7.Jmeter断言

7.1 什么是断言

在 jmeter 中断言用于验证服务器返回的数据是否满足我们的要求

让程序代替人工判断响应结果是否符合预期。

Restful风格:

20210927195929

1.响应断言 = 断言状态码和响应文本

​ 响应状态码: 相等 200

​ 响应文本:包含 相等

2.大小断言 = 判断响应内容的字节长度

3.断言持续时间 = 判断响应时间

7.2 响应断言

响应文本:

20210927194342

响应代码:

20210927194347

7.3 大小断言

判断字符大小的长度

20210927194352

7.4 断言持续时间

判断响应时间

20210927194610

8.循环控制器

8.1 仅一次控制器

​ 设置了“仅一次控制器”的接口请求,一个用户只会执行一次。

http请求要放到“仅一次控制器”里面,被控制器控制才有效。

20210927194636

8.2 if逻辑控制器

if逻辑控制器,当满足指定的条件时,才执行http请求。

http请求要放到“if逻辑控制器”里面,被if逻辑控制器控制才有效。

20210927194719

设置if控制器的判断条件:

设置变量val的值为 abc,

20210927194738

设置判断条件:"${val}"==“abc”

20210927194802

20210927194822

8.3 foreach逻辑控制器

业务逻辑:

ForEach控制器一般与用户自定义变量/JDBC结果变量一起使用,可以认为他就是一种遍历型循环,该节点下的脚本内容会根据结和使用的变量被执行一次或者多次

控制器选项介绍:

20210927194828

**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,因此也同样适用于类似上述的用户自定义变量

20210927194834

20210927194840

20210927194952

最后的结果:取到值放入请求路径中

20210927194848

8.4 逻辑控制器

当http请求设置为逻辑控制器时,就会按设定的次数循环执行http请求。

20210927194857

执行结果:执行3次http请求

20210927194904

9.关联

9.1 xpath提取器

–xpath提取器(网页数据): 后置处理器 ----针对网页数据
勾选Use Tidy
引用名称:val
Xpath query: //title 提取方式
匹配数字:1
缺省值:黑马

设置界面:

image-20210925212544066

使用获取到的值:

20210927195359

运行结果:

20210927195407

9.2 正则表达式提取器

–正则表达式提取器(非网页数据): -------json数据 前后端接口数据
引 用 名称: val
正则表达式:“dep_name”:"(.*?)" ?:贪婪终止模式
模 板: 1 1 1
匹 配 数字:1
缺 省 值:黑马(没匹配上就选黑马)

接口返回:

20210927195413

设置界面:

20210927195419

使用获取的结果:

image-20210925214230920

运行结果:

image-20210925214327520

10.跨越线程组传值

跨线程组关联:

​ 全局:跨线程组 线程组直接相互传值

​ 局部:同一个线程组

设置全局变量 setProperty:

​ BeamShell取样器: KaTeX parse error: Expected '}', got 'EOF' at end of input: …etProperty(out,{val},)}_

获取全局变量 property:
${_property(out,)}

1.正则表达式提取器

image-20210925225302138

2.setProperty函数

20210927195441

3.BeanShell取样器

image-20210925225455263

4.property函数

image-20210925225558456

5.使用全局变量

image-20210925225736285

6.运行结果:

20210927195505

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文件,效果展示如下:

20210927195526

11.2、图表信息详解

测试报告分为两部分,Dashboard和Charts,下面分开解析。

1、Dashboard(概览仪表盘)

①、Test and Report informations

img

②、APDEX (应用性能指标)

关于APDEX的相关信息,请参考这里:应用性能指标;英文原文,参考这里:Apdex-Wikipedia

img

③、Requests Summary

20210927195606

2、Charts(详细信息图表)

PS:由于详细信息图表有点多,这里我挑几个性能测试过程中比较关键的图表解析!

Over Time

①、Response Times Over Time(脚本运行期间的响应时间变化趋势图)

说明:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围。

20210927195613

②、 Response Time Percentiles Over Time (successful responses)

说明:脚本运行期间成功的请求响应时间百分比分布图,可以理解为聚合报告里面不同%的数据,图形化展示的结果。

20210927195621

③、Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图)

说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。

20210927195626

④、 Latencies Over Time(脚本运行期间的响应延时变化趋势图)

说明:在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素。

20210927195638

Throughput

①、Transactions Per Second(每秒事务数)

说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。

20210927195646

Response Times

①、 Response Time Percentiles(响应时间百分比分布曲线图)

说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。

20210927195652

②、Time Vs Threads(平均响应时间和线程数的对应变化曲线)

说明:可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。

20210927195657

ver Time(脚本运行期间的吞吐量变化趋势图)

说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。

[外链图片转存中…(img-LI2nFikQ-1634378080245)]

④、 Latencies Over Time(脚本运行期间的响应延时变化趋势图)

说明:在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素。

[外链图片转存中…(img-Pyx97E15-1634378080249)]

Throughput

①、Transactions Per Second(每秒事务数)

说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。

[外链图片转存中…(img-I1vuK5dt-1634378080250)]

Response Times

①、 Response Time Percentiles(响应时间百分比分布曲线图)

说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。

[外链图片转存中…(img-bktdtEQS-1634378080252)]

②、Time Vs Threads(平均响应时间和线程数的对应变化曲线)

说明:可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。

[外链图片转存中…(img-exFB6byT-1634378080252)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值