Jmeter基础知识
一、Jmeter 简介
-
Apache Jmeter 是 Apache组织开发的基于Java开发一款开源的压力测试工具。体积小,功能全,使用方便,不像Loadrunner那样体积大,是一个比较轻量级的测试工具,使用起来非常的简单,深受测试人员的喜爱,但是它的测试报告没有Loadrunner那么的详细,看起来没有那么的直观,因为是Java开发的,所以运行的时候必须要安装JDK才可以。
-
Apache Jmeter 可用于对静态的和动态的资源(文件,Servlet, Perl脚本,Java对象,数据库和查询,FTP服务器 等等)的性能进行测试。可以用于对服务器、网络或对象模拟繁重的负载来测试应用的强度或分析不同压力类型下的整体性能。
- Jmeter是开源的嘛,所以是不需要花钱的,拿到了安装包之后直接解压就能使用了,它是跨平台的,在Linux、Windows、Macos上都可以使用
二、Jmeter 特点
-
完全的可移植性100%,纯Java
-
精心的GUI设计,允许快速操作和更精确的计时
-
离线分析/回放测试结果
三、Jmeter 支持测试协议
-
web应用:HTTP,HTTPS网站
-
web service:SOAP/XML-RPC/Rest Service
-
数据库:通过JDBC驱动程序进行数据库性能测试
-
LDAP目录服务
-
通过JMS的面向消息的服务
四、Jmeter 运行原理
-
Jmeter 通过线程组来驱动多个线程运行测试脚本对被测服务器发起负载
-
负载机上可以运行多个线程组,Jmeter运行场景可以在GUI方式下运行,也可以在非GUI方式下运行,非GUI方式(命令行)对负载机的资源消耗更小
-
Jmeter中取样器,断言和监听器组合在一起就可以完成请求发送,验证结果及记录结果过程
-
Jmeter 可以运行在远程控制模式,即分布负载模式
五、Jmeter 如何运作
- Jmeter 模拟一组向目标服务器(或目标测试应用)发送请求的用户,接受服务响应,通过表,图形等返回统计信息,显示目标服务器/应用程序的性能/功能,参见Jmeter如何工作,如图所示:
六、 Jmeter 官方网站及下载
-
跨平台运行,支持Windows/Linux/Mac
-
安装后目录结构如下图所示:
七、运行Jmeter
八、JMeter 根目录结构说明
1、backup 目录
脚本备份目录,里边的文件都是以 .jmx 后缀结尾的文件。
实际开始安装解压后是不存在这个目录的,在使用过 JMeter 后,JMeter 自动创建这个目录,然后备份了脚本文件。
2、bin 目录
可执行文件目录
- Jmeter.bat:是启动 JMeter 的主脚本。
- Jmeter-server.bar:是用来实现联机负载。
- Jmeter.properties:是 JMeter 主要的配置文件,超过 80% 的配置项都是通过这个文件实现。(PS:修改配置文件后,要重启 Jmeter 才能生效)。
Jmeter.bat 打开 Jmeter 主界面。
Jmeter 使用的日志文件名称被定义到 Jmeter.properties 中,默认在 Jmeter.log 可查看日志。
3、dosc 目录 — — 接口文档目录
- docs 目录下的文件是 JMeter 的 Java Docs。(如:docs\api\index.html 可打开网页查看)
- printable_docs 的 usermanual 子目录下的内容是 JMeter 的用户手册文档,其中 component_reference.html 是最常用到的核心元件帮助文档。该目录下存放的是 JMeter 官方文档的 API 文档,主要是用于二次开发。
4、extras 目录 — — 扩展插件目录
- 该目录下的文件提供了对构建工具 Ant 的支持,可以使用 Ant 来实现测试自动化,例如批量脚本执行,产生 HTML格式的报表,测试运行时,可以把测试数据记录下来,Jmeter 会自动生成一个 .jtl 文件,将该文件放到 extras 目录下,运行 “ant -Dtest=文件名 report”,就可以生成测试统计报表。
5、lib 目录— — 所用到的插件目录
- 该目录包含两个子目录,其中 ext 子目录存放有 JMeter 的核心 jar 包,另一个 junit 子目录存放 JUnit 测试脚本。
- 用户扩展所依赖的包,应该直接放到 lib 目录下,而非 lib/ext 下。
注意:无法识别 zip 格式的包文件,所以需要的包文件均要求以 .jar 结尾
6、Licenses — — Jmeter证书目录
7、printable_docs 目录
- 该目录存放的是 JMeter 官方提供的帮助文档。
- printable_docs 的 demos 子目录下有一些常用的 JMeter 脚本案例,可以作为参考。
8、LICENSE JMeter ——许可说明
9、NOTICE JMeter ——简单信息说明
10、README.md ——JMeter 官方基本介绍
九、JMeter 插件安装
1.进入 JMeter 插件网站,下载 JMeter 插件包
2.解压插件,找到 JMeterPlugins-Extras.jar,把 JMeterPlugins-Extras.jar 放到 apache-JMeter-5.4.1\lib\ext 目录。
安装使用
下载 Plugins Manager JAR 文件并将其放入 JMeter 的lib/ext目录中。然后启动 JMeter 并转到“选项”菜单以访问插件管理器。
通过 Plugins Manager 安装插件
1.比如我要安装 Transactions per Second(TPS每秒事务数) ,Response Times Over Time(响应时间),Active Threads Over Time(在线用户数,随时间变化的活动线程) 这三个插件,搜索graphs,然后勾选第一个:
2.安装后重启 jmeter,就可以了
十、Jmeter组件图
十一、 Jmeter 负载组件的介绍
-
负载模拟:负载模拟用户请求。如:取样器有参数化的需求,可通过配置元件或前置处理器来完成。如:有关联需求,可通过后置处理器完成。
-
线程组用来设置运行场景,如:模拟多少用户,运行多长时间
-
定时器用来模拟并发场景
-
控制器用来控制业务的执行逻辑,如:单次登录、交替执行等
-
断言:验证结果正确性
-
监听器:负载结果的收集与展示
十二、元件执行的顺序
Jmeter 测试计划脚本呈树形结构排列,元件的执行顺序是先执行根节点,在执行子节点。在同一层次中,各个元件的执行顺序逻辑如下:
- 配置元件(如:参数)
- 前置处理器
- 定时器
- 取样器
- 后置处理器
- 断言
- 监听器
(1)元件执行顺序需注意:
- 定时器、断言、前置处理器、后置处理器只有在适合用于取样器的情况下才会按照顺序进行处理
- 控制器和取样器按照在测试计划树中的顺序进行处理
- 其他测试元件根据其范围和测试元素的类型进行处理
- 如测试元件是同一个类型,则元件按照在树中出现的顺序进行处理
(2)元件执行作用域
Jmeter 测试计划树包含的元件是分层并且有序的
- 其中:监听器、、配置元件、后置处理器、前置处理器、断言、定时器元件是严格分层且有序执行的
- 控制器和取样器则是有序执行的。如以下测试计划:
(3)元件分层作用域
- 对于严格分层的元件,如断言元件在测试计划树中是分层的。如果其父节点是一个请求,则该断言应用于该请求。 如其父节点是控制器,则该断言将应用于该控制器内的所有请求。 在以下测试计划中树中:
断言1 仅适用于请求1,而断言2 仅适用于请求2、3,请求4没有断言
(4)定时器作用域示例
在此示例中,定时器 #1将应用于请求2、3、4。 断言1仅适用于请求3。 定时器#2将适用于所有请求
1、取样器
- 模拟用户操作,向测试系统发出请求,如http请求、Web Service 请求 或者 JDBC请求。如:http请求元件发送http请求,接受服务器的响应数据。
- 取样器执行Jmeter 的实际请求交互工作。每个取样器请求都会生成一个或多个取样结果。 取样结果具有各种属性,如是否成功或失败,经过的时间,数据包大小等,且可在各种监听中查看结果。
- 学习参考地址(官网):
Windows版本:
Mac版本:
2、断言
- 用来验证结果是否正确,用来判断请求是否返回且返回值是否符合要求。即预设结果(值,表达式,时间长短)与实际结果匹配。常见的断言有响应断言,XML断言等
Windows版本:
Mac版本:
3、监听器
Jmeter 测试结果需要添加监听器来收集。监听器有如下功能:
- 添加结果监听器,保存测试结果到文件,结果数据可以再次分析使用
- 展示结果,可以图形即表格的形式展现结果,方便测试人员分析测试结果。可以帮助调试,如开发测试计划时,查看结果树和响应数据
4、前置处理器
- 前面的【取样器】、【断言】 和 【监听器】组合在一起就可以完成请求发送,验证结果及记录结果过程
- 在测试脚本过程中,请求发送之前可能会需要做环境或参数的准备工作,可在前置处理器中完成这些工作。如:对数据库进行操作前需要简历数据库连接等
5、配置元件
- 模拟用户操作过程中的参数化,比如:CSV Data Set Config,可以从文件中读取测试数据,为取样器提供预备数据
- 记录服务器返回的数据,如:Http Cache Manager,自动记录服务返回的Cache信息
6、后置处理器
- 后置处理器一般放在取样器之后,用来处理服务器的返回结果。后置处理器是用来对响应数据做处理的元件,如:正则表达式提取器、我们可以把token提取后放在之后的使用中
7、逻辑控制器
- 逻辑控制器确定取样器的处理顺序和逻辑控制等,如执行一次控制器,循环控制器,交替执行控制器等来满足执行中的复杂条件
Windows版本:
Mac版本
8、定时器
- 为了真实模拟用户负载,有时需要模拟在什么时候以什么规律发送请求。如:发送某一个服务器,Jmeter中通过定时器就可以来完成下。
9、线程组
- 性能测试需要模拟大量用户负载的情况,通过线程组来完成此工作,在线程组中,可以设置运行的线程数,即模拟的用户数,还可以设置运行时长和循环次数等
虽然有三个添加线程组的选项,名字不一样, 创建之后,其界面是完全一样的。之前的版本只有一个线程组的名字。现在多一个setUp theread Group 与terDown Thread Group
1) setup thread group
- 一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。setUp Thread Group类似于lr的init.可用于执行预测试操作。
2) teardown thread group.
- 一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。tearDown Thread Group类似于lr的end.可用于执行测试后动作。
3) thread group(线程组)
- 这个就是我们通常添加运行的线程。通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。
线程组:
- 名称:自定义下名字就行
- 注释:自定义备注下
- 线程数:想要单次跑几个
- Ramp-Up Period:单位是秒,默认时间是1秒。它指定了启动所有线程所花费的时间,比如,当前的设定表示“在5秒内启动5个线程,每个线程的间隔时间为1秒”。如果你需要Jmeter立即启动所有线程,将此设定为0即可
- 循环次数:表示每个线程执行多少次请求。
10、测试计划
Test Plan (测试计划):用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本的性能测试的所有内容是于基于一个计划的。
右键单击“测试计划”弹出菜单:
“函数测试模式”复选框,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据。如果你在测试监听器中选择一个文件,这个数据将被写入文件。如果你尝试一个较小的测试来保证Jmeter配置正确并且你的服务器正在返回期望的结果,这是很有用的。这样做的后果就是这个文件会快速的增大,并且Jmeter的效率会影响。
如果不记录数据到文件,这个选项就没有不同了。
11、测试片段(Test Fragment)
测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/16519135.html