IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 测试必备技能之JMeter详解 -> 正文阅读

[开发测试]测试必备技能之JMeter详解

Jmeter环境搭建及元件讲解

目录

Jmeter环境搭建及元件讲解

1.1 Jmeter概述

1.2 Jmeter环境搭建

1.3 Jmeter工具设置

1.4 Jmeter原件讲解

1.5 八类可被执行的软件

1.6 Jmeter元件作用域

1.7 Jmeter元件的执行顺序


1.1 Jmeter概述

1.1-1 什么是Jmeter

Apache JMeter是 Apache 组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP服务器等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言

?

1.1.2 JMeter的作用和特点

? ? ?作用:

  1. 能够对HTTP应用和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC);
  2. 完全的可移植性和100% 纯java;
  3. 完全Swing和轻量组件支持(预编译的JAR使用 javax.swing.*)包;
  4. 完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样;
  5. 精心的GUI设计允许快速操作和更精确的计时;
  6. 缓存和离线分析/回放测试结果。

特点:

  1. JMeter是完全免费的,并提供了源码可供自定义开发, 轻量级安装简单;
  2. 不依赖于界面,测试脚本不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面中input对象来编写测试用例;
  3. 测试脚本维护方便,可以将测试脚本复制,并且可以将某一部分单独保存;
  4. 可以跳过页面限制,向后台程序添加非法数据,这样可以测试后台程序的健壮性;
  5. 利用badboy录制测试脚本,可以快速的形成测试脚本;
  6. 使用参数化以及JMeter提供的函数功能,可以快速完成测试数据的添加修改等;
  7. 高扩展性,JMeter 支持用户自定义测试脚本,同样还提供了各种插件;
  8. 平台无关,可以轻易在?windows、linux、mac 上运行;
  9. 多线程框架,通过线程组,能够轻易的设置不同测试的并发用户。

1.1.3 Jmeter的工作原理

? ? ?在客户端通过多线程或多进程模拟虚拟用户访问,对服务器端施加压力,然后在过程中监控和收集性能数据

1.1.4 性能测试工具应该具备的特质

  1. 工具本身占用系统资源少,可扩展性好,可用性强。
  2. 可以模拟真实业务事务操作,并发时可以真正产生业务压力(核心)。
  3. 对压力测试结果能很好的进行性能分析。
  4. 测试脚本的复用性强。

1.1.5 Jmeter与LR的区别

1.2 Jmeter环境搭建

1.2-1

  1. Jdk:官网地址:Oracle | Integrated Cloud Applications and Platform Services
  2. Jmeter的二进制包(无需下载,了解即可):官网下载地址如下:Apache JMeter - Download Apache JMeter

?说明:开源软件一般都有两个版本的包,二进制版本和源码版。

Source 是源代码版,你需要自己编译成可执行软件,我们用到不到,故无需下载。?
Binaries是可执行版,直接下载解压就可以拿来用的,他已经给你编译好的版本。

Jmeter插件:Install :: JMeter-Plugins.org,下载完成插件后解压:找到JMeterPlugins-Extras.jar,把JMeterPlugins-Extras.jar放到apache-jmeter-2.12\lib\ext目录下。

?1.2-2 环境搭建

  1. 安装jdk:jdk的安装比较简单,重点是配置环境变量。具体配置过程如下:我的电脑右键—>属性—>高级系统设置—>环境变量,如下:

? ??

?配置完环境变量后,需要在cmd中进行验证jdk是否配置成功,打开cmd,输入以下指令,如果返回以下信息说明jdk配置成功:

?

2. 启动Jmeter:Jmeter无需做任何安装配置,配置好jdk之后,Jmeter即可启动,打开Jmeter的二进制包里的jmeter.bat即可启动,如下:

需要注意的是:Jmeter在启动之前,会加载一个文件,等待加载完成无误后Jmeter即可启动。此加载文件不可以关闭

?

1.3 Jmeter工具设置

?1.3-1 中文设置

修改配置文件,保存后重启Jmeter后即可。

1.3-2 界面字体大小设置

1.3-3 Jmeter插件工具

使用Jmeter的实际过程中,需要使用到一些插件比如json的插件,还有做websocket接口测试的时候需要下载websocket的插件… 下载地址:https://jmeter-plugins.org/地址中,点击 Plugins Manager,下载该插件,该插件名称为:jmeter-plugins-manager-x.xx.jar。下载后,把该文件放到apache-jmeter-5.1\lib\ext目录下,如下图:

?重启JMeter后,可以再GUI上看到插件的图标。点击插件图标可以进行插件的安装和更新,如下:

?

注意:以下三个插件不要安装,可能会影响JMeter的使用:

1.4 Jmeter原件讲解

? ? ?JMeter工具和其他性能工具在原理上完全一致,工具包含四个部分:

  1. 负载发生器(发送请求):用于产生负载,通常以多线程或是多进程的方式模拟用户行为。
  2. 用户运行器(请求规则):通常是一个脚本运行引擎 ,用户运行器附加在线程或进程上,根据脚本要求模拟指定的用户行为。
  3. 资源生成器(资源数据):用于生成测试过程中服务器、负载机的资源数据。
  4. 报表生成器(数据报表):根据测试中获得的数据生成报表,提供可视化的数据显示方式。

?1.4-1 测试计划原件(Test Plan)

? ? ? ? ??Test Plan用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就是说本地性能测试的所有内容是基于一个计划的。它是一个根节点,Jmeter脚本执行执行请求的所有组件都在Test Plan下面。

1.4-2 线程(用户)(Threads(user))

? ? ? ?Threads(User)就是Thread Group线程组,是一组执行相同测试案例操作的用户(线程),简而言之就是JMeter的脚本,等同于LoadRunner的脚本概念。

线程组的创建和其下面的3个不同线程组的作用和概念如下:

虽然有三个添加线程组的选项,名字不一样,创建之后,其界面是完全一样的。如下:

  1. Tread Group:这个就是我们通常添加运行的线程。通俗的讲一个线程组可以看做一个虚拟用户组线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。常用的参数设置和说明如下:

? ? ? ? 重点说明下Ramp-Up Period参数的设置:此参数单位是秒。它指定了启动所有线程所花费的时间,比如,当前的设定表示“在2秒内启动10个线程,每个线程的时间间隔时间是0.2秒(2/10)”。如果你需要Jmeter立即启动所有线程(同时并发),将此设定为0即可。

? ? ? ?2. setUp Thread?Group:一种特殊类型的ThreadGroup,可用于执行预测试操作,类似于Loadrunner的init。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。它的参数配置说明同上。

? ? ? ?3. tearDown Thread Group:一种特殊类型的ThreadGroup,可用于执行测试后动作,类似于lr的end。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。它的参数配置说明同上?

1.4-3 配置原件(Config Element)

? ? ? ?点Test Plan右键—>Add—>Config Element中是配置元件(ConfigElement)用于提供静态数据配置支持。用于配置JMeter的各种参数。 配置元件仅对其所在的测试树分支有效。

? ? ? ??以下是常用的配置元件的具体讲解:

? ? ? ? ? 1. CSV Data Set Config:用于从文件中读取行,并将它们拆分为变量。它比__CSVRead()__StringFromFile()函数更容易使用。它非常适合处理大量变量,并且对于使用“随机”和惟一值进行测试也很有用。以下是文件参数释义及具体说明:

参数说明是否必填

Filename

要读取的文件的名称,可支持相对路径,也支持绝对路径

File Encoding

用于读取文件(如果不是平台默认值)的编码。

Variable Names

变量名称的列表。名称必须用分隔符分隔。它们可以用双引号引用。JMeter支持CSV头行:如果变量name字段为空,则读取文件的第一行并将其解释为列名列表。

Ignore?first line

忽略CSV文件的第一行,它只在变量名不为空时使用,如果变量名为空,第一行必须包含头。

Allow quoted data

CSV文件是否允许引用值?如果启用,则可以将值括在" --双引号-允许值包含分隔符。

Recycle on EOF

是否应该在到达EOF时从头重新(循环)读取文件?(默认是true)

Stop thread on EOF

如果回收是假的,线程是否应该在EOF上停止?(默认是false)

Sharing mode

All threads—文件在所有线程之间共享。

Current thread group—对于出现元素的每个线程组,每个文件都会打开一次。

Current thread—为每个线程分别打开每个文件。

Identifier—所有共享相同标识符的线程共享相同的文件。例如,如果您有4个线程组,您可以为两个或两个以上的组使用一个公共id在它们之间共享文件。或者您可以使用线程号在不同线程组中的相同线程号之间共享文件。

? ? ? ?2. HTTP Header Manager:主要用来添加HTTP请求头。JMeter现在支持多个头管理器。合并标题项以形成采样器的列表。如果要合并的条目与现有的标头名称匹配,它将替换以前的条目,除非条目值为空,在这种情况下,任何现有条目都将被删除。这允许你设置默认的标头集,并对特定的采样器应用调整。HTTP信息头管理器在Jmeter的使用过程中起着很重要的作用,通常我们在通过Jmeter向服务器发送HTTP请求(get或者post)的时候,往往后端需要一些验证信息,比如说web服务器需要带过去cookie给服务器进行验证,一般就是放在请求头(Header)中,因为对于此类请求,在Jmeter中就可以通过HTTP信息头管理器,在添加http请求之前,添加一个HTTP信息头管理器,发请求头中的数据通过键值对的形式放到HTTP信息头管理器中。在往后端请求的时候就可以模拟web携带Header信息了。填写信息头的时候,只填写User-Agent或者cookie就可以请求成功了。

请求头的参数数据说明:

?>>? Accept:告诉服务器,客户机支持的数据类型

?>>? Accept - Encoding:告诉服务器,客户机支持的数据的压缩格式

?>>? Cache - Control:缓存控制,服务器通过控制浏览器要不要缓存数据

?>>? Connection:处理完这次请求,是断开连接还是保持连接

?>>? Cookie:客户机通过这个可以向服务器带数据

?>>? Host:访问主机名

?>>? Upgrade - Insecure - Requests:告诉服务器,浏览器可以处理https协议

?>>? User - Agent:告诉服务器,客户机的软件环境

? ? ? ? 3.? HTTP cookie Manager:Cookie管理器元素有两个功能,首先,它像web浏览器一样存储和发送cookie。如果您有一个HTTP请求,并且响应包含一个cookie,cookie管理器将自动存储该cookie,并将其用于将来对该特定web站点的所有请求。每个JMeter线程都有自己的“cookie存储区域”。因此,如果正在测试一个使用cookie来存储会话信息的web站点,那么每个JMeter线程都有自己的会话。注意,这些Cookie不会出现在Cookie管理器显示中,但是可以使用查看结果树监听器看到它们。第二,你可以手动向cookie管理器添加cookie。但是,如果这样做,cookie将由所有JMeter线程共享。默认情况下,使用空值(null)的cookie会被忽略。

? ? ? ? ? ?注意:如果采样器的作用域中有多个Cookie管理器,那么目前无法指定使用哪个Cookie管理器。另外,存储在一个cookie管理器中的cookie对任何其他管理器都不可用,所以要小心使用多个cookie管理器

? ? ? ? ?4. JDBC Connection Configuration:从提供的JDBC连接设置中创建数据库连接(JDBC Request?Sampler)。连接可以在线程间可选地合用。否则,每个线程都有自己的连接。JDBC采样器使用连接配置名称来选择适当的连接。? ? ? ? ???注意:不同的数据库和JDBC drivers需要不同的JDBC settings。Database URL和JDBC Driver class由JDBC implementation提供者定义。

? ? ? 5.??User?Defined?Variables:用户定义的变量,会在测试的初始阶段执行(无论它处于测试树的那个位置)

1.4-4 监听器(Listeners)

? ? ? ? ?监听器(Listeners)是一种展示采样结果的测试元件,采样结果可以通过树、表格、图片加以展示,或者简单地写入某个结果文件之中。注:不同的监听器通过不同的方式展示服务器响应信息,但它们都将同样的原始数据记录到某个输出文件中。在我们调试jmeter项目时,需要用到这些结果查看器,在正式进行压测时,需要将这些结果器都禁用了,不然会很容易将jmeter 运行机器的io耗尽导致机器假死

?1.4-5 定时器(Timer)

? ? ? ? ?在默认情况下,JMeter发送每个请求之间是没有延时的,如果采用默认方式,如果线程数足够大,瞬间就会将服务器压死。再则在实际的业务过程中,请求之间是有一定时间的停顿的所以在请求之间设置合理的延时是必须的,也是更接近用户真实业务情况。在JMeter中,定时器组件提供了系列不同类型的延时控制。合理使用定时器组件,能让你的性能测试更接近真实,更能挖掘出系统的瓶颈和评估系统的性能指标。定时器是在它作用域内的所有取样器执行之前执行生效。定时器最主要的作用就是用来控制测试场景的吞吐量大小,类似于LoadRunner里面的TPS。? ? ? ? ?这里,需要重点说明下Synchronizing Timer(同步定时器),简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,每到输入用户名和密码登录时,所有的虚拟用户都相互之间等一等,然后,一起访问。

  1. Timeout in milliseconds: 如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。也就是说,如果线程数不足集合点中设置的数,就会一直等待,需要手动stop。
  2. Timeout in milliseconds如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。也就是说如果线程数不满足集合点中设置的值,则在timeout中设置的时间后继续执行不足的那些线程。
  3. Timeout in milliseconds默认为0。所以当timeout设置为0,但是线程数又不满足集合点中设置的值时,就会一直等待,不执行请求,需要手动stop。
  4. 同步定时器是在每一个采集器之前执行的,不管定时器的位置是在采集器之前还是之后,都是在采集器之前执行。
  5. 如果一个线程中存在多个采集器,同步定时器和这些采集器在同一级(同一节点下),则同时作用于这些采集器。
  6. 如果需要一个定时器单独对应某一个采集器,可以在采集器的子节点中创建定时器。

1.4-6 前置处理器(Pre Pocessors)

? ? ? ?前置处理器,用于对于采集器进行处理,且是在sampler启动之前,此处和后置处理器是有所区别的。

?1.4-7 后置处理器(Post Pocessors)

? ? ? 后置处理器,用于对于采集器进行处理,和前置处理器相反,是在sampler启动之后。

?1.4-8 断言(Assertions)

? ? ? ? 断言用于验证被测试对象是否返回了预期的结果.在Jmeter中断言一般针对response,但也可以对request进行断言?

  1. 响应断言:响应断言允许用户通过添加模式字符串来验证服务器返回的响应数据。
  2. JSON断言:如果服务器响应返回的是JSON格式的内容,这时最佳的断言验证类型就是使用jp@gc - JSON Path Assertion。
  3. Xpath断言:如果服务器响应返回的是XML格式的内容,这时最佳的断言验证类型就是使用XPath Assertion。

?响应数据的设置如下:

测试字段:针对响应数据不同部分进行匹配

  1. 响应文本:响应服务器返回的文本内容,http协议排除header部分
  2. 响应代码:匹配响应代码,比如http请求中‘200’代表成功
  3. 响应信息:匹配响应信息,处理成功返回‘成功’或者“ok”字样
  4. Response Header:匹配响应头中的信息

模式匹配规则:

  1. 包括:响应内容包括需要匹配的内容就算成功
  2. 匹配:响应内容要完全匹配匹配内容,不区分大小写
  3. equals:完全相等,区分大小写
  4. substring:响应内容包括匹配内容即为成功。

1.5 八类可被执行的软件

>>配置元件:用来提供对静态数据配置的支持。例CSV Data Set config可以将本地数据文件形成数据池(Date Pool)。

>>定时器(具有LR的Think_time功能):用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。

>>前置处理器:用于在实际的请求发出之前对即将发出的请求进行特殊处理。例当url中有SessionID一类的信息时,可以通过该处理器填充发出请求实际的SessionID。

>>后置处理器(具有类似于LR中的关联功能):用于对Sampler发出请求后得到的服务器响应数据进行处理,一般用于提取响应中的特定数据。

>>断言(具有类似于LR中的检查点功能):用于检查测试中得到的响应数据是否符合预期。断言一般用来设置检查点,验证测试过程中的数据交互是否与预期一致。

>>监听器(具有类似于LR中的日志功能):用来对测试结果数据进行处理和可视化显示的一系列原件。图形结果、查看结果树、聚合报告等都是比较常用的原件。

>>取样器--Sampler:是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。每一种不同类型的Sampler可以根据设置的参数向服务器发送不同的请求。

>>逻辑控制器:逻辑控制器的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序。分为两类元件:一类用于控制Test Plan中Sampler节点发送请求的逻辑顺序控制器,常用的有 如果(If)控制器、Swirch Controller、Runtime Controller、循环控制器等。另一类用来对Test Plan中的脚本进行分组,方便Jmeter统计执行结果以及脚本运行时的控制。如事务控制器、吞吐量控制器等。

1.6 Jmeter元件作用域

? ? ? ?元件收集其作用范围的每一个sampler元件的信息并呈现。在jmeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的,作用域的原则是:

  1. 取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。
  2. 逻辑控制器(Logic Controller)元件只对其子节点中的取样器 和 逻辑控制器作用。
  3. 除取样器?和逻辑控制器 元件外,其他6类元件,如果是某个sampler的子节点,则该元件公对其父子节点起作用。
  4. 除取样器和逻辑控制器元件外的其他6类元件,如果其父节点不是sampler ,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。

示例一:

取样器(HTTP请求1?、FTP请求2?、TCP取样器3)逻辑控制器(循环控制器)?监听器(图形结果1、聚合报告2)

>> HTTP请求1、FTP请求2、TCP取样器3,元件没有作用域的概念

>>循环控制器 元件的作用域是其子点FTP请求2、TCP取样器3

>>图形结果1 元件的作用域是FTP请求2、TCP取样器3

>>聚合报告2 元件的作用域是HTTP请求1、FTP请求2、TCP取样器3

示例二:

这个例子稍微复杂一些,包含的元件较多。先来分分类。取样器(HTTP请求、FTP请求、TCP取样器、JDBC?Request)逻辑控制器(循环控制器、随即控制器)定时器(固定定时器、Uniform ?Random?Timer)断言(响应断言、XML断言)监听器(图形结果、聚合报告)

>>HTTP请求、FTP请求、TCP取样器、JDBC Request元件没有作用域名概念

>>循环控制器的作用域为FTP请求、TCP取样器和随机控制器

>>固定定时器作用于HTTP请求

>>Uniform Random Timer作用于所有取样器

>>响应断言作用于JDBC Request

>>XML断言作用于FTP请求、TCP取样和JDBC Request

>>图形结果作用于FTP请求、TCP取样和JDBC?Request,聚合报告作用于作用于所有取样器

?总结:记住一句话,从各个元件的成次结构(父子关系)判断每个元件的作用域

1.7 Jmeter元件的执行顺序

  1. 配置元件(Config Elements): 准备工作
  2. 前置处理器(Pro-processors):开启工作前的预处理
  3. 定时器(Timers)?:对开启工作的时间进行设置
  4. 取样器(Sampler)?:开启工作,跑腿儿的
  5. 后置处理器(Post-processors)?:开启工作后的处理
  6. 断言(Assertions)?:对数据结果做判断的
  7. 监听器(Listeners)?:工作收尾的监察员

?注意:

  1. 前置处理器、后置处理器和断言等元件功能对取样器作用。因此,如果在它们的作用域内没有任何取样器,则不会被执行;
  2. 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。
  3. 一个断言在测试树中是分等级的。如果它的父元件是请求,它就被应用于那个请求。如果它的父元件是控制器,它就影响所有那个控制器下的所有请求

新人作者,希望大家多多支持,后续还会写关于Jmeter的文章。感谢观看!


  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:36:19  更:2021-09-29 10:36:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:30:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码