接口测试 Jmeter

文章目录

  • 1.Jmeter概述
    • 1.1 Jmeter简介
    • 1.2 Jmeter作用
    • 1.3 Jmeter优点
    • 1.4 Jmeter缺点
  • 2.Jmeter环境搭建
    • 2.1 Jmeter下载
    • 2.2 JDK安装
    • 2.3 Jmeter安装
  • 3.Jmeter线程组
    • 3.1 什么是线程组
    • 3.2 Http请求
    • 3.3 Http信息头管理器
    • 3.4 查看结果树
    • 3.5 Http Cookie管理器
    • 3.6 聚合报告
    • 3.7 Http请求默认值
    • 3.8 调度器(计时器)
    • 3.9 setUp线程组
    • 3.10 tearDown线程组
  • 4.Jmeter函数
    • 4.1 计数器函数
    • 4.2 随机数函数
    • 4.3 时间函数
  • 5.Jmeter参数化
    • 5.1用户定义的变量
    • 5.2 CSV Data Set Config
  • 6.Jmeter高并发
    • 5.1 线程组设置
    • 5.2 同步定时器设置
  • 7.Jmeter断言
    • 7.1 什么是断言
    • 7.2 响应断言
    • 7.3 大小断言
    • 7.4 断言持续时间
  • 8.循环控制器
    • 8.1 仅一次控制器
    • 8.2 if逻辑控制器
    • 8.3 foreach逻辑控制器
    • 8.4 逻辑控制器
  • 9.关联
    • 9.1 xpath提取器
    • 9.2 正则表达式提取器
  • 10.跨越线程组传值
  • 11.生成测试报告
    • 11.1、生成测试报告
    • 11.2、图表信息详解

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.第一步进入官网如下图

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

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

2.2 JDK安装

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

2.3 Jmeter安装

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

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


3)配置classpath变量

​ path: %JMETER_HOME%\lib

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

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

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

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

3.Jmeter线程组

3.1 什么是线程组

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

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

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

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

接口分组:

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

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

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

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

3.2 Http请求

一个接口请求

关于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信息头管理器添加好之后,需要填入信息头的名称以及对应的值,如下

3.4 查看结果树

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

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

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

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

3.5 Http Cookie管理器

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

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

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

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

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

3.6 聚合报告

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

3.8 调度器(计时器)

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

3.9 setUp线程组

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

3.10 tearDown线程组

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

4.Jmeter函数

4.1 计数器函数

1.设置计数器函数

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

2.使用计数器函数

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

4.2 随机数函数

1.设置随机数函数

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

2.使用随机数函数

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

4.3 时间函数

1.设置时间函数

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

2.使用时间函数

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

5.Jmeter参数化

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

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

5.1用户定义的变量

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

设置自定义变量如图:

获取自定义变量:

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

5.2 CSV Data Set Config

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

A. Jmeter 参数CSV Data Set Config

B.CSV文件

C.body传值

6.Jmeter高并发

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

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

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

5.1 线程组设置

5.2 同步定时器设置

7.Jmeter断言

7.1 什么是断言

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

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

Restful风格:

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

​ 响应状态码: 相等 200

​ 响应文本:包含 相等

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

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

7.2 响应断言

响应文本:

响应代码:

7.3 大小断言

判断字符大小的长度

7.4 断言持续时间

判断响应时间

8.循环控制器

8.1 仅一次控制器

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

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

8.2 if逻辑控制器

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

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

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

设置变量val的值为 abc,

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

8.3 foreach逻辑控制器

业务逻辑:

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

控制器选项介绍:

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

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

8.4 逻辑控制器

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

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

9.关联

9.1 xpath提取器

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

设置界面:

使用获取到的值:

运行结果:

9.2 正则表达式提取器

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

接口返回:

设置界面:

使用获取的结果:

运行结果:

10.跨越线程组传值

跨线程组关联:

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

​ 局部:同一个线程组

设置全局变量 setProperty:

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

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

1.正则表达式提取器

2.setProperty函数

3.BeanShell取样器

4.property函数

5.使用全局变量

6.运行结果:

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

11.2、图表信息详解

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

1、Dashboard(概览仪表盘)

①、Test and Report informations

②、APDEX (应用性能指标)

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

③、Requests Summary

2、Charts(详细信息图表)

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

Over Time

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

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

②、 Response Time Percentiles Over Time (successful responses)

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

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

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

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

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

Throughput

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

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

Response Times

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

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

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

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

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)]

Jmeter学习笔记相关推荐

  1. jmeter 学习笔记

    jmeter 学习笔记 察看结果树:JSON Path Tester.RegExp Tester(正则表达式).XPathTester.JSON JMESPath Tester.Document 断言 ...

  2. JMeter学习笔记1-安装环境

    前面已经写完了JavaScript学习笔记系列,已经对JavaScript的基本语法完全掌握和知道如何用JavaScript编写第一个Selenium自动化测试脚本.我觉得已经达到了,了解和会Java ...

  3. Jmeter学习笔记三_操作数据库(MySQL)

    一.到入JDBC的jar包 因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql 将jar包放在Jmeter安装目录/lib/mysql-connector-ja ...

  4. JMeter学习笔记--JMeter常用测试元件

    JMeter测试计划有一个被称为"函数测试模式"的选项,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据.如果你在测试监听器中选择一个文件,这个数据将被写入文件.如 ...

  5. jmeter学习笔记4 数据库插入

    jmeter支持数据库的插入测试,因为暂时还没有这一块的性能测试,这里先截个图以后备用: 总体: 每一块的配置: 转载于:https://www.cnblogs.com/maochiyu/p/6800 ...

  6. JMeter学习笔记--JMeter监听器

    监听器(Listeners)是一种展示采样结果的测试元件,采样结果可以通过树.表格.图片加以展示,或者简单地写入某个结果文件之中. 注:不同的监听器通过不同的方式展示服务器响应信息,但它们都将同样的原 ...

  7. jmeter学习笔记(十三)debug调试工具

    一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...

  8. 【转】jmeter学习笔记——JDBC测试计划-连接Mysql

    我的环境:MySQL:mysql-essential-5.1.51-win32 jdbc驱动:我已经上传到csdn上一个:http://download.csdn.net/source/3451945 ...

  9. jmeter学习笔记(八-1)

    Jmeter中有较多需要参数化测试的地方: 1.从一个用户登录的接口获取登录后的token值,取值后用于后续接口调用 2.获取用户浏览后的cookies信息,需要用到HTTP Cookie 管理器来为 ...

  10. jmeter学习笔记(一)

    Jmeter介绍 Jmeter  是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试). jmeter安装 官方网站:http://jmeter.apa ...

最新文章

  1. Python入门100题 | 第045题
  2. 【干货】张小龙演讲PPT:APP产品经理必须要懂的30条原则
  3. 第一章:前端视角——js运行环境之node.js基础入门
  4. 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...
  5. 8_less中的内置函数
  6. 酷炫的SVG 动态图标
  7. 爱奇艺首届“黑客马拉松“落幕 极客变身“大娱乐家”
  8. 重新打包版Inno Setup 5.4.3
  9. OpenGL基础2:OpenGL简介
  10. 如何做好IT人的职业规划
  11. 移远EC20 4G模块拨号相关
  12. 大智慧加密指标源码恢复,指标破解工具
  13. 万条票房数据看2019春节档各地影院表现
  14. 渥太华大学计算机学硕录取过程,西农计算机拟录取名单公布,初试第一被刷,289分倒数第一上岸...
  15. 本地测试机构怎么查?第三方测试公司排名情况
  16. git pull时提示错误:warning: ignoring broken ref refs/remotes/origin/HEAD的解决办法
  17. SQL Developer连接时报错:ORA-12528
  18. Android11 DHCP初识
  19. 提交代码到git仓库
  20. 2M口、电口、以太网电口、以太网光口的区别

热门文章

  1. CSDN博文大赛赛况简报
  2. 单调函数必有反函数,但为何有反函数的不一定是单调函数
  3. 再生医学突破 中国科学家诱导出人类全能干细胞
  4. 如何解决 “无法成功完成操作,因为文件包含病毒或潜在垃圾软件
  5. 【gdoi2018 day1】小学生图论题
  6. 公文轻松搞定!简单实用的红头专色文印技巧
  7. 阿里云Intel Xeon(Ice Lake) Platinum 8369B服务器CPU性能评测
  8. iOS和Android的差别
  9. Windows效率神器
  10. 独家专访蚂蚁金服旗下蚂蚁佐罗CEO Toby Rush,揭秘识别同卵多胞胎背后的技术力量