Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程)

2023-10-26

1.简介

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

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

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386     

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a 

如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于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、常用请求头,这些一般可以抓包和在浏览器中查到,如下表所示:

图片

2.3HTTP Cookie Manager

主要有两个功能:

一个功能是:像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)列下的字符串,以便以后使用变量。然后,整个$ {...}将由“值”列中的字符串替换

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程) 的相关文章

  • 如何在Python中使用tcp套接字发送和接收网络摄像头流?

    我正在尝试重新创建这个项目 https github com hamuchiwa AutoRCCar 我拥有的是服务器 我的电脑 和客户端 我的树莓派 我所做的与原始项目不同的是我尝试使用一个简单的网络摄像头而不是树莓派摄像头将图像从我的
  • Python requests_toolbelt MultipartEncoder 文件名

    使用 requests toolbelt 以多部分形式上传大文件 我构建了一个方法 可以成功上传文件 但是我无法访问发布的文件名 如何访问服务器上的文件名 client side file open Volumes Extra test m
  • 了解 Beautiful Soup 中的 Find() 函数

    我知道我想做的事情很简单 但这让我感到悲伤 我想使用 BeautifulSoup 从 HTML 中提取数据 为此 我需要正确使用 find 功能 这是我正在使用的 HTML div class audit div class profile
  • 如何使用Python3将ruamel.yaml转换为dict?

    我想要一个dict or OrderedDict from ruamel yaml 我正在使用 Python 3 8 如果有帮助的话 很乐意切换到 3 9 from ruamel yaml import YAML from collecti
  • 在 Kivy 应用程序中获取文本输入值

    Python Kivy 新手尝试构建一个测试应用程序 其中包含输入框 确定按钮和单击确定按钮时应更改文本的标签 但我得到了 NameError 全局名称 txt1 未定义 我究竟做错了什么 import Kivy import kivy i
  • 无法从同一项目的 bin 目录导入模块

    我正在构建一个库 该库将通过 pip 包含在其他项目中 我有以下目录 venv 是 virtualenv project bin run py myproj init py logger py venv 我激活虚拟环境 在 bin run
  • Keras AttributeError:“顺序”对象没有属性“predict_classes”

    我试图按照本指南找到模型性能指标 F1 分数 准确性 召回率 https machinelearningmastery com how to calculate precision recall f1 and more for deep l
  • 如何在Python中打印出字母表中的第n个字母?

    ASCII 数学似乎在 Python 中不起作用 一 5 不起作用 如果没有字母数组 如何快速打印出字母表中的第 n 个字母 我天真的解决方案是这样的 letters A B C D E F G H I J K L M N O P Q R
  • 登录 python + mod_wsgi 应用程序

    我在 apache 服务器上部署了一个 python Flask 应用程序 这是我的abc conf file WSGIDaemonProcess voting app threads 5 WSGIScriptAlias election
  • 冻结(.exe)一个traitsUI程序,现实可行吗?

    我正在尝试使用 cx freeze 或 pyInstaller 冻结一个 TraitsUI 程序 该程序利用 Chaco Traits TraitsUI 以及较小程度的 mayavi 实际上可以取出 我需要它在 mac linux ubun
  • Python 2to3 Windows CMD

    我已经安装了 python 32 包到 C python32 我还设置了路径 Python 路径 C Python32 Lib C Python32 DLLs C Python32 Lib lib tk 路径 C Python32 我想使用
  • 使用多索引列对多列求和

    我有一个从数据透视表创建的数据框 看起来类似于 import pandas as pd d company1 False Negative April 2012 112 0 April 2013 370 0 April 2014 499 0
  • 如何在 Django 中创建多选框?

    我正在尝试创建多选框字段来自姜戈选择 2 https github com applegrew django select2库如下图所示 我使用了下一个代码 但它返回简单的选择多个小部件 我想我忘了补充一些东西 我的错误在哪里 有人可以告诉
  • 如何在这个可嵌套的 For 循环中实现 Robot Framework 风格的变量?

    我在 Robot Framework 中见过很多 嵌套 For 循环 主要是创建一个内部带有 For 循环的关键字 然后在另一个 For 循环中调用该关键字 我使用 Python 2 7 13 制作了一个可嵌套的 For 循环 但因为它主要
  • matplotlib 轴标签偏移量的因素和变化

    在 matplotlib 中的轴刻度标签上 有两种可能的偏移量 factors and shifts 在右下角 1e 8 是一个 因子 1 441249698e1 是一个 移位 这里有很多答案展示了如何操纵两个都 matplotlib 将轴
  • 返回 OSError 异常类的子类实例的逻辑在哪里?

    我一直在寻找一些对某些人来说可能相对愚蠢的东西 但对我来说非常有趣 输入和输出错误已合并为OSError在 Python 3 3 中 异常类层次结构发生了变化 关于内置类的一个有趣的特性OSError是这样 它在传递时返回它的子类errno
  • 第 100 次避免循环导入

    Summary 我继续有一个ImportError在一个复杂的项目中 我已经将其蒸馏到仍然会出现错误的最低限度 Example 巫师有装有绿色和棕色药水的容器 这些可以添加在一起 产生同样是绿色或棕色的新药水 我们有一个PotionABC
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • 使用 PyODBC 选择表中的列名

    我正在编写一个 Python 程序 该程序使用 PyODBC 从 Microsoft Access mdb 文件中选择一些数据 我需要发现几个不同表的列名 在 SQL Server 中 这可以通过使用类似的查询来完成 SELECT c na
  • 如何使用 np.newaxis?

    What is numpy newaxis https numpy org doc stable reference constants html numpy newaxis我什么时候应该使用它 在一维数组上使用它x产生 gt gt gt

随机推荐