Jmeter学习之三_知识梳理

jmeter,学习,之三,知识,梳理 · 浏览次数 : 33

小编点评

**定时器JMeter简介** * 定时器用于控制线程发出请求的时间间隔。 * 可以模拟真实的用户行为,使测试更加真实和可靠。 **JMeter常用定时器** * 固定定时器:在每次请求之间添加一个固定的时间延迟。 *随机定时器:在每次请求之间添加一个随机时间延迟。 *负载模拟定时器:基于泊松分布模拟用户请求的间隔时间。 * Gaussian 定时器:基于高斯分布模拟用户请求的间隔时间。 **JSR223 Sampler简介** * JSR223 Sampler 可以执行脚本,并可以使用多种脚本语言(如 Java、JavaScript、Groovy 等)来执行脚本。 * 可以方便地与其他 JMeter 元素(如 HTTP 请求、JDBC 请求等)配合使用,以达到更好的性能测试效果。 **使用 JSR223 Sampler 测试脚本** * 在 JSR223 Sampler 前面的元素是 HTTP 请求,则可以在脚本中使用 prev.getResponseDataAsString() 方法来获取 HTTP 请求的响应数据。 * 可以在脚本中设置变量,用于在其他元素中使用。 * 此外,JSR223 Sampler 还可以通过设置「缓存脚本」选项来优化性能,使脚本在多次运行时不必每次都编部分资料取自网络。

正文

Jmeter学习之三_知识梳理


背景

简单学习了Jmeter的两个用例
感觉可以继续深入学习一下Jmeter了. 
所以想着趁体检入职之前继续学习完善一下. 

希望能够继续提高

Jmeter的相关知识

1. 什么是Jmeter?
ApacheJMeter ,是一个100%纯Java的开源软件,旨在加载测试功能行为和测量性能。它最初设计用于测试Web应用程序,但后来扩展到其他测试功能。
相较于世面上一些其他性能测试工具,Jmeter是为数不多的既好用又开源免费的测试工具。

2. Jmeter主要元件
1、测试计划:是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器

2、线程组:代表一定数量的用户,它可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3、配置元件:维护Sampler需要的配置信息,并根据实际的需要修改请求的内容。

4、前置处理器:负责在请求之前工作,常用来修改请求的设置

5、定时器:负责定义请求之间的延迟间隔。

6、取样器(Sampler):是性能测试中向服务器发送请求,记录响应信息、响应时间的最小单元,如:HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBC Request Sampler等,每一种不同类型的sampler 可以根据设置的参数向服务器发出不同类型的请求。

7、后置处理器:负责在请求之后工作,常用获取返回的值。

8、断言:用来判断请求响应的结果是否如用户所期望的。

9、监听器:负责收集测试结果,同时确定结果显示的方式。

10、逻辑控制器:可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
————————————————
版权声明:本文为CSDN博主「Dreamchaser追梦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46101869/article/details/122134619

执行顺序: 测试计划>>>线程组>>>配置元件>>>前置处理器>>>定时器>>>取样器>>>后置处理器>>>断言>>>监听器

作用域: 辅助组件(除测试计划、线程组、取样器之外的组件)作用于父组件、同级组件,以及同级组件下的所有子组件

Jmeter的设置规范

Jmeter 程序设计通用规范
(1)、Jmeter 程序遵循易用易懂原则

比如配置元件、监听器尽可能往外放
尽量少用控制器,尽量减少层次结构
在代码逻辑较多时,尽量采用测试片段进行代码公用(方便维护修改)
采用简单控制器进行有效的逻辑化

(2)、注意 Jmeter 本身性能,部分性能不佳的组件在运行测试时尽可能屏蔽、少用

比如脚本语言中的 BeanShell,尽量用 Groovy 替代
比如 Css/Jquery 提取器的高效书写,避开低效的监听器等
运行时去掉一些调试组件、打印信息、日志信息等(影响性能测试结果)

(3)、文件路径建议统一采用相关路径,避开迁移的代码修改

(4)、合理设置断言器,保持业务压测的准确性

(5)、容易修改的常量,多处使用的常量,记得进行变量进行参数化
————————————————
版权声明:本文为CSDN博主「小鹿快跑~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45138120/article/details/124056704

关于线程组

(1)线程数:即虚拟用户数。设置多少个线程数也就是设置多少虚拟用户数

(2)Ramp-Up时间(秒):设置虚拟用户数全部启动的时长。如果线程数为20,准备时长为10秒,那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。

(3)循环次数:每个线程发送请求的个数。如果线程数为20,循环次数为10,那么每个线程发送10次请求。总请求数为20*10=200。如果勾选了“永远”,
那么所有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束。

(4)Same user on each iteration:相同用户迭代,一般用在有 Cookie 的场景时生效

(5)Delay Thread creation until needed:延迟创建线程直到需要,默认不勾选,测试开始时,所有的线程就被创建完。勾选此项,延迟线程创建,直到需要才创建

(6)调度器配置

持续时间(秒): 脚本持续运行的时间,如果同时设置有循环次数(循环次数 * 线程加速时间),则谁先到达则谁先生效
启动延迟(秒):脚本延迟启动的时间


关于性能参数

jmeter的线程数(member of threads)相当于并发用户数,并发用户数就是虚拟用户数(virtual user),简称VU。

一、并发用户数(UV):指的是现实系统中操作业务的用户;
并发用户数、注册用户数、在线用户数三者区别。

①并发用户数一定会对服务器产生压力;
②在线用户数只是“挂”在系统上,对服务器不产生压力;
③注册用户数指数据库中存在的用户数;

二、处理能力(TPS):(Transactions Per Second)每秒处理的事务数目。是衡量系统性能的一个非常重要的指标。一个事务是指一个客户端向服务器发送请求然后服务器做出反应的过程。
TPS 的过程包括:客户端请求服务端、服务端内部处理、服务端返回客户端。

三、QPS(Queries Per Second):每秒能够响应的查询次数,也即是最大吞吐能力(吞吐量)。
例如,访问一个页面会请求服务器 3 次,那么访问这一个页面就会产生一个TPS,三个QPS。
注意:对于一个页面的一次访问,形成一个 Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。
例如,访问一个 Index 页面会请求服务器 3 次,包括一次 html,一次 css,一次 js,那么访问这一个页面就会产生一个“T”,产生三个“Q”。

四、响应时间(RT):指的是业务从客户端发起到客户端接受的时间。 响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间,总之,是对请求做出相应所需要的时间。
网络传输时间:N1+N2+N3+N4
应用服务器处理时间:A1+A3
数据库服务器处理时间:A2
响应时间=N1+N2+N3+N4+A1+A3+A2

五、吞吐量(Throughput):服务器每分钟处理的请求数。
一个系统的吞吐量与请求对cpu的消耗,内存,io 使用等紧密相关,单个请求对CPU消耗越高,外部系统接口、io影响速度越慢,系统吞吐能力越低,反之越高。
————————————————
版权声明:本文为CSDN博主「时光Timely」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Smtime826/article/details/126700095

Jmeter的变量作用域

Jmeter 变量作用域和规则
(1)、前一个组件定义的变量,在后续所有组件的执行过程中有效

例如在取样器 JSR223 Sampler中定义一个变量:vars.put(“var”,“我是变量”),在后续组件中都可以引用
(2)、变量分为线程变量、线程组变量、全局共享变量

线程变量的修改一般只对本线程有效,只会影响本线程的下一次迭代,不会跨线程

例如修改A线程,只影响A线程的之后迭代(设置线程循环),但不会影响B线程

线程组变量的修改会对整个线程组生效,在线程组内跨线程(比如像 csv配置元件中的线程组共享)

全局的变量的修改会对所有线程组生效(比如像 csv配置元件中的全局共享,全局 Counter 计数器等)

(3)、变量的定义尽量往外层放置,最好不要放置在业务逻辑中,理解起来比较反常(动态变量(设置一些后置处理器)除外)
————————————————
版权声明:本文为CSDN博主「小鹿快跑~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45138120/article/details/124056704

监听器相关

主要监听器的场景使用比较
(1)、开发调试:是指我们编写脚本或者脚本还在调试阶段,这一阶段我们对 Jmeter 的性能没有要求

(2)、轻量级压测:我们的脚本已经初步完成,并想通过多线程和多次迭代简单的验证一下脚本

(3)、负载压测:脚本已经完成,准备对业务系统进行长时间压测

(4)、UI 模式下结果输出两大常用组件:结果树监听器 + 总结报告监听器,采用这两种监听器,我们可以处理90%以上的场景

断言,定时器

JMeter中的断言用于验证测试结果是否符合期望。断言是测试脚本中的一部分,并且在测试运行期间对响应数据或其他指标进行检查。下面是JMeter中常用的几种断言类型的总结:

响应断言(Response Assertion):用于验证响应结果是否与期望值匹配。可以使用不同的模式(包含、匹配、相等等)对响应文本、响应代码、响应头等进行检查。

JUnit 断言(JUnit Assertion):这种断言允许你使用JUnit库的断言方法(如assertEquals、assertTrue等)来验证响应结果。

JSON 断言(JSON Assertion):用于验证API接口返回的JSON响应是否符合预期的结构或内容。可以检查JSON对象、数组、属性等。

XML 断言(XML Assertion):用于验证XML响应是否符合预期的结构或内容。可以检查XML元素、属性、命名空间等。

HTML 断言(HTML Assertion):用于验证HTML响应是否符合预期的结构或内容。可以检查HTML元素、属性、文本等。

匹配断言(Match Assertion):用于通过正则表达式匹配来验证响应内容是否符合预期。可以检查响应文本、响应头等。

BSF 断言(BSF Assertion):这种断言允许你使用脚本语言(如JavaScript、Groovy等)来自定义验证逻辑。

请根据你的测试需求选择适合的断言类型,并合理配置断言参数,以确保在测试运行期间正确验证响应结果。

定时器

JMeter中的定时器(Timer)用于控制线程发出请求的时间间隔。它可以模拟真实的用户行为,使测试更加真实和可靠。下面是JMeter中常用的几种定时器的介绍:

固定定时器(Constant Timer):固定定时器会在每次请求之间添加一个固定的时间延迟。你可以设置延迟的毫秒数,例如设置为1000表示每个请求之间间隔1秒。

随机定时器(Random Timer):随机定时器会在每次请求之间添加一个随机的时间延迟。你可以设置延迟的最小值和最大值,每次请求之间的延迟将在这个范围内随机选择。

负载模拟定时器(Poisson Random Timer):负载模拟定时器基于泊松分布模拟用户请求的间隔时间。你可以设置请求的速率(单位:请求/秒),定时器会根据速率随机计算出每次请求之间的延迟时间。

Gaussian 定时器(Gaussian Random Timer):Gaussian定时器基于高斯分布模拟用户请求的间隔时间。你可以设置请求的平均间隔时间和标准差,定时器会根据这些参数生成随机的间隔时间。

使用这些定时器,你可以根据自己的需求模拟各种用户行为场景,控制请求的时间间隔,以更真实地模拟负载和压力测试。在JMeter的测试计划中,将定时器置于需要设置延迟的线程组或请求上,以实现相应的效果。

取样器

一个没有取样器的测试计划是没有意义
Jmeter 测试计划的执行是以取样器为核心驱动

8.3、JSR223 Sampler
用于在性能测试脚本中执行脚本。它可以使用多种脚本语言(如 Java、JavaScript、Groovy 等)来执行脚本;使用时需要安装对应的脚本引擎。
JSR223 Sampler 常用于测试动态内容、复杂的业务逻辑、复杂的数据操作等。它可以方便地与其他 JMeter 元素(如 HTTP 请求、JDBC 请求等)配合使用,以达到更好的性能测试效果

Script language

语言(Language):要使用的JSR223脚本代码语言的类型
将参数传递给脚本(String 与 String [])(Parameters passed to script(exposed as ‘Parameters’ (type String) and ‘args’ (type String[]))

参数(Parameters):传递参数,可将GUI脚本中创建的Parameters参数传递至Beanshell脚本中。在Beanshell脚本中引用是使用bsh.args【x】进行实例化

浏览(Browse):选择文件位置
脚本文件(覆盖脚本)(Script file(overrides script))
文件名(File Name):导入Beanshell脚本运行文件。文件名存储在脚本变量名中。
脚本(Script)
编写脚本处。(Beanshell语法)
内置变量vars:提供了对JMeter中的变量的读/写方法
内置变量ctx:拿到有上下文context的权限,ctx可以访问很多对象。比如:获取前一个取样器执行结果、获取当前线程所有变量等
用法:

1. JSR223 Sampler 可以获取上一个元素的返回结果,并在脚本中使用。例如,如果在 JSR223 Sampler 前面的元素是 HTTP 请求,则可以在脚本中使用 prev.getResponseDataAsString() 方法来获取 HTTP 请求的响应数据。

2. JSR223 Sampler 还可以设置变量,用于在其他 JMeter 元素中使用。例如,可以在脚本中使用 vars.put(“variableName”, “variableValue”) 方法来设置变量,然后在其他元素中使用 ${variableName} 变量来引用这个变量的值

3. 此外,JSR223 Sampler 还可以通过设置「缓存脚本」选项来优化性能,使脚本在多次运行时不必每次都编

部分资料取自网络, 是一个一边整理,一边学习的过程. 关注我的小公众号一起学习进步

image

与Jmeter学习之三_知识梳理相似的内容:

Jmeter学习之三_知识梳理

# Jmeter学习之三_知识梳理 ## 背景 ``` 简单学习了Jmeter的两个用例 感觉可以继续深入学习一下Jmeter了. 所以想着趁体检入职之前继续学习完善一下. 希望能够继续提高 ``` ## Jmeter的相关知识 ``` 1. 什么是Jmeter? ApacheJMeter ,是一个

Jmeter学习之一_连接与测试Redis

# Jmeter学习之一_连接与测试Redis ## 简介 ``` 下载: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.zip 注意事项: Don't use GUI mode for load testing !, onl

Jmeter学习之四_kingbaseV8R6数据库的简单验证

# Jmeter学习之四_kingbaseV8R6数据库的简单验证 ## 背景 ``` 周一没去报道, 因为我忘记体检了... 继续在家进行学习提高自己. jmeter周末时开始看的. 今天想着继续研究一下对数据库的处理 突然发现人大金仓的官方csdn有一个文档, 所以想着偷师,并且总结学习一下.

Jmeter学习之五_跟踪被测试服务器的performance

# Jmeter学习之五_跟踪被测试服务器的performance ## 背景 ``` 这几天简单学习了一些基本的测试过程. 可以实现一些简单基本的功能了. 今天晚上继续进行了jmeter的一些学习. 想着可以在测试人大金仓的同时可以查看一下本地的机器性能. ``` ## 用到的工具以及资料 ```

Jmeter学习之七_使用influxdb2.7和grafana10进行Jmeter测试结果展示的方法

# Jmeter学习之七_使用influxdb2.7和grafana10进行Jmeter测试结果展示的方法 ## 摘要 ``` 前几天验证了 线程组内的-监听器 jp@gc 相关的组件 以及验证了 server-agent的方式可以监控机器的性能表现. 但是发现很多结果集是比较杂乱 并且不太好查看的

Jmeter学习之八_测试kafka

# Jmeter学习之八_测试kafka ## 背景 ``` 最近在持续学习. 昨天学习了grafana展示Jmeter测试数据库的结果 今天想着能够测试一下kafka验证一下kafka的吞吐量等信息 说干就干的. ``` ## 遇到的坑 ``` 本来计划使用pepper-box 或者是 kafka

Jmeter学习之六_进行https证书处理的工作

# Jmeter 进行https证书处理的工作 ## 背景 ``` 继续学习中,想着能够抓取一下https相关的信息 所以计划些一下处理过程 但是感觉自己这一块比较薄弱. 场景设计这一块应该是专业人去搞, 我这边先只是简单学习了解一下. ``` ## 创建证书 ``` 要使用 keytool 工具创

[转帖]jmeter学习笔记(二十二)——监听器插件之jp@gc系列

一、jp@gc - Actiive Threads Over Time 不同时间活动用户数量展示 下面是一个阶梯加压测试的图标 二、jp@gc - Transactions per Second ,即TPS:每秒事务数 性能测试中,最重要的2个指标之一。该插件的作用是在测试脚本执行过程中,监控查看服

[转帖] Jmeter学习笔记(七)——监听器元件之察看结果树

https://www.cnblogs.com/pachongshangdexuebi/p/11507289.html 在jmeter中,如果我们需要查看请求结果就需要添加查看结果树,这个监听器元件有那些功能呢? 一、察看结果树界面如下 二、察看结果树界面功能说明 1、所有数据写入文件 (1)文件名

[转帖]Jmeter学习笔记(八)——监听器元件之聚合报告

https://www.cnblogs.com/pachongshangdexuebi/p/11507298.html 1、聚合报告添加 聚合报告是常用的监听器之一,添加路径: 点击线程组->添加->监听器->聚合报告 2、聚合报告界面及说明 Label:请求的名称,就是我们在进行测试的httpre