JMeter 5.5 使用详解(持续更新中......)

文章目录


引言

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试

JMeter官方文档:http://jmeter.apache.org/index.html

如果是小白同学,建议先查看 【P1】Jmeter 准备工作,里面包含了 Jmeter 下载、环境变量配置、设置语言、设置日志级别等等,可以更方便后续学习 Jmeter 准备工作

几个开源的网址:

TP商城: http://www.testingedu.com.cn:8000/

嘟市商城: http://124.223.31.21:8080/index.htm

WebXml: http://www.webxml.com.cn/zh_cn/index.aspx

慕慕生鲜: http://111.231.103.117/#/login


Jmeter 核心组件

取样器: 向服务器发送请求的最小单元

逻辑控制器: 结合取样器实现一些复杂的逻辑

前置处理器: 在请求之前的工作,主要包括参数的设定和传递

后置处理器: 在请求之后的工作,比如判断、参数关联、逻辑处理等,为业务逻辑中的重要环节

定制器: 负责在请求质检的延迟间隔。固定、高斯、随机

配置元件: 配置信息,用于设置一些默认值以供后续范围内的组件使用

断言: 提供成功与否的判断机制,通常用于检查取样器的结果是否正确

监听器: 提供结果检查机制,用于查看、检查、汇总、分析取样结果

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

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

Jmeter 程序设计通用规范

(1)、Jmeter 程序遵循易用易懂原则

  • 比如配置元件、监听器尽可能往外放

  • 尽量少用控制器,尽量减少层次结构

  • 在代码逻辑较多时,尽量采用测试片段进行代码公用(方便维护修改)

  • 采用简单控制器进行有效的逻辑化

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

  • 比如脚本语言中的 BeanShell,尽量用 Groovy 替代

  • 比如 Css/Jquery 提取器的高效书写,避开低效的监听器等

  • 运行时去掉一些调试组件、打印信息、日志信息等(影响性能测试结果)

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

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

(5)、容易修改的常量,多处使用的常量,记得进行变量进行参数化

测试计划

测试计划是用来描述一个性能测试的顺序与动作,它包含了若干测试组件以及若干个线程组

在这里插入图片描述

  • 独立运行每个线程组(例如在一个组运行结束后启动下一个):存在多个线程组时,勾选则串行执行。默认不勾选,并发执行

  • 函数测试模式:如果选择,它将使 JMeter 记录每个样本从服务器返回的数据。如果在测试侦听器中选择了文件,则此数据将被写入文件。如果要进行少量运行以确保正确配置 JMeter 并确保服务器返回预期结果,这将很有用。结果是文件将快速增长,JMeter 的性能将受到影响。如果要进行压力测试,则应禁用此选项(默认情况下处于禁用状态)

脚本示例:【P2】Jmeter 线程组的并行与串行

一、线程(用户)

1.1、线程组

线程组元件可以理解为一个测试计划的开始(Jmeter 其它的元件都要放在线程组下)

右击测试计划 >>> 添加 >>> 线程(用户) >>> 线程组

在这里插入图片描述

在取样器错误后要执行的动作

  • 继续:继续执行接下来的操作

  • 启动下一进程循环: 开始下一次循环

  • 停止线程:退出该线程,不在执行此线程的操作

  • 停止测试:等待当前执行的取样器结束后,结束整个测试

  • 立即停止测试:立刻停止测试

线程属性

  • 线程数:相当于模拟的用户数量,一个用户占一个线程,模拟200个用户就是200个线程

  • Ramp-Up Period (in seconds):线程加速时间,设置多长时间内启动全部线程。例如线程数为100,时间设定为10s,那么就是10s加载 100个线程,每秒启动的线程数=100/10=10

  • 循环次数: 如果填具体的数值,就是循环对应的次数,例如线程数为200,循环次数为10,则每个线程发10次请求;如果选择“永远”,则一直执行下去,直到手动停止

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

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

注:进行参数化时,需配置对应的线程数量

调度器配置

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

  • 启动延迟(秒):脚本延迟启动的时间

1.2、setUP 线程组

setUP 线程组在测试任务普通线程组运行前先被运行。通常用在运行测试任务前,做初始化工作。例如建立数据库连接初始分化工作、用户登录

右击测试计划 >>> 添加 >>> 线程(用户) >>> setUP 线程组

在这里插入图片描述

参数说明参考:1.1 线程组

1.3、tearDown 线程组

tearDown 线程组在测试任务线程组运行结束后被运行。通常用来做清理测试脏数据、登出、关闭资源等工作。例如关闭数据库连接

右击测试计划 >>> 添加 >>> 线程(用户) >>> tearDown 线程组

在这里插入图片描述

参数说明参考:1.1 线程组


二、配置元件

配置元件主要用于设置一些默认值以供后续范围内的组件使用

执行顺序:

(1)、配置元件优先执行

(2)、按深度优先算法,依次寻找取样器,找到取样器后,逐个执行,遵循第3条规则

(3)、组件执行顺序:前置处理器 -> 定时器 -> 取样器 -> 后置处理器 -> 断言器 -> 监听器

(4)、执行多个同类型配置元件组件时,在范围内按照广度优先策略依次执行(先外后内,反向执行)

(5)、配置元件无子元素

(6)、配置元件的执行是相互独立的,谁先执行谁后执行,一般意义不大

在这里插入图片描述

2.1、CSV 数据文件设置(CSV Data Set Config)

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

选择请求 >>> 添加 >>> 配置元件 >>> CSV Data Set Config

在这里插入图片描述

设置 CSV 数据文件(Configure the CSV Data Source)

(1)、文件名(Filename):csv 文件路径,可以是绝对路径或者相对路径

建议设置成相对路径,填写相对于脚本的路径,后续远程压测或迁移时,可以更好的找个文件

(2)、文件编码(File encoding):编码格式,与所选文件编码格式保持一致

(3)、变量名称(西文逗号间隔)(Variable Names (comma-delimited)):如果文件中只有一个变量,直接写变量名,如果有多个变量,用英语的逗号隔开。例:var1,var2

(4)、忽略首行(只在设置了变量名称后才生效)(Ignore first line (only used if Variable Names is not empty)):

  • True:设置为 True 时,从文件第二行开始读取,此时文件第一行为变量名,例:var1,var2;设置为 True,变量名称可以不用设置,在文件第一行设置即可

  • False:一般设置为 False,文件从第一行开始设置变量数据,在变量名称中设置名称

(5)、分隔符(用 ‘\t’ 代替制表符)( Delimiter (use ‘\t’ for tab)):根据文件中的分隔符进行填写,默认:,

(6)、是否允许带引号?(Allow quoted data?):

  • True:参数文件包含引号时,实际的数据为引号中的数据。比如参数文件中的数据为"1,2",当使用该参数时,实际取得值为1,2

  • False:参数文件包含引号时,实际取得值为全部的值。比如参数文件中的数据为"1,2",当使用该参数时,实际取得值为"1,2"会取成两个参数

(7)、遇到文件结束符再次循环?(Recycle on EOF?):

  • True:参数文件中的数据循环使用,测试按照线程组中的设置执行。比如csv 文件共有 10 条记录,但线程数有 15 个,循环 10 次后,重头开始循环取值

  • False:参数文件不再循环遍历取值

(8)、遇到文件结束符停止线程(Stop thread on EOF?):

  • True:当执行完参数文件中所有参数后,直接停止线程

  • False:不停止

(9)、线程共享模式(Sharing mode):

  • 所有线程(All threads):参数文件对所有线程共享,这包括同一测试计划中的不同线程组(测试计划下的所有线程组下的所有线程共享参数文件,所有线程之前参数取值互相影响,线程在同一次迭代下取值相同)

  • 当前线程组(Current thread group): 只对当前线程组中的线程共享(当前线程组下的所有线程公用一个参数文件,同一个线程组下的线程之前取值相互影响,线程在同一次迭代下取值相同)

  • 当前线程(Current thread): 仅当前线程获取(即每个线程获取一个参数文件,各个线程之间参数取值互不影响,线程在同一次迭代下取值相同)

当参数文件的位置与线程组在同级下,线程组下存在循环控制器时,循环控制器下的参数取值相同

线程组下存在循环控制器时,当参数文件在循环控制器下,循环控制器下每次迭代时重新取值

线程组下存在仅一次控制器,参数文件在仅一次控制器下,当参数在仅一次控制器下取值一次之后,之后无论哪次迭代参数取值都不变,类似于unique once

注:创建 CSV 文件最好用 notepad 创建,编码格式为 UTF-8

脚本示例:【P5】JMeter CSV Data Set Config(CSV 数据文件设置)

2.2、HTTP信息头管理器

设置 Jmeter 发送的 HTTP请求头所包含的信息;可抓包或通过浏览器开发模式查看

右键 >>> 添加 >>> 配置元件 >>> HTTP信息头管理器

在这里插入图片描述

  • 信息头,也就是请求头,会跟随 HTTP 请求一起发送到服务器。比如需要传输 User-Agent 、cookie、token 或其他某些信息,或是需要伪造请求头的时候

脚本示例:【P3】HTTP 接口设计

2.3、HTTP Cookie管理器(HTTP Cookie Manager)

如果你有一个 HTTP 请求,其返回结果里包含一个 cookie,那么 Cookie 管理器会自动将该 cookie 保存起来,而且以后所有的对该网站的请求都使用同一个 cookie

右键 >>> 添加 >>> 配置元件 >>> HTTP Cookie管理器

在这里插入图片描述

选项(Options)

(1)、每次反复清除Cookies?(Clear cookies each iteration?):每次迭代时,都将 Cookies 清空

(2)、Use Thread Group configuration to control cookie clearing:用户线程组去配置清空 Cookie

(3)、Cookie 格式

  • standard:标准格式

  • standard-strict:严格格式

  • ignoreCookies:此规格忽略所有 Cookie。被用来防止 HttpClient 接受和发送的 Cookie

  • netscape:是最原始的 Cookies 规范,同时也是 RFC2109 的基础。尽管如此,还是在很多重要的方面与 RFC2109 不同,可能需要特定服务器才可以兼容

  • default:默认

  • rfc2109:是 HttpClient 使用的默认 Cookies 协议

  • rfc2965:定义了版本2并且尝试去弥补在版本1中 Cookie 的 rfc2109 标准的缺点。规定 rfc2965 最终取代 rfc2109 发送 rfc2965 标准 Cookies 的服务端,将会使用 Set-Cookie2 header 添加到 Set-Cookie Header 信心中,rfc2965 Cookies 是区分端口的

  • compatibility:推荐选择此种策略。这种兼容性设计要求是适应尽可能多的不同的服务器,尽管不是完全按照标准来实现的。如果你遇到了解析 Cookies 的问题,你就可能要用到这一个规范。有太多的 web 站点是用 CGI 脚本去实现的,而导致只有将所有的 Cookies 都放入 Request header 才可以正常的工作。这种情况下最好设置 http.protocol.single-cookie-header 参数为 true

存储在Cookie管理器中的Cookie(User-Defined Cookies)

  • 自定义 Cookie,可以手动添加

脚本示例:【P6】JMeter HTTP Cookie管理器

2.4、HTTP缓存管理器

模拟浏览器缓存功能,静态缓存(图片等)。动态缓存(json,xml)等不在范围内。

注意:开启缓存时,我们要注意 JVM 内存大小,防止内存溢出,高并发时启步 4G

HTTP缓存管理器使用较少,大部分性能压测都是针对于动态资源 json,xml等请求,很少压测图片等静态资源

右键 >>> 添加 >>> 配置元件 >>> HTTP 缓存管理器

在这里插入图片描述

  • 在每次迭代中清除缓存?: 如果选中此项,则在线程每次迭代时清除缓存。去Server请求资源

  • Use Thread Group configuration to control cache clearing:如果选择该项,使用线程组配置去控制缓存清空;线程组勾选 Same user on each iteration 相同用户迭代,则缓存不会清空,不勾选则会清空

  • Use Cache-Control/Expires header when processing GET request :规则与浏览器类似,检测修改时间和 Etag 变化,判断是否对静态资源进行缓存;如果勾选,则会对照当前时间检查“Cache-Control/Expires”值。如果请求是GET请求,并且时间戳记在缓存之后,则取样器将立即返回,而无需从远程服务器请求URL。这旨在模拟浏览器的行为。如果Cache-Control标头为“ no-cache ”,则响应将在过期时存储在缓存中,再次进行GET请求时将重新请求远程服务器;如果时间戳是将来的,并且请求是Get,那么Sampler会立即返回,而不需要从Server请求URL

  • 缓存中元素最大数量: Jmeter保存所有缓存资源在RAM。默认情况下,缓存管理器在每个虚拟用户的缓存中最多存储5000个条目。如果增加这个值,Jmeter将相应地消耗更多的内存。它会导致“OutOfMemory”异常。为了避免这种行为,你应该在jmeter.bat\sh中调整JVM-Xmx选项

缓存执行规则:

  • 无配置元件时(HTTP缓存管理器),不会缓存(与线程组设置无关)

  • 有配置元件(HTTP缓存管理器),选上清空策略时,优先取配置元件(每一次迭代会清空缓存,与线程组设置(Same user on each iteration)无关)

  • 有配置元件(HTTP缓存管理器),选择参考线程组时,看线程组设置(是否勾选 Same user on each iteration ;勾选则保留缓存;不勾选则不保存缓存信息)(分2种情况)

  • 最后一种规则与浏览器类似,检测修改时间和 Etag 变化

2.5、HTTP请求默认值

管理公用的 HTTP 请求配置数据

右键 >>> 添加 >>> 配置元件 >>> HTTP 请求默认值

在这里插入图片描述

配置线程组下所有【HTTP请求】的请求行和请求体的默认值,与【HTTP请求】放在同级目录。配置后,每个【HTTP请求】无需重复配置,特殊的请求也可以单独配置,单独配置的优先级更高

参数说明参考:8.1 HTTP请求

脚本示例:【P3】HTTP 接口设计

2.6、计数器(Counter)

在迭代过程中增加计数器,一般用于统计和模拟序列等

右键 >>> 添加 >>> 配置元件 >>> 计算器

在这里插入图片描述

  • 开始值(Starting value):给定计数器的起始值、初始值,第一次迭代时,会把该值赋给计数器

  • 递增(Increment):每次迭代后,给计数器增加的值

  • 最大值(Maximum value):达到最大值时,自动重置初始值;默认的最大值为2^63-1 Long.MAX_VALUE

  • 数字格式(Number format):可选格式,比如000,格式化为001,002…三位,不足补0;默认格式为Long.toString(),但是默认格式下,还是可以当作数字使用

  • 引用名称(Exported Variable Name):用于控制在其它元素中引用该值,比如:变量名称为 reference_name,形式:${reference_name}

  • 与每用户独立的跟踪计数器(Track Counter Independently for each User):全局的计数器,如果不勾选,即全局的,比如用户#1 获取值为1,用户#2获取值还是为1;
    如果勾选,即独立的,则每个用户有自己的值:比如用户#1 获取值为1,用户#2获取值为2。

  • 在每个线程组迭代上重置计算器(Reset counter on each Thread Group Iteration):可选,仅勾选与每用户独立的跟踪计数器时可用

脚本示例:【P7】JMeter 计数器

2.7、随机变量(Random Variable)

模拟一些随机数字变量,模拟数据

右键 >>> 添加 >>> 配置元件 >>> 随机变量(Random Variable)

在这里插入图片描述

输出变量(Output variable)

  • 变量名称(Variable Name):用于控制在其它元素中引用该值。例如:variable_name,形式:$(variable_name},必填

  • 输出格式(Output Format):要使用的java.text.DecimalFormat格式字符串。例如,“000”将生成至少3位数的数字,或“USER_000”将生成USER_nnn形式的输出。如果未指定,则默认使用Long.toString()生成数字。非必填

配置随机发生器(Configure the Random generator)

  • 最小值(Minimum Value):最小值设置。必填

  • 最大值(Maximum Value):最大值设置。必填

  • 随机种子(Seed for Random function):随机数生成器的种子。如果将每线程设置为true使用相同的种子值,则每个线程将获得与每个Random类相同的值。如果未设置种子,则将使用Random的默认构造函数。非必填

选项(Options)

  • 每线程(用户)?(Per Thread(User)?):如果为False,则生成器在线程组中的所有线程之间共享。如果为True,则每个线程都有自己的随机生成器。必填

脚本示例:【P8】JMeter 随机变量(Random Variable)

2.8、用户定义的变量(User Defined Variables)

可以新增一些用户自定义变量,通常为简单字符串类

右键 >>> 添加 >>> 配置元件 >>> 用户定义的变量

在这里插入图片描述

引用变量的格式为:${变量名}

优先级:

  • 线程组下的用户自定义变量 优先级高于 测试计划里的用户定义的变量

  • HTTP 请求下的用户自定义变量 优先级高于 线程组下的用户定义的变量

注意点:

  • 定义的所有参数的值在测试计划的执行过程中不能发生取值的改变。即使变量的值是随机数(Random),不同用户数循环多次,拿到的用户自定义变量值都是一样的

  • 一般仅将测试计划中不需要随迭代发生改变的参数(只取一次值的参数)设置在此处

脚本示例:【P9】JMeter 用户定义的变量(User Defined Variables)

2.9、Java默认请求(Java Request Defaults)

可以开发一些个 java 自定义组件;该元件结合 Java取样器,可以实现其它一些 Jmeter 原生支持不了的协议,如 redis,kafka 等

右键 >>> 添加 >>> 配置元件 >>> Java默认请求(Java Request Defaults)

在这里插入图片描述

2.10、HTTP授权管理器(HTTP Authorization Manager)

使用不同的认证方式来登陆网页;一般这种业务场景比较少,现在互联网都是通过自有的登陆来实现,并结合 HTTPS加密

右键 >>> 添加 >>> 配置元件 >>> HTTP授权管理器(HTTP Authorization Manager)

在这里插入图片描述

选项(Options)

  • 在每次迭代中清除认证?(Clear auth on each iteration?):勾选后每次请求都会清理掉之前的认证,需要重新认证

  • 使用线程组配置控制清除(Use Thread Group configuration to control clearing):线程组是否勾选 Same user on each iteration

存储在授权管理器中的授权(Authorizations Stored in the Authorization Manager)

(1)、基础URL(Base URL):需要使用认证页面的URL

(2)、用户名(Username):用于认证和登录的用户名

(3)、密码(Password):用于认证和登录的密码

(4)、域(Domain):身份认证页面的域名

(5)、Realm:Realm字串,一般不填

(6)、Mechanism:jmeter的http授权管理器提供的认证机制:

  • BASIC_DIGEST:HTTP协议并没有定义相关的安全认证方面的标准,而BASIC_DIGEST是一套基于http服务端的认证机制,保护相关资源避免被非法用户访问,如果你要访问被保护的资源,则必需要提供合法的用户名和密码。它和HTTPS没有任何关系(前者为用户认证机制,后者为信息通道加密)

  • KERBEROS:一个基于共享秘钥对称加密的安全网络认证系统,其避免了密码在网上传输,将密码作为对称加密的秘钥,通过能否解密来验证用户身份

2.11、DNS缓存管理器(DNS Cache Manager)

可以增加域名和IP的解析关系

右键 >>> 添加 >>> 配置元件 >>> DNS缓存管理器(DNS Cache Manager)

在这里插入图片描述

选项

  • 在每次迭代中清除缓存(Clear cache each iteration):如果选择此选项,则每次启动新迭代时,都会清除每个线程的DNS缓存

  • 使用系统DNS解析器(Use system DNS resolver):将使用系统DNS解析器。为了正确工作,请编辑 $ JAVA_HOME / jre / lib / security / java.security并添加networkaddress.cache.ttl = 0

  • 使用自定义DNS解析器(Use custom DNS resolver):将使用自定义DNS解析器(来自dnsjava库)

DNS服务器(DNS Servers)

  • 勾选 Use custom DNS resolver:添加配置主机名或IP地址

静态主机表(Static Host Table)

  • 勾选 Use custom DNS resolver:添加静态主机

2.12、FTP默认请求(FTP Request Defaults)

可以增加域名和IP的解析关系

右键 >>> 添加 >>> 配置元件 >>> FTP默认请求(FTP Request Defaults)

在这里插入图片描述

  • 服务器名称或IP(Server Name or IP):上传或者用来下载的服务器地址(即被测对象)

  • 端口号(Port Number):指定的FTP传输端口号

  • 远程文件(Remote File):远程FTP服务器文件路径

  • 本地文件(Local File):本地文件路径

  • 本地文件内容(Local File Contents):本地文件内容

  • get(RETR):下载文件选项

  • put(STOR):上传文件选项

  • 使用二进制模式?(Use Binary mode ?):是否以二进制方式传输(默认ASCII)

  • 保存文件响应?(Save File in Response ?):文件内容是否保存到响应中,如果选择了,且运行FTP请求成功后,我们可以再“查看结果树----响应数据”中看到内容

2.13、JDBC Connection Configuration

可以给数据源配置不同的连接池,供后续 JDBC 采样器使用;使用前请将对应的数据库驱动复制到 $JMETER_HOME/lib/ 或者 $JMETER_HOME/liblext/ 下;Jmeter 默认采用 DBCP 连接池

使用场景:该元件配置通常与 JDBC 取样器一同使用

右键 >>> 添加 >>> 配置元件 >>> JDBC Connection Configuration

在这里插入图片描述

Variable Name Bound to Pool

  • Variable Name for created pool:数据库连接池的名称,可以设置多个 jdbc connection configuration,命名不同,在 jdbc request 请求中可以通过这个名称选择对应的连接池进行使用

Connection Pool Configuration:连接池参数配置,基本保持默认就行了,可根据需要进行修改

  • Max Number of Connections:最大连接数;做性能测试时,建议填 0 ;如果填了10,则最大连接10个线程

  • Max Wait (ms):在连接池中取回连接最大等待时间,单位毫秒;连接时超过最大等待时间,则连接失败

  • Time Between Eviction Runs (ms):线程可空闲时间,单位毫秒;如果当前连接池中某个连接在空闲了 Time Between Eviction Runs Millis 时间后任然没有使用,则被物理性的关闭掉

  • Auto Commit:自动提交 sql 语句,如:修改数据库时,自动 commit

  • Transaction Isolation:事务隔离级别(一般默认即可)

  • Pool Prepared Statements:

  • Preinit Pool:立即初始化连接池;如果为 False,则第一个 JDBC 请求的响应时间会较长,因为包含了连接池建立的时间

  • :数据库初始化参数,连接执行时执行,只执行一次

Connection Validation by Pool:验证连接池是否可响应

  • Test While Idle:当连接空闲时是否断开

  • Soft Min Evictable Idle Time(ms):连接在池中处于空闲状态的最短时间

  • Validation Query:一个简单的查询,用于确定数据库是否仍在响应;默认为 jdbc 驱动程序的 isValid() 方法,适用于许多数据库(Test While Idle 需配置为 True)

Database Connection Configuration:数据库连接配置

  • Database URL:数据库连接 URL(格式:jdbc:mysql://IP:端口号/数据库名称);如 consult-service 服务连接池:jdbc:mysql://{ip}:{port}/{dbname}
    ?allowMultiQueries=true&characterEncoding=utf8。添加 ?allowMultiQueries=true,是为了能够一次执行多条语句

  • JDBC Driver class:数据库驱动(选择对应的数据库驱动)

数据库 驱动 URL
MySQL com.mysql.jdbc.Driver jdbc:mysql://host:port/{dbname}
PostgreSQL org.postgresql.Driver jdbc:postgresql:{dbname}
Oracle oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:user/pass@//host:port/service
sqlServer com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://host:port;databaseName=databaseName
  • Username:数据库登录用户名

  • Password:数据库登录密码

  • Connection Properties:建立连接时要设置的连接属性

2.14、总结

2.13.1、Jmeter 变量作用域和规则

(1)、前一个组件定义的变量,在后续所有组件的执行过程中有效

  • 例如在取样器 JSR223 Sampler中定义一个变量:vars.put(“var”,“我是变量”),在后续组件中都可以引用

(2)、变量分为线程变量、线程组变量、全局共享变量

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

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

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

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

(3)、变量的定义尽量往外层放置,最好不要放置在业务逻辑中,理解起来比较反常(动态变量(设置一些后置处理器)除外)

2.13.2、配置元件使用小结
配置元件 使用频率 使用场景
CSV 配置元件 非常高 针对某一个变量能够加载大量数据,多用于复杂业务条件的构造
HTTP 请求默认值 非常高 用于 http 取样器
HTTP 头部管理器 非常高 用于 http 取样器
HTTP Cookie管理 用于 http 取样器
HTTP 缓存管理 一般 用于 http 取样器
Counter 计数器 计数统计,序列等场景
Random 随机变量 一般 构建业务条件
自定义变量 非常高 处理少量数据,将脚本进行参数化

三、监听器

监听器主要为 Jmeter 持续大量的取样结果提供分析机制,比如查看、统计、汇总、分析取样结果,进而用来分析性能结果

执行顺序:

(1)、配置元件优先执行(非控制器内),用户自定义配置元件优先执行(无论是否在控制器内)

(2)、按深度优先算法,依次寻找取样器,找到取样器后,逐个执行,遵循第3条规则

(3)、执行总体顺序:控制器(父类)-> 配置元件(控制器内)-> 前置处理器 -> 定时器 -> 取样器 -> 后置处理器 -> 断言器 -> 监听器

(4)、监听器不可以添加子元素

(5)、同一个取样器有多个监听组件时,在范围内按照广度优先策略依次执行

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹿快跑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值