2025年Jmeter总结及使用【图文案例讲解】

Jmeter总结及使用【图文案例讲解】目录 一 Jmeter 介绍 1 Jmeter 介绍 2 Jmeter 使用范围 3 Jmeter 优缺点 4 Jmeter 目录结构 5 Jmetre 对比 Loadrunner 二 Jmeter 基本使用 amp 原件 1 Jmeter 入门脚本 1 步骤 2 jmeter 测试计划要素

大家好,我是讯享网,很高兴认识大家。

目录

一、Jmeter介绍

1、Jmeter介绍

2、Jmeter使用范围

3、Jmeter优缺点

4、Jmeter目录结构

5、Jmetre 对比 Loadrunner

二、Jmeter基本使用&原件

1、Jmeter入门脚本

(1)步骤

(2)jmeter测试计划要素

2、测试计划元件

(1)元件与组件的区别

(2)线程组介绍(不属于元件)

(3)取样器(sample)

(4)逻辑控制器(logic controller)

(5)配置元件(config element)

(6)定时器(timer)

(7)前置处理器(per processors)

(8) 后置处理器(post processors)

(9)断言(assertions)

(10) 监听器

3、元件的作用域

(1)原则

(2)执行顺序

4、Jmeter第一个案例

5、Jmeter运行原理

(1)在 jmeter 中是以线程的方式运行的

(2)jmeter通过线程组来驱动多个线程运行测试脚本,对被测服务器发起负载,每个负载机上都可以运行多个线程组

6、Jmeter配置文件修改

(1)修改中文乱码问题

(2)修改默认语言

三、Jmeter核心知识

1、发送http请求

(1)相关配置元件

(2)http请求配置

(3)练习HTTP请求

2、Jmeter参数化

(1)参数化的概念

(2)CSV Data Set Config

理解

适用范围

实现步骤

设置CSV详解

(3)用户参数

(4)用户定义的变量

(5)总结参数化

3、Jmeter断言

(1)理解

(2)常用分类

(3)响应断言

(4)Json 断言

(5)断言持续时间

4、Jmeter关联

(1)Jmeter常用的关联方法

(2)正则表达式提取器

(3)xpath提取器

(4)JSON提取器

(5)Jmeter的属性-全局变量

5、逻辑控制器

(1)如果(if)控制器

(2)循环控制器

(3)ForEach 控制器

6、定时器

(1)同步定时器

(2)常数吞吐量定时器

(3)固定定时器


一、Jmeter介绍

1、Jmeter介绍

jmeter:是Apche公司使用Java平台开发的一款测试工具

2、Jmeter使用范围

  • 接口测试(http接口)
  • 性能测试
  • 压力测试(优势)
  • 数据库测试
  • Java程序测试 

3、Jmeter优缺点

优点:

  • 开源免费
  • 支持多协议 (http,tcp...)
  • 轻量级
  • 功能强大

缺点:无法验证JS程序,也无法验证页面UI,所以必须要和 selenium 配合来完成web2.0应用的测试

4、Jmeter目录结构

(1)bin目录下是可执行文件

(2)log日志在bin/jmeter.log中查看

(3)jmeter.properties是修改默认属性的文件,比如,language = zh_cn---可将其修改为中文配置

(4)docs下是jmeter的java dosc

(5)printable_docs的usermanual子目录下是jmeter用户手册,其中component_reference.html是最常用的核心元件帮助手册


讯享网

5、Jmetre 对比 Loadrunner

对比项  Jmetre  Loadrunner
安装
 
简单,下载解压即用 复杂,安装包很大对硬件有一定要求,安装时长大于1小时
录制/回放模式 支持 支持
支持的测试协议  较少,但支持用户自行扩展 较多,不支持用户自行扩展
分布式大规模压力测试 支持 支持
IP欺骗  不支持 支持
图形报表 支持(较弱,但可扩展)  支持(很强,图形报表一直是商业工具的强项)
测试的逻辑控制  支持 支持
服务器硬件资源监控 支持 支持
功能测试 支持 不支持

二、Jmeter基本使用&原件

1、Jmeter入门脚本

(1)步骤
  • 添加测试计划 (当打开jmeter默认有一个测试计划)
  • 添加线程组 (右击测试计划-->添加-->线程-->线程组)
  • 添加http请求 (右击线程组-->取样器-->http请求)
  • 配置http请求
  • 添加查看结果树(右击线程组-->监听器-->查看结果树)#查看结果树不做任何配置

(2)jmeter测试计划要素
  • 测试计划(项目名称)
  • 测试计划中至少有一个线程组
  • 线程组中至少有一个取样器
  • 测试计划中必须有监听器

2、测试计划元件

(1)元件与组件的区别
  • 元件:多个类似功能组件的容器
  • 组件:容器中实现单独的某个功能
(2)线程组介绍(不属于元件)

(3)取样器(sample)

取样器是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单位

jmeter支持不同取样器,常用的为HTTP请求(即支持不同协议的请求)

(4)逻辑控制器(logic controller)

包括两类元件:

  • 一类用于控制testplan中sampler节点发送请求的逻辑顺序的控制器,常用的有 if控制器,Switchcontroller、runtimecontroller、循环控制器等
  • 另一类是用来组织可控制sampler节点的,如事务控制器、吞吐量控制器
(5)配置元件(config element)

用来提供对静态数据的支持

(6)定时器(timer)

在操作之前设置等待时间(例如取样器与取样器之间,设置一个等待时间)

(7)前置处理器(per processors)

用于实际请求之前对即将发出的请求进行特殊处理

(8) 后置处理器(post processors)

用于对sampler发出请求后得到的服务器响应进行处理

(9)断言(assertions)

用于检查测试中得到的响应数据等是否符合预期,assertions一般用来设置检查点,用以保证性能测试过程中的数据交互与预期是否一致

(10) 监听器

3、元件的作用域

靠测试计划中元件树形结构的父子关系来确认

(1)原则
  • 取样器:以取样器为核心,取样器没有作用域
  • 逻辑控制器:只对子节点的取样器和逻辑控制器起作用
  • 其他元件:
  • 如果父节点是取样器,则只对其父节点起作用
  • 如果父节点不是取样器,则该作用域是其父节点下的其他所有后代节点(子节点,子节点的子节点)
(2)执行顺序

  • 同一作用域下不同元件执行顺序:配置元件 -- 前置处理器 -- 定时器 -- 取样器 -- 后置处理器 -- 断言 -- 监听器
  • 同一作用域下相同元件的执行顺序:从上到下依次执行

(3)执行顺序案例

从上图可看出,执行顺序为:定时器1 -- 请求1 -- 定时器1 -- 定时器2 -- 请求2 -- 定时器1 -- 定时器3 -- 请求3

解析:定时器1 的父节点不是取样器,所以对父节点下的所有后代节点都起作用

4、Jmeter第一个案例

需求:使用 jmeter 访问百度接口,并查看请求和响应信息

步骤:

  • 添加线程组
  • 添加 HTTP 请求 并 配置
  • 添加查看结果树

5、Jmeter运行原理

(1)在 jmeter 中是以线程的方式运行的
(2)jmeter通过线程组来驱动多个线程运行测试脚本,对被测服务器发起负载,每个负载机上都可以运行多个线程组

jmeter运行场景:

  • GUI模式(界面模式)(主要用来编写和调试jmeter测试脚本)
  • 命令行模式(对负载机的资源消耗会更小)(用来实现高并发和压力测试)

在资源有限的情况下,都是用命令行模式来执行jmeter脚本的,而页面模式是用来前期创建脚本或者调试脚本的

负载机:执行jmeter脚本的电脑

6、Jmeter配置文件修改

bin --> jmeter.properties -->右击打开

(1)修改中文乱码问题

sampleresult.default.encoding =utf-8

(2)修改默认语言


 

修改保存完后,重启 jmeter 就生效了

三、Jmeter核心知识

1、发送http请求

作用:向服务器发送http/https请求

(1)相关配置元件

① HTTP管理器:http请求 与 配置元件配套使用

② http消息头管理器(http请求头):主要使用Content-Type参数(指请求参数的类型)

在jmeter中,发送HTTP的post请求时,需要添加http消息头管理器

③ http请求默认值:将同一线程组下所有http请求的协议和服务器域名统一管理

如果http请求中自己填写了http协议和服务器域名,当发送请求时使用本身的协议和域名

(2)http请求配置


http协议默认端口号:80
httpd默认端口号:443
 

(3)练习HTTP请求

案例:编写 jmeter 脚本,访问百度 【URL=http://www.baidu.com/S  参数:wd=test(form表单) 】

写法1:GET请求,路径传递参数


写法2:GET请求,参数列表传递参数


写法3:POST请求,请求体数据传输参数


写法4:POST请求,参数列表传输参数

2、Jmeter参数化

(1)参数化的概念


理解:根据需求动态获取数据并进行赋值的过程
定义:jmeter中参数化的变量用 ${变量名} 表示
参数化常用方式:

  • CSV数据控件 (CSV Data Set Config)
  • 用户定义的变量(User Defined Variables)
  • 用户参数(User Variables)
(2)CSV Data Set Config
理解

从外部 csv 文件读取数据出来作为变量

适用范围

需要大量测试数据

实现步骤
  • 创建测试计划
  • 创建线程组
  • 添加 CSV Data Set Config 组件并配置
  • 添加http请求并配置
  • 添加查看结果树

将表格xlsx格式转换为CSV --> CSV编码转为UTF-8(notepad)--> CSV数据文件设置 --> http请求设置

配置http请求(引用定义的变量名,格式:${变量名}

设置CSV详解

参考链接:Jmeter-CSV 数据文件设置-CSDN博客

(3)用户参数

位置:前置处理器 --> 用户参数

使用方式:

针对哪个http请求使用就在哪个http请求下添加(http --> 添加 --> 前置处理器 --> 用户参数)

配置用户参数:

  • 添加变量 --> 添加变量名称
  • 添加用户 --> 添加用户名称(一个用户就是一个测试数据)

使用用户参数:

  • 在http请求中引用变量(${变量名})
  • 在线程组中设置线程数-线程数的值和用户数一致(即两用户就需要两线程)


(4)用户定义的变量

适用于:定义全局变量

位置:

测试计划页 -> 配置元件 -> 用户定义的变量

  • 添加线程组
  • 添加用户定义的变量
  • 添加http请求,引用变量${变量名}
  • 添加查看结果树

(5)总结参数化
  • csv数据文化配置:适用于大量的测试数据时的使用
  • 用户参数:适用于少量测试数据
  • 用户定义的变量:定义全局变量

3、Jmeter断言

(1)理解

让程序自动判断预期结果和实际结果是否一致

(2)常用分类
  • 响应断言
  • json断言
  • 持续时间断言
(3)响应断言

位置:HTTP请求右键 --> 添加 --> 断言 --> 响应断言

参数:

案例1:
        请求:https://www.baidu.com
        检查:响应数据中是否包含“百度一下,你就知道”

 案例2:校验多个测试数据

(4)Json 断言

参数:

 案例展示可参考链接:

Jmeter-json断言-CSDN博客

(5)断言持续时间

参数:

  • 响应时间(毫秒):http请求允许的最大响应时间(1s = 1000ms)。

案例:

请求:https://www.jd.com/

检查:让程序检查响应时间是否大于500毫秒

4、Jmeter关联

当请求之间有依赖关系,比如一个请求的入参是另一个请求的返回数据,这时候就需要用到关联

(1)Jmeter常用的关联方法
  • 正则表达式 提取法(针对任意格式)
  • Xpath 提取法(html格式)
  • JSON 提取法
(2)正则表达式提取器

位置:HTTP请求右键 --> 添加 --> 后置处理器 --> 正则表达式提取器

http请求配置中,用 ${变量名} 引用 正则表达式提取器的引用名称

案例:获取传智播客首页的title,并作为参数传递

  • 请求:http://www.itcast.cn/,获取网页的title值
  • 请求:http://www.baidu.com/,把获取到的title作为请求参数

(3)xpath提取器

作用:根据HTML格式的响应结果数据进行提取

参数:

 案例:获取传智播客首页的title,并作为参数传递

  • 请求:http://www.itcast.cn/,获取网页的title值
  • 请求:http://www.baidu.com/,把获取到的title作为请求参数

(4)JSON提取器

作用:针对JSON格式的响应结果数据进行提取

参数:

案例:进入网页后登录,页面提供了账户和密码,搜索虾,提取搜索后的name和detail

具体操作可参考文章(文章中的json提取器):Jmeter-json断言-CSDN博客

(5)Jmeter的属性-全局变量

提问:当有关联关系的两个请求在不同线程组中,该如何进行消息传递呢?(定义全局变量)

 jmeter属性的配置函数

  • setProperty函数:将值保存成 jmeter属性
  • Property函数:在其他线程组中读取 jmeter 属性
  • setProperty函数 执行(保存jmeter属性):通过 BeanShell 取样器
  • Property函数 执行(读取属性):在其他线程组中使用 property函数

案例:

线程组1:请求获取购物网页的接口(慕慕生鲜),获取返回结果中的商品名称“即时大虾”

线程组2:在百度中搜索线程1中获取到的商品名称,将其作为请求参数(即食大虾_百度搜索)

步骤:

  • 添加线程组1
  • 添加http请求-生鲜
  • 添加JSON提取器
  • 添加BeanShell取样器(将JSON提取的值保存成jmeter属性)
  • 添加线程组2
  • 添加http请求-百度(读取jmeter属性)
  • 添加查看结果树(全局)

线程组1提取到的“即时大虾”可参考链接:Jmeter-json断言-CSDN博客,下面的图为线程组2如何调用线程组1提取到的名称

配置setproperty函数(工具--函数助手对话框--生成代码)

线程组一-HTTP请求右键 -> 添加 -> 后置处理器 -> BeanShell后置处理程序,将拷贝过来的字符串直接粘贴

配置property函数(工具--函数助手对话框--生成代码)

线程组二右键 -> HTTP请求,路径中输入刚拷贝过来的值

运行后查看结果树,可以看到线程组二搜索了线程组一中获取的名称

5、逻辑控制器

(1)如果(if)控制器

详解见链接:JMeter-如果(if)控制器-CSDN博客

(2)循环控制器

详解见链接:Jmeter-循环控制器-CSDN博客

(3)ForEach 控制器

详解见链接:Jmeter-ForEach控制器-CSDN博客

6、定时器

(1)同步定时器

理解:可以在某一逻辑点模拟创建最大负载量进行测试;Synchronizing Timer 的技术原理是通过在某一点阻塞线程,直到 X 个线程被阻塞,然后同时释放

参数说明:

  • 模拟用户组的数量:设置多少用户进行同步操作,设置为0表示执行线程组的线程数,设置为3只会执行三个线程数(假设同步线程组数设置为5)4,5线程执行到这一步会停止
  • 超时时间:以第一个到达同步定时器的用户开始,如果在设置的时间内所有用户都达到了,就立即释放后续操作,如果在设置的时间内还没达到,则目前到达集合点的用户先进行释放做后续操作。 设置为0则一直等待,(以第一个到达为准,到多少走多少),如果设置为3,线程设置为永远循环,每凑够三个就会执行释放

注:【模拟用户组的数量】设置的值不能大于它所在线程组中设置的线程数

示例:

  • 测试计划右键 <<< 添加 <<< 定时器 <<< 同步定时器,模拟用户组的数量设置为5
  • 测试计划右键 <<< 添加 <<< 定时器 <<< 固定定时器,线程延迟设置为1000
  • 测试计划右键 <<< 添加 <<< 线程(用户)<<< 线程组,线程数设置为5,勾选永远,勾选调度器,持续时间设置为60
  • 线程组右键 <<< 添加 <<< 取样器 <<< 调试取样器
  • 线程组右键 <<< 添加 <<< 监听器 <<< 查看结果树
  • 线程组右键 <<< 添加 <<< 监听器 <<< 汇总报告
  • 点击启动,点开查看结果树,观察Text下的取样器
  • 点开汇总报告查看

结果显示:

每一次,同时执行五个调试取样器;点击调试取样器,查看取样器结果中的时间,可以发现,每一秒,有五个调试取样器;点开汇总报告可以看到,样本是五个五个执行;吞吐量 TPS 大概为 5
 

(2)常数吞吐量定时器

详解见链接:Jmeter-常数吞吐量定时器-CSDN博客

(3)固定定时器

理解:可以对每一个线程延迟固定时间;对比 BeanShell 中的 Thread.slepp(n) 功能

参数说明:

示例:

  • 测试计划右键 -> 添加 -> 定时器 -> 固定定时器(Constant Timer),线程延迟设置为1000
  • 测试计划右键 -> 添加 -> 线程(用户)-> 线程组,设置永久循环,持续60秒
  • 线程组右键 -> 添加 -> 取样器 -> 调试取样器(Debug Sampler)
  • 线程组右键 -> 添加 -> 监听器 -> 查看结果树
  • 线程组右键 -> 添加 -> 监听器 -> 聚合报告
  • 点击启动,点开查看结果树,观察Text下的取样器
  • 点开聚合报告查看

结果显示:

小讯
上一篇 2025-02-08 20:46
下一篇 2025-03-01 14:05

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/44132.html