性能测试工具 🔥Jmeter(八) - 从入门到精通 - JMeter 配置元件(详解教程)

北京-宏哥 · February 26, 2025 · Last by PimLee replied at February 26, 2025 · 2629 hits

1.简介

JMeter 配置元件可以用来初始化默认值和变量,读取文件数据,设置公共请求参数,赋予变量值等,以便后续采样器使用。将在其作用域的初始化阶段处理。配置元件(Config Element)提供对静态数据配置的支持,可以为取样器设置默认值和变量。

首先我们来看一下 JMeter 的配置元件,路径:添加 - 配置元件;我们可以清楚地看到 JMeter5 中共有 19 个配置元件,如下图所示:

如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于 JMeter5 的配置元件类型,如下图所示:

通过以上的了解,我们对配置元件有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的配置元件。

2.常用配置元件详解

  这一小节,宏哥就由上而下地详细地讲解一下常用的配置元件。

2.1CSV Data Set Config

1、我们先来看看这个 CSV Data Set Config 长得是啥样子,如下图所示:

2、参数详解及说明,如下表所示:

参 数 描 述 是否必填
Name 脚本中显示的这个元件的描述性名称
Filename 待读取文件的名称。可以写入绝对路径,也可以写入相对路径(相对于 bin 目录),如果直接写文件名,则该文件要放在 bin 目录中。对于分布式测试,主机和远程机中相应目录下应该有相同的 CSV 文件
File Encoding 文件读取时的编码格式,不填则使用操作系统的编码格式
Ignore first line 是否忽略首行,如果 csv 文件中没有表头,则选择 false
Variable Names 变量名列表,多个变量名之间必须用分隔符分隔。如果该项为空,则文件首行会被读取并解析为列名列表
Delimiter 参数分隔符,将一行数据分隔成多个变量,默认为逗号,也可以使用 “\t”。如果一行数据分隔后的值比 Vairable Names 中定义的变量少,这些变量将保留以前的值(如果有值的话)
Allow quoted data? 是否允许变量使用双引号,允许的话,变量将可以括在双引号内,并且这些变量名可以包含分隔符
Recycle on EOF? 是否循环读取 csv 文件内容,达到文件结尾后,是否从文件开始循环重新读取;默认为 true
Stop thread on EOF? 是否循环读取 csv 文件内容,达到文件结尾后,线程是否该终止;默认为 true
Recycle on EOF? 当 Recycle on EOF 为 False 时,停止线程,当 Recycle on EOF 为 True 时,此项无意义,默认为 false
Sharing mode 1、 All threads(默认) :一个线程组内,各个线程(用户)唯一顺序取值;2、 current thread :一个线程组内,各个线程(用户)各自顺序取值;3、线程组各自独立,但每个线程组内各个线程(用户)唯一顺序取值;

3、Recycle on EOF 和 Stop thread on EOF 的关系:

当 Recycle on EOF 选择 true 时,Stop thread on EOF 选择 true 和 false 无任何意义,因为既然前面已经设置了文件是不停的循环读取,后面的控制 stop 就相当于失效;
当 Recycle on EOF 选择 false 时,Stop thread on EOF 选择 true,则当线程数超过文件里的参数的个数时,实际请求数为参数的个数;
当 Recycle on EOF 选择 false 时,Stop thread on EOF 选择 flase,当线程数超过文件里参数的个数时,实际请求次数为线程数,但当线程数超过参数次数时,由于没有参数,所以结果仍然是失败的。
4、Sharing mode:如果希望每个线程拥有自己独立的值集合,那么就需要创建一系列数据文件,为每个线程准备一个数据文件,如 test1.csv、test2.csv 等,使用文件名 test${__threadNum}.csv,并将 “sharing mode"设置为"Current thread"

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

Identifier:所有线程共享相同的标识,共享相同的文件。如有4个线程组,测试人员可以使用一个通用ID,以便在两个或多个线程组之间共享文件。

Current thread:每个文件会针对每个线程单独打开。

Current thread group:每个文件会针对每个线程组打开一次。

2.2HTTP Header Manager

支持用户添加或者重写 HTTP 请求头。JMeter 支持多个信息头管理器。多个信息头条目合并成一个信息头列表,跟随 http 请求一并提交到服务端。

注意:敲黑板,敲脑壳!!!

(1)当有多个信息头管理器,且不同的管理器内有名称相同的信息头条目存在时,顺序靠前的管理器的信息头条目会覆盖后面的;

(2)当只有一个信息头管理器,但管理器内有名称相同的信息头条目时,会同时生效;

1、我们先来看看这个 HTTP Header Manager 长得是啥样子,如下图所示:

2、参数详解及说明,如下表所示:

参数 描述 是否必填
Name 请求头的名称,比如 Content-Type
Value 请求头的值,比如 application/json

3、常用请求头,这些一般可以抓包和在浏览器中查到,如下表所示:

主要有两个功能:

一个功能是:像 web 浏览器一样存储和发送 Cookie。如果有一个 HTTP 请求和相应里包含 Cookie,Cookie 管理器会自动存储 Cookie,那么接下来针对特定 web 站点的所有请求中使用该 Cookie。可在结果树中查看。

接收到的 Cookie 可以被保存为变量,须定义属性"CookieManager.save.cookie=true"。另外,在被存储前 Cookie 名称会加上前缀 “COOKIE_",要恢复早前处理方式,则定义属性” CookieManager.name.prefix="(一个或多个空格)。

如果启动了该功能,那么名称为 TEST 的 Cookie,可以通过 ${COOKIE_TEST}加以引用。手动为 Cookie 管理器添加一个 Cookie(为所有 JMeter 线程所共享)。

1、我们先来看看这个 HTTP Cookie Manager 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示此元件描述的名称
Comments 注释
Clear cookie each Iteration 每次线程组运行前,都会清楚 cookie,但是如果是手动添加的 cookie,不会被清除
Cookie Policy 选择 Cookie 的管理策略,建议选择兼容性,兼容性强
User Define cookie 用户自定义 cookie

2.4HTTP Cache Manager

  被用来为其作用域内的 HTTP 请求提供缓存功能,如果 “Use Cache-Control/Expires header When ..."选中,那么会根据当前时间来选择,如果请求是” GET",而时间指向未来,那么采样器就会立即返回,而无须从远程服务器请求 URL,这样是为了模拟浏览器的操作,请注意 Cache-Control 头必须是 “pulic” 的,并且只有"max-age"终结选项会被处理,如果请求文档自从其被缓存以来没有发生任何改变,那么响应包体就会为空。

1、我们先来看看这个 HTTP Cache Manager 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示此元件的描述性名称
Comments 注释
Clear Cache each iteration 如果选择此选项,则在线程开始时清除缓存。
Use Cache 如果选择此选项,则在线程开始时使用缓存。
Max Number 如果选择此选项,则在线程开始时最大缓存。

2.5HTTP Request Defaults

在实际测试计划中,我们经常会碰到 Http Sampler 请求有较多的参数与配置会重复,每一个 Http Sampler 都单独设置的话比较浪费时间和精力,为了节省工作量,JMeter 提供了 HTTP Request Defaults 元件,用来把这些重复的部分封装起来,一次设置多次使用。可以设定一些缺省值,假设有 10 个请求,访问域名和端口都是一样的,那 HTTP 请求中就不再需要单独配置了,比较方便(增加脚本的移植性)。

这个元件可以设置 HTTP 请求控制器使用的默认值。例如,图中【服务器名称或 IP】项目内填入了【example.com】,后面的 HTTP 请求如果 IP 也是 example.com 的话,那么只要将【服务器名称或 IP】留空,那么这个字段将自动继承 HTTP 请求默认值中的值。其他诸如【协议】、【端口号】、【路径】等同此。

1、我们先来看看这个 HTTP Request Defaults 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 用作标识一个取样器,建议使用一个见名知义的名称
Comments 注释
Protocol 协议,向目标服务器发送 HTTP 请求时的协议,可以是 http 或者是 Https
IP HTTP 请求发送的目标服务器名称或者 IP 地址
Port Number 目标服务器端口
Path 目标 URL 路径(不包括服务器地址和端口)
Content encdoing 内容的编码方式
Parameter 参数
body data 参数

2.6Counter

计数器,顾名思义就是在测试执行过程中会记录迭代次数。可以在线程组任何位置创建,允许用户配置起点、最大值和增量。配置后,计数器将从起点循环到最大值,然后重新开始,直到线程结束。允许用户创建一个计数器,可在线程组中任何地方被引用。

1、我们先来看看这个 Counter 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 控制器名称,可以随意设置
Comments 注释,可以随意设置
Starting value 启动,记录数量起始值
Increment 递增,记录迭代次数步长,1 后是 2,步长就是 1
Maximum value 记录的最大值
Number format 计算器格式,可以是数字,例如 000000(6 位长度,000,000(6 位长度,3 位间隔开);字符加数字,例如 CUST_000000(字符加 6 位数字 )
Exported Variable Name 引用变量名称,记数器记录的值可以存入的此引用名(变量),可供其他元件调用
Track counter independently for each user 与每位用户独立的跟踪计数器,每个线程都有自己的计数器,相互不干扰
Reset counter on each Thread Group Iteration 每次迭代复原计数器

2.7DNS Cache Manager

1、我们先来看看这个 DNS Cache Manager 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示此元件的描述性名称
Comments 注释
Clear cache each iter 清除每个迭代的缓存,如果选择此选项,则每次启动新迭代时,都会清除每个线程的 DNS 缓存。
Use System DNS resolver 使用系统 DNS 解析器;将使用系统 DNS 解析器。为了正确工作,请编辑 $ JAVA_HOME / jre / lib / security / java.security 并添加 networkaddress.cache.ttl = 0
Use custom DNS resolver 使用自定义 DNS 解析器;将使用自定义 DNS 解析器(来自 dnsjava 库)。

2.8FTP Request Defaults

被用于设置 FTP 请求的默认值

1、我们先来看看这个 FTP Request Defaults 长得是啥样子,如下图所示:

2.9HTTP Authorization Manager

HTTP 认证是一种安全机制,在客户端、浏览器或者程序向服务器发起请求时,需要提供用户名和密码且验证通过(拿到凭证)才能继续发起交互。

1、我们先来看看这个 HTTP Authorization Manager 长得是啥样子,如下图所示:

2.10JDBC Connection Configuration

1、我们先来看看这个 JDBC Connection COnfiguration 长得是啥样子,如下图所示:

2、关于 JDBC Connection COnfiguration 参数详细说明,可以参考宏哥的另一篇文章是非常详细的:传送门

2.11Java Request Defaults

1、我们先来看看这个 Java Request Defaults 长得是啥样子,如下图所示:

2.12Keystore Configuration

1、我们先来看看这个 Keystore Configuration 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示此元件的描述性名称。可以默认
Comments 注释
Preload 预载,是否预加载秘钥库,设置为 true 通常是最佳选择
Variable name holding certificate alias 变量名称,将包含用于客户端证书身份验证的别名。例如,将从 CSV 数据集中填充变量值。在屏幕截图中,“ certificat_ssl” 也将是 CSV 数据集中的变量。
Alias Start index 从 0 开始在 Keystore 中使用的第一个键的索引。
Alias End index 基于 0 的密钥库中要使用的最后一个密钥的索引。使用 “变量名称持有证书别名” 时,请确保其足够大,以便在启动时加载所有密钥。

2.13LDAP Extended Request Defaults

1、我们先来看看这个 LDAP Extended Request Defaults 长得是啥样子,如下图所示:

2.14LDAP Request Defaults

1、我们先来看看这个 LDAP Request Defaults 长得是啥样子,如下图所示:

2.15Login Config Element

1、我们先来看看这个 Login Config Element 长得是啥样子,如下图所示:

2.16Random Variable

1、我们先来看看这个 Random Variable 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示的此元件的描述性名称。
Comments 注释
Variable Name 变量名,存储随机字符串的变量的名称。
Output Format 格式化字符串,要使用的 java.text.DecimalFormat 格式字符串。例如,“ 000” 将生成至少 3 位数字,或者 “ USER_000” 将生成 USER_nnn 形式的输出。如果未指定,则默认为使用 Long.toString()生成数字。
Minimum Value 最小值;生成的随机数的最小值(长整数)。
Maximum Value 最大值;生成的随机数的最大值(长整数)。
Seed for Random function 随机种子,随机数生成器的种子。默认值为当前时间,以毫秒为单位。如果在 “将每个线程” 设置为 true 的情况下使用相同的种子值,则与 “随机” 类一样,您将为 earch 线程获得相同的值
Per Thread(User)? 每个线程,如果为 False,则在线程组中的所有线程之间共享生成器。如果为 True,则每个线程都有自己的随机生成器。

2.17Simple Config Element

1、我们先来看看这个 Simple Config Element 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示此元件的描述名称
Comments 注释
Name 参数名称
Value 参数值

2.18TCP Sampler Config

TCP 采样器配置为 TCP 采样器提供默认数据

1、我们先来看看这个 TCP Sampler Config 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示此元件的描述性名称
Comments 注释
TCPClient classname TCPClient 类的名称,默认属性 tcp.handler,使 TCPClientImpl 失败
Sever Name or IP TCP 服务器的名称或者 IP
Port Number 使用的端口
Re-use connection 重用连接,如果选择,则连接保持打开状态,否则,在读取数据后将其关闭
Close connection 关闭连接,如果选择此项,则在运行采样器后将连接关闭
Set NoDelay 设置节点布局,应该设置 nodelay
SO_LINGER 创建套接字时,以指定的延迟时间(以秒为单位)启用/禁用 SO_LINGER。如果将 “SO_LINGER"值设置为 0,则则可以防止大量套接字处于 TIME_WAT 的状态
End of line byte value 判断行结束的 byte 值,如果你指定的值大于 127 或者小于-128,则会跳过 EOL 检测。比如服务器端返回的字符串都是以回车符结尾,那么我们可以将该选项设置成 10。
Text to send 文字发送,要发送的文字
Connect 连接超时(毫秒。0 禁用)
Response 响应超时(毫秒。0 禁用)

2.19User Defined Variables

如果您有多个线程组,请确保对不同的值使用不同的名称,因为 UDV 在线程组之间共享。同样,这些变量在处理完元素之后才可用,因此您不能引用在同一元素中定义的变量。您可以引用在早期 UDV 或测试计划中定义的变量。

1、我们先来看看这个 User Defined Variable 长得是啥样子,如下图所示:

2、参数详细说明,如下表所示:

参数 描述 是否必填
Name 树中显示此元件描述的名称
Comments 注释
User Define Variables 用户定义的变量。变量名称/值对。您需要在 $ {...}结构的方括号内放置 “名称”(Name)列下的字符串,以便以后使用变量。然后,整个 $ {...}将由 “值” 列中的字符串替换

3.小结

好了,今天关于 JMeter 的配置元件就分享到这里,其中有些常用的要熟练掌握。

共收到 1 条回复 时间 点赞
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up