每周读书与学习->JMeter主要元件详细介绍(一)配置元件

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。

在前面的学习中,我们已经讲到在Jmeter中配置元件主要用于完成性能测试中一些常见配置信息的配置,在前面的章节学习中,大家或许已经对配置元件的使用和作用有了一个初步的了解,在本章节学习中,我们将对一些常见的配置元件进行详细的介绍。

1、配置元件

1.1.CSV数据文件设置

如下图所示,CSV 数据文件设置这个配置元件是Jmeter中用的最多的配置元件之一,CSV 数据文件设置通常可以用于Jmeter多线程并发用户的参数化设置,我们都知道,做性能测试时,通常需要模拟大量的不同的用户操作,而不是使用同一个用户在进行持续的并发操作,因为这并不符合真实的用户场景。不同的用户会有不同的用户属性,比如肯定会有不同的用户名、密码等信息,而这些不同的用户属性就需要通过参数化的形式设置给多线程下的每一个并发用户。

从图中可以看到,CSV数据文件设置的界面中主要包括如下内容:

  • 文件名:设置需要读取的CSV文件名称,通常建议包含完整的文件路径,当然也可以使用相对路径,相对路径通常是根据当前Jmeter测试计划所保存的路径来进行相对路径的解析,由于Jmeter支持分布式性能压测,当使用分布式性能压测时CSV文件必须存储在服务器主机系统上与JMeter服务器启动位置相对的正确目录中。
  • 文件编码:设置打开CSV文件的编码方式。
  • 变量名称:设置从CSV文件中读取出来的数据需要保存的变量,多个变量之间通过指定的分隔符进行分割,如下图所示的CSV文件中,可以看到其包含了两列数据,因此可以保存成两个变量,一个变量用于存储用户名,比如叫user,一个变量用于存储密码,比如叫password,在后续的Jmeter性能测试脚本中,就可以通过{user}和{password}来引用这两个变量了。
  • 忽略首行:设置是否忽略首行,通常CSV文件都会有一个类似Excel文件一样的表头,用来标注每一列数据的含义,由于表头数据通常需要忽略,所以这里设置时允许用户是否忽略CSV文件数据中的首航。
  • 分隔符:用于设置CSV文件中的每列数据之间通过哪个分隔符来进行分割,下图中的CSV文件数据就是通过逗号来分割的,因此假如时类似下图所示的文件格式,这里就应该设置为逗号。
  • 是否允许带引号:用于设置是否允许使用带引号的数据值,默认为False。
  • 遇到文件结束符再次循环:用于设置遇到文件结束符是否再次重新从头读取CSV文件中的数据,通常遇到文件结束符代表了文件已经读取到了最后一行了,默认为True。
  • 遇到文件结束符停止线程:用于设置遇到文件结束符时,直接停止线程,代表所有的并发用户的变量数据已经读取完毕,无法读取到新的变量数据,所以线程直接停止。
  • 线程共享模式:用于设置多个线程用户之间的CSV文件数据的共享模式,默认为所有线程都共享,代表CSV数据文件只打开一次,然后每个线程按照顺序轮流读取里面的数据。其他的共享模式包括:当前线程组共享(当有多个线程组时,每个线程组都会打开一个CSV数据文件,也就是每个线程组之间的变量数据是隔离的)、当前线程共享(每个线程都会单独打开一个CSV文件数据,每个线程之间的数据都是互相隔离的)、标识符共享(同一标识符的所有线程打开一个CSV文件数据)。

1.2.HTTP Cookie管理器

在前面的章节学习中,我们已经有对HTTP Cookie管理器做过了一些初步的介绍,由于HTTP请求是最常见的一种客户端和服务端的请求交互模式,也是性能测试中性能压测频率最高的一种请求服务,所以在这里再详细介绍一下HTTP Cookie管理器的使用,因为HTTP请求中经常需要对Cookie进行管理以达到最真实的模拟用户操作的效果。HTTP Cookie管理器有如下两个作用:

  • 会像浏览器一样存储和发送Cookie,比如一个HTTP请求,并且响应结果中包含了一个Cookie,Cookie管理器会自动存储该Cookie,并将其用于后续对该特定网址的所有请求,而且接收到的Cookie还可以存储为Jmeter的线程变量,如果要将Cookie保存为变量,请先修改Jmeter的自定义属性CookieManager.save.cookie=true,然后通过${cookie_}来进行引用。在Jmeter中,每个线程通常都会有自己独立的Cookie存储区,也就是说,每个线程之间的会话都是独立的,互相不会存在干扰,也就是和实际的用户场景一样,Jmeter 多线程模拟的效果也是每个用户拥有自己独立的会话和Cookie。另外Jmeter还会自动检查接收到的Cookie是否对当前待测试的URL是有效的,这就意味着Jmeter不会存储跨域请求的Cookie,当然如果需要使用跨域的Cookie,可以设置Jmeter的属性配置CookieManager.check.cookie=false,这样Jmeter 就不会自动检查跨域请求了。
  • 如下图示,支持手动将Cookie添加到cookie管理器中,如果做了这样的设置那就表示该Cookie将会在所有的并发线程用户中进行共享使用。在默认情况下,具有空值的Cookie会被默认被忽略,但是可以通过设置Meter属性CookieManager.delete_null_cookies=false来进行更改,另外手动设置时,cookie名称必须是唯一的,如果第二个Cookie被设置为相同的名称,那么将会自动替换第一个Cookie。

1.3.HTTP 信息头管理器

HTTP 信息头管理器通常用于管理和设置HTTP请求的请求头,请求头是HTTP请求的一部分,如下图所示。

常见的HTTP请求头包含如下:

  • Cache-Control:通常用于控制请求的缓存时长,当在时长范围内时,直接从缓存中获取数据,通常可以设置的值包括no-cache、no-store、no-transform、max-age=具体时长等。
  • Connection:用于控制HTTP请求连接的方式,比如可以设置为keep-alive表示保持当前的连接为活动状态,让当前连接可以复用。
  • Date:表示请求发出的日期和时间。
  • Pragma:用于在HTTP请求中传递指定的指令,通常在HTTP 1.0版本的协议中经常被使用到,比如填入no-cache时就表示不适用缓存。
  • Trailer:用于表示在分块传输编码中包含的额外头域。
  • Transfer-Encoding:用于表示请求传输的编码方式,比如chunked表示分块传输编码。
  • Upgrade:用于表示客户端和服务器协商切换到不同的协议类型,以便在同一个 TCP 连接上进行通信,比如填入websocket表示客户端希望将该 HTTP 连接升级为 WebSocket 连接。
  • Accept:用于表示客户端可以接受的MIME类型,比如设置为text/html, application/json表示客户端可以接受的类型为HTML和JSON格式的数据。
  • Accept-Charset:用于表示客户端可以接受的字符集编码,比如设置为utf-8表示客户端可以接受UTF-8编码的数据。
  • Accept-Encoding:用于表示客户端可以接受的编码类型,比如设置为gzip表示客户端可以接受gzip压缩格式的数据。
  • Accept-Language:用于表示客户端可以接受的语言类型,比如设置为en-US表示客户端可以接受美国英语。
  • Authorization:用于表示客户端向服务端提供的身份验证信息,比如设置为Basic xxxxxxx表示使用基本身份验证。
  • Cookie:用于设置客户端向服务端请求时的Cookie信息,服务端会验证Cookie是否正确或者失效,如果Cookie不正确,可能会提示需要重新登录等。
  • From:用于表示客户端请求的电子邮件地址。
  • Host:用于表示客户端请求的目标服务器地址。
  • Referer:用于表示客户端当前请求的来源页面地址。
  • User-Agent:用于描述客户端的信息,比如浏览器类型和版本以及操作系统类型等。

2、本次学习总结

  • 配置元件中的CSV 数据文件设置、HTTP Cookie管理器、HTTP 信息头管理器的高阶使用方式。

读者们需要能完成一些更加复杂的Jmeter性能测试脚本的编写,因为在性能测试时,有时候会遇到一些逻辑很复杂的业务需求,这时候可能就会需要用到函数助手或者逻辑控制器来完成这些复杂的性能测试场景。

出处 :本次学习的内容参考自清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛2 天前
计算机系统概论——校验码
学习
babe小鑫2 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms2 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下2 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。2 天前
2026.2.25监控学习
学习
im_AMBER2 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J2 天前
从“Hello World“ 开始 C++
c语言·c++·学习