JMeter必知必会系列 —— JMeter基础

news2025/2/13 12:46:02

1.1 JMeter概述

JMeter简介

Apache JMeter™是Apache组织开发的一款开源软件,是典型的纯Java开发的应用程序,可以在不同平台比如Windows、Linux或macOS系统上进行软件测试。JMeter主要用于应用程序的功能负载测试以度量软件的性能,也可以用于其他类型的测试比如接口测试,API测试等。

JMeter版本

JMeter不同的版本,功能有所差异,对JDK的支持也不尽相同。新的JMeter版本有些功能会逐渐改进完善,还会引入新的功能组件,性能也会逐步提升。因此在JMeter官方网站的最佳实践中,建议用户无论如何最好使用最新的JMeter版本。

这里以最新的JMeter5.2.1版本进行介绍。

JMeter GUI 界面

当JMeter以GUI模式运行时,窗口主要由三部分构成:

1.功能区

上方菜单栏,下方工具栏。菜单栏展示了JMeter提供的功能菜单,而工具栏中的图标是常见功能的快捷方式。

2.视图区

以树状结构呈现JMeter元素,其中“Test Plane”是树的根节点,每一个节点就是一个JMeter元素。

在此区域可以添加、删除节点,或者通过拖曳调整节点的位置。

3.内容区

在视图区选中一个JMeter元素节点,相应地在内容区则会显示该元素的内容。可以对其内容进行查看、设置等操作。

 

1.2 JMeter测试组成

JMeter构建测试类似于组装一台智能电子设备,比如智能手机。智能手机由CPU、内存、输入输出设备(比如USB接口,摄像头等)、屏幕、电池等一系列物理部件构成的。

JMeter测试也是由一系列JMeter元素组合起来构成的,JMeter提供了构建测试的所有元素,你可以随心所欲的将这些元素组装起来完成你想要的测试。

JMeter元素有以下四种类型的测试元素:

1)测试计划

2)线程组

3)组件

包含配置元件、定时器、前置处理器、后置处理器、断言与监听器

4)控制器

包括取样器、逻辑控制器与测试片断

1.2.1 测试计划

测试计划描述了JMeter测试在运行时执行的一系列步骤。完整的测试计划由一个或多个线程组、逻辑控制器、取样器、监听器、定时器、断言和配置元件组成。

测试计划元素是JMeter测试树的根节点,是唯一的,所有的测试元素节点都位于根节点之下。

1.2.2 线程组

在手工测试中,测试用例由测试工程师手动执行完成。而性能测试与自动化测试的测试用例由选择的测试工具代替测试工程师来执行。JMeter执行测试的任务是由线程组来完成的。打个比方,线程组相当于手工测试中执行测试用例的测试工程师。

线程组控制JMeter用来执行测试的线程数。要模拟多少个用户(称之为虚拟用户)来执行测试,可以通过修改线程组的线程数来实现。比如将线程数设置为10,表示模拟10个用户执行测试。

所有的取样器与逻辑控制器都必须位于线程组下,从这个角度理解,JMeter测试计划真正开始于线程组。其他元素,例如监听器,可以直接放在测试计划下,在这种情况下,它们将作用于所有的线程组。

一个测试计划下可以有多个线程组,在测试计划中可以配置以并行或顺序方式启动多个线程组。

1.2.3 组件

JMeter中最基本的元素为元件,元件是JMeter测试中的最小功能单元,每个元件都具有某种特定的功能。比如“Response Assertion”断言元件,可以实现对请求或响应是否预期的验证。

JMeter提供了很多元件,为了方便用户使用与管理众多的元件,JMeter将多个功能类似或逻辑上相关的元件归为一类,称为组件。JMeter包含六大组件: 配置元件、定时器、前置处理器、后置处理器、断言、监听器。

  • 配置元件

配置元件与取样器密切相关。类似于配置文件之于软件,软件配置文件可以影响软件的行为;同样通过配置元件可以新增或修改请求内容,实现对请求的自定义。

  • 定时器

默认情况下,JMeter线程按顺序执行取样器而不会出现暂停的情况。通过将定时器添加到线程组来指定延迟。如果不加延迟,JMeter可能会在很短的时间内发送过多的请求到服务器,导致服务器负载过重而崩溃。

定时器可以使在其作用范围内的每个取样器执行前延迟一段时间。

  • 前置处理器

前置处理器在进行取样器请求之前执行一些操作。

如果前置处理器附加到取样器元素,那么它将在该取样器元素运行之前执行。

前置处理器经常用于在运行之前修改取样器请求的设置,或更新未从响应文本中提取的变量。

  • 后置处理器

后置处理器在取样器请求完成后执行一些操作。

如果后置处理器附加到取样器元素,那么它将在该取样器元素运行之后执行。

后处理器通常用于处理响应数据,从中提取需要的值。

  • 断言

断言用于验证取样器请求或对应的响应是否返回了期望的结果。

JMeter测试是否执行成功,结果是否预期,都可以通过添加断言来进行验证。

  • 监听器

监听器可以在JMeter执行测试的过程中搜集相关的数据,并将这些数据不同的形式,比如树、图、报告等呈现出来。

比如,“图形结果”监听器绘制响应时间的曲线图,“查看结果树”监听器显示取样器请求和响应的详细信息等。

此外,有些监听器还可以将搜集到的测试数据保存到文件中以供以后使用。

1.2.4 控制器

  • 取样器

取样器用于构建发给服务器处理的请求,即告诉JMeter怎样将请求发送到服务器。例如,若要发送HTTP请求,可以选择“HTTP Request”取样器,同时还可以通过添加配置元件来自定义请求。

  • 逻辑控制器

取样器请求默认是以先后顺序依次执行的,某些情况下满足了复杂的业务/场景需求。通过逻辑控制器可以控制JMeter发送请求的逻辑,来实现复杂的业务/场景。比如有选择性执行某些请求,循环执行请求,整体执行逻辑上有依赖关系的请求,交替执行请求等。

1.3 JMeter执行顺序与作用域

1.3.1 执行顺序

类似于运算符或操作符的优先级,当JMeter测试中包含多个不同的元素时,哪些元素先执行,哪些元素后执行,并不是严格按照它们出现的先后顺序依次有序执行的,而是会遵循一定的内部规则,我们称之为JMeter元素的执行顺序,一般情况下JMeter元素按照如下顺序依次执行:

0. 配置元件
1. 前置处理器
2. 定时器
3. 取样器
4. 后置处理器
5. 断言
6. 监听器

一个简单的例子:

其中①为取样器、②为配置元件、③为定时器、④为监听器、⑤为前置处理器、⑥为后置处理器、⑦为断言。

执行顺序为:②-->⑤-->③-->①-->⑥-->⑦-->④

1.3.2 作用域

JMeter测试树中的元素可以分为两类:层次结构与顺序结构

层次结构的元素包括:配置元件、定时器、前置处理器、后置处理器、断言与监听器;

顺序结构的元素包括:取样器和逻辑控制器。

一般而言顺序结构的元素没有作用域的概念,而作用域只针对具有层次结构的组件。

JMeter作用域就是组件对取样器有效的区域,在这个区域内组件是起作用的。

层次结构的元素作用域

具有层次结构的元素的作用域规则如下:

(1)若其父节点为取样器,则其只对该取样器起作用;
(2)若其父节点为逻辑控制器,则会影响逻辑控制器下的所有取样器;
(3)若其父节点为线程组,则会影响线程组下的所有取样器;
(4)若其父节点为测试计划,则会影响测试计划下的所有取样器。

一些例子:

1.父节点为取样器

-Test Plan
	-Thread Group
		HTTP Request1
			Response Assertion
			View Results Treel
		HTTP Request2
			View Results Tree2

解析:

“Response Assertion”断言的父节点为“HTTP Request1”取样器,则只会对“HTTP Request1”进行断言,不会断言“HTTP Request2”取样器。

2.父节点为逻辑控制器

-Test Plan
	-Thread Group
		-Loop Controller
			Response Assertion
			-HTTP Request1
				View Results Treel
			-HTTP Request2
				View Results Tree2

解析:

“Response Assertion”断言的父节点为“Loop Controller”逻辑控制器,“Response Assertion”会对逻辑控制下的“HTTP Request1”取样器和“HTTP Request2”取样器进行断言。

3.父节点为线程组

-Test Plan
	-Thread Group
		Response Assertion
		-HTTP Request1
			View Results Treel
		-Loop Controller
			-HTTP Request2
				View Results Tree2
			-HTTP Request3
				View Results Tree3

解析:

“Response Assertion”断言的父节点为“Thread Group”线程组,“Response Assertion”会对线程组下的“HTTP Request1”取样器、“HTTP Request2”取样器与“HTTP Request3”取样器进行断言。

4.父节点为测试计划

-Test Plan
	Response Assertion
	-Thread Groupl
		-HTTP Request1
			View Results Treel
		-Loop Controller
			-HTTP Request2
				View Results Tree2
	-Thread Group2
		-HTTP Request3
			View Results Tree3

解析:

“Response Assertion”断言的父节点为“Test Plan”测试计划,“Response Assertion”会对测试计划下的“HTTP Request1”取样器、“HTTP Request2”取样器与“HTTP Request3”进行断言。

1.4 一个简单的JMeter测试计划

以访问百度为例(www.baidu.com)。

按照如下步骤完成测试计划:
1.在Test Plan节点上右键,选择Add->Treads(users)->Thread Group
  在Tread Properties项下,设置“Number of Threads(users)”为1
2.在Thread Group节点上右键,选择Add->Sampler->HTTP Request
  在Web Server项下,设置“Server Name or IP”为www.baidu.com
  在HTTP Request项下,设置“Path”为/
3.在HTTP Request节点上右键,选择Add->Assertions->Response Assertion
  在Field to Test项下,选择“Response Code”
  在“Patterns to Test”项下,点击“Add”,输入200
4.继续在HTTP Request节点上右键,选择Add->Listener->View Results Tree
5.点击“Save”快捷按钮,然后输入测试计划文件名,保存
6.点击“Start”快捷按钮执行测试,可以在“View Results Tree”中查看测试结果。

JMeter测试查看结果树显示如下:


如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流qq群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目使用tensorflow2会出错,下载并使用tensorflow1

背景:使用pycharm安装总显示安装失败,使用pip安装也不行,只能使用conda配置虚拟环境手动安装 1、下载安装anaconda 官网下载,双击安装。用anaconda就是想使用虚拟环境,万一没弄好直接删了重新搞就行。 2、创建虚拟环境…

Kendo UI R2 2023 crack

Kendo UI R2 2023 crack 新组件:角度PDFViewer 直接在Angular应用程序中查看PDF文件,无需第三方软件或附加组件。 凭借直观的分页机制、强大的搜索功能和灵活的缩放选项,用户可以轻松导航和浏览PDF内容。 角度16支架 Angular 16引入了一系列改…

AWS CodeWhisperer(代码辅助工具)使用体验

工具 1.vscode 2.AWS Toolkit插件 CodeWhisperer插件的功能 1.自动优化代码:CodeWhisperer插件可以通过代码分析来自动优化代码,从而提高代码的质量和效率。 2.智能代码提示:CodeWhisperer插件可以根据代码上下文提供智能代码提示&#x…

C语言之数组详解(1)(更新前面数组博客的不足)

目录 一、一维数组 1.一维数组的创建和初始化 (1).数组的创建 (2).数组的初始化 2.一维数组的使用 3.一维数组在内存中的存储 二、二维数组 1.二维数组的创建和初始化 (1).二维数组的创建 (2).二维数组的初始化 2.二维数组的使用 3.二维数组在内存中的存储 三、数组作为函数参…

尚硅谷大数据技术Spark教程-笔记08【SparkSQL(介绍、特点、数据模型、核心编程、案例实操、总结)】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【SparkCore(概述、快速上手、运行环境、运行架构)】尚硅谷大数据技术Spark教程…

14.一天搞定主流小程序按分类列表显示文章1

小程序按分类列表显示文章1 (视频对应无13) 本教程均在第一节中项目启动下操作 小程序按分类列表显示文章1 (视频对应无13)前言一、新增分类界面:![在这里插入图片描述](https://img-blog.csdnimg.cn/1dffd20abc8f47d3961dee59426f3a8f.png)二.新增接口apiflex布局组件数据表绑…

Cocos creator常驻节点使用方式addPersistRootNode

最近在做小游戏的时候,遇到了进入result场景时候的传值问题。 场景加载传值,通过常驻节点实现。 在game_scene中添加常驻节点GameResultData空节点。 创建脚本GameResultData.ts,声明要传递的值的内容。 const {ccclass, property} cc._de…

vscode配置格式化

安装好插件 : Vetur 打开vscode --> 文件 --> 首选项 --> 设置 --> 扩展 --> vetur 点击: 写入以下代码 // { // "files.autoSave": "onFocusChange", // "explorer.confirmDelete": false, // "editor.…

南大通用GBase 8c 多模多态分布式数据库系列一之基本介绍、核心技术、架构演进

前言 随着传统的关系型SQL数据库(Oracle,MySQL,PostgreSQL等)难以满足日益增长的高数据量、快速数据处理要求、高数据库安全及强容灾能力要求(RPO,RTO)等挑战,尽管NoSQL非关系型数据…

【超详细练气篇】STL之string类---常见接口函数(1)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

企业级ChatGPT开发入门实战直播21课第2课 运行日志及代码解析

企业级ChatGPT开发入门实战直播21课第2课 运行日志及代码解析 Gavin老师在企业级ChatGPT开发入门实战直播21课第2课中,讲解的ChatGPT应用案例开发架构图: ChatGPT案例运行日志 2023-06-11 16:06:57 DEBUG Calling on_part_begin with no data 2023-06-11

完型填空技巧

完形中分值最高的是逻辑关系题,逻辑关系分为两种,一种是选项就是逻辑关系的,例: Given the advantages of electronic money, you might thinkthat we would move quickly to the cashless society in which allpayments are made electronic…

常用设计模式(三)

接着之前的思路今天来介绍一下常用的设计模式有哪些 单例模式(Singleton Pattern) 又称为单体模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。也就是说,第二次使用同一个类创建新对象的时候&#xff0c…

机器学习-8 集成学习

集成学习 集成学习理论集成学习概述集成学习理论 随机森林算法原理Scikit-learn中的随机森林分类器函数原型sklearn.ensemble.RandomForestClassifier(n_estimators10,criteriongini,max_depthNone,min_samples_split2,min_samples_leaf1,min_weight_fraction_leaf0.0,max_feat…

pytorch深度学习框架—torch.nn模块(一)

pytorch深度学习框架—torch.nn模块 torch.nn模块中包括了pytorch中已经准备好的层,方便使用者调用构建的网络。包括了卷积层,池化层,激活函数层,循环层,全连接层。 卷积层 pytorch中针对使用场景的不同,有…

多云时代来临,容器存储谁敢横刀立马?

多云时代来临,容器存储谁敢横刀立马? 原创2023-06-12 21:54大数据在线 2011年,Gartner提出了数字化转型的理念;十多年来,企业数字化经历了移动化、云化等几次变革潮流,如今走入一个新的时代:多…

Docker 生成 golang 程序镜像

一. 准备golang程序 package mainimport "github.com/gin-gonic/gin"func main() {go func() {r1 : gin.Default()r1.GET("/sayHello/", func(c *gin.Context) {c.JSON(200, "hello1")})r1.Run(":8992")}()r : gin.Default()r.GET(&q…

详解Linux内核安全技术——磁盘加密技术概述和eCryptfs

一、概述 加密是最常见的数据安全保护技术,在数据生命周期各阶段均有应用。从应用场景和技术实现上,按加密对象、用户是否感知、加密算法等维度,有多种分类及对应方案,并在主流操作系统如Windows、Linux、Android中有广泛应用。 …

AWS CodeWhisperer 简单介绍

一、何为AWS CodeWhisperer Amazon CodeWhisperer能够理解以自然语言(英语)编写的注释,并能实时生成多条代码建议, 以此提高开发人员生产力。 二、主要功能 Amazon CodeWhisperer 的主要功能,包括代码生成、引用追踪…

12.异常检测

12.1 异常检测的应用 异常检测最常见的应用是欺诈检测; 如果你有很多用户,每个用户都在从事不同的的活动,你可以对不同的用户活动计算特征变量,然后可以建立一个模型来表示用户表现出各种行为的可能性,用来表示用户行…