目录
[2.1 线程组](#2.1 线程组)
[2.2 HTTP取样器](#2.2 HTTP取样器)
[2.3 查看结果树](#2.3 查看结果树)
[2.4 HTTP Cookie管理器](#2.4 HTTP Cookie管理器)
[2.5 HTTP请求默认值](#2.5 HTTP请求默认值)
[2.6 用户定义的变量](#2.6 用户定义的变量)
[2.7 CSV数据文件设置](#2.7 CSV数据文件设置)
[2.8 JSON提取器](#2.8 JSON提取器)
[2.9 JSON断言](#2.9 JSON断言)
[2.10 同步定时器(集合点)](#2.10 同步定时器(集合点))
[2.11 事务控制器](#2.11 事务控制器)
一、JMeter介绍
JMeter用于对软件进行性能测试的工具,具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA等多种协议的特点
JMeter的工作原理

安装Jmeter
下载链接:Apache JMeter - Download Apache JMeter
需要注意,下载前需要有java 8以及以上版本
打开JMeter
方式一:点击bat文件

方式二:命令行启动
1、添加JMeter系统环境变量

2、保存后打开命令行工具

输入命令jmeter即可启动JMeter工具
基础配置
在jmeter.properties文件中输入下面两行命令
language=zh_CN #修改字体为中文
sampleresult.default.encoding=utf-8 #修改编码为UTF8
使用JMeter基本流程
1)启动JMeter
2)在"测试计划"下添加"线程组"


3)在"线程组"下添加"HTTP"取样器

4)填写"HTTP请求"的相关请求数据

5)在"线程组"下添加"查看结果树"监听器
6)点击"启动"按钮运行,查看接口测试结果

JMeter元件作用域和执行顺序
在JMeter中,元件的作用域和执行顺序是非常重要的概念。
作用域: JMeter元件的作用域主要由测试计划的树形结构中的元件父子关系来确定。
执行顺序:
取样器(sampler)元件内组件不依赖其他元件就可执行,因此取样器不存在作用问题
元件作用域只对它的子节点有作用, 其他作用域默认根据测试计划中树形结构来定;
二、重点组件
2.1 线程组
控制JMeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户

线程数:一个线程即一个测试用户,设置发送的请求次数
Ramp-up时间(秒):设置性能测试运行时间,单位为秒
循环次数:
配置指定次数:控制脚本循环执行的次数
配属循环永远
需求调度器配置使用
运行时间:脚本执行时间
延迟启动时间:脚本等待指定时间才能运行
2.2 HTTP取样器

添加必需的配置
http协议
http主机名/IP
端口
◦ http协议端口号80
◦ https端口号443
请求方式
路径(目录+参数)
内容编码(默认的ISO国际标准,但对中文支持不友好,可以使用utf-8)
参数
◦ 参数可以拼在路径里,也可以卸载参数中
◦ POST参数要放到消息体数据中{wd:test}
2.3 查看结果树

取样器结果:统计请求相关的信息
Thread Name:线程组名称
Sample time:发送请求时间
load time:响应时间
Response code :接口响应状态码
请求:HTTP请求的请求头和请求体的详细信息
响应:HTTP响应的响应头和响应体的详细信息
2.4 HTTP Cookie管理器


HTTP Cookie管理器像Web浏览器⼀样存储和发送Cookie。如果HTTP请求并且响应包含cookie,则 Cookie管理器会自动存储该cookie,并将其用于将来对该特定网站的所有请求。每个JMeter线程都有自动的"cookie存储区"。因此,正在测试使用cookie存储会话信息的网站,则每个JMeter线程都将拥 有自动的会话。此类Cookie不会显示在Cookie管理器显示屏上,可以使用"查看结果树监听器"查看。缓存配置可选择standard(标准)或compatibility(兼容的),当然也可以手工添加一些cookie.
添加HTTP Cookie管理器后,会自动存储并发送Cookie

2.5 HTTP请求默认值


博客中涉及到的接口协议、IP、端口号全都一样,可以单独抽取出来存放在默认值中,其他接口就可以省略不写协议、IP、端口号

2.6 用户定义的变量
添加方式:线程组------配置元件------用户定义的变量

有时我们只想要在固定的场景里使用参数化,改动后不希望影响到其他的脚本。
使用:在HTTP请求的取样器中引入定义的变量。${参数名}

适用场景:变量需要在多个脚本中使用,方便统一管理和修改
2.7 CSV数据文件设置
以登陆接口为例,当我们执行登陆接口的性能测试时,手动配置了用户名和密码为固定的username和 password,然而实际使用中不可能只有一个用户登陆,为了模拟更真实的登录环境,我们需要提供更多的用户username和password来实现登录操作
添加方式:线程组------配置元件------CSV数据文件设置

操作步骤
1)CSV数据文件设置

- 文件名:填写csv文件的路径。建议使用绝对路径。
- 文件编码:UTF-8
- 变量名称:从csv数据文件中读起的数据需要保存到的变量名。有多个变量时用逗号分隔
- 是否忽略首行:是否从csv数据文件第一行开始读取。
- 分隔符:要求与csv数据文件中多列的分隔符一致
- 遇到文件结束符再次循环:若选择为True当数据不够的时候会从头取。若选择False,则需要勾选下面的配置,遇到文件结束符停止线程,这里如果不勾选,请求将会报错。
2)编写test.csv文件,示例:

3)修改登陆接口及其他涉及到username和password获取的参数

修改完该配置后,登陆接口发起请求时将从csv文件中获取配置好的username和password参数,获取顺序为从上往下依次获取
4)修改线程组中线程数,使得每次取到的username和password都不一样

5)运行结果

2.8 JSON提取器
接口响应成功,通过提取返回值对应字段,可用于其他接口的参数配置
1)添加JSON提取器

针对某一个HTTP请求接口添加JSON提取器
案例:以博客首页为例
{ "postTime": "2024-04-18 05:20:16", "title": "ddddd", "blogId": 13, "userId": 3, "content": "# 在这里写下⼀篇博客\\r\\ndddd" }, { "postTime": "2022-10-22 02:38:21", "title": "同学,请问你今天学习了吗", "blogId": 12, "userId": 3, "content": "今天是2022年10⽉22⽇17:42分,为了能够早⽇将最新版本的测试课件呈现 给同学们,我已经开始奋..." }
JSON操作符参考:
| Operator | Description |
|---|---|
| $ | 表示根元素 |
| @ | 当前元素 |
| * | 通配符。所有节点 |
| .. | 选择所有符合条件的节点 |
| .<name> | 子元素 |
| ['<name>'(,'<name>')] | 括号表示子元素或子元素列表 |
| [<number>(,'<number>')] | 数组索引或索引列表 |
| [start:end] | 数组切片操作符 |
| [?(<expression>)] | 过滤器表达式。表达式必须评估为布尔值 |
获取相应中的所有blogId元素:$..blogId
获取第一个blogId元素:$.[0]blogId
2)添加JSON配置

3)配置json提取的参数

运行脚本后,所有的查看博客接口对应的blogId统一替换为12

2.9 JSON断言
接口发送请求成功,响应码为200并不能完全代表接口请求成功,我们更多需要关注接口响应数据是否符合预期。
1)添加JSON断言

针对某一个HTTP请求接口添加JSON断言
2)添加JSON配置
同JSON提取器语法配置

注意:
1)若不选Additionally assert value,表示添加断言值,则可用来判断字段是否存在
2)选择Additionally assert value,则必须添加Expected Value期望的断言值
3)若不选Match as regular expression正则匹配,则Expected Value必须填写完整,少⼀个字符都 会导致断言失败
4)若选择Match as regular expression正则匹配,则Expected Value可以仅写上部分关键词即可断言成功
2.10 同步定时器(集合点)
为了达到并发的效果,需要添加同步定时器

JMeter同步定时器的作用主要在于模拟多用户并发访问的场景,确保多个线程能够同时执行某个操 作,以达到真正的并发效果。
当多个线程同时启动时,它们可能会在不同的时间间隔内执行,这样就无法达到真正的并发效果。同步定时器的作用就是将这些线程的执行时间同步,使它们在同一时间点执行。它可以在多个线程之间制造一定的延迟,直到同时到达指定时间点,再同时执行后续的操作。
此外,同步定时器可以理解为集合点,当线程数量达到指定值后,再⼀起释放,可以瞬间产生很大的压力。这样,可以更好地模拟真实的用户并发访问场景,提高测试的准确性和可靠性。
在性能测试过程中,为了真实模拟多个用户同时进行操作以度量服务器的处理能力,可以使用同步定时器来设置集合点。不过,虽然通过加入集合点可以约束请求同时发送,但不能确保请求同时到达服务器,所以只能说是较真实模拟并发。
2.11 事务控制器
JMeter事务控制器的作用主要用于测试执行嵌套测试元素所花费的总时间。这相当于模拟用户进行一系列操作的测试。
在进行页面性能测试或API性能测试时,事务控制器是一个非常重要的工具。它可以帮助测试人员更准确地评估系统性能,尤其是在涉及多个接口或操作的复杂场景中。例如,在订单提交的过程中,可能需要调用多个接口,并且某些接口可能依赖于前一个接口的结果。在这种情况下,使用事务控制器可以将这些接口统一视为一个事务进行性能测试,从而得到更接近真实场景的性能测试结果。

若不添加事务控制器,则一个接口即一个事务
添加了事务控制器后,可以将多个接口统一放到一个事务控制器下作为一个事务