JMeter工具的使用

目录

一、JMeter介绍

安装Jmeter

打开JMeter

基础配置

JMeter元件作用域和执行顺序

二、重点组件

[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性能测试时,事务控制器是一个非常重要的工具。它可以帮助测试人员更准确地评估系统性能,尤其是在涉及多个接口或操作的复杂场景中。例如,在订单提交的过程中,可能需要调用多个接口,并且某些接口可能依赖于前一个接口的结果。在这种情况下,使用事务控制器可以将这些接口统一视为一个事务进行性能测试,从而得到更接近真实场景的性能测试结果。

若不添加事务控制器,则一个接口即一个事务

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

相关推荐
少云清4 小时前
【性能测试】11_JMeter _JMeter逻辑控制器
jmeter·性能测试
少云清6 小时前
【性能测试】10_JMeter _JMeter连接数据库(重点)
数据库·jmeter
Bug 挖掘机8 小时前
最近跳槽了
软件测试·功能测试·测试开发·跳槽
测开小林12 小时前
加入L-Tester开源项目:自动化测试平台
自动化测试·测试开发·开源·fastapi·测试平台
普通网友19 小时前
Jmeter和Postman那个工具更适合做接口测试?_postman和jemter哪个更适合接口测试
测试工具·jmeter·postman
steem_ding1 天前
压测TPS
jmeter
月明长歌1 天前
测试BUG 篇:从“怎么测”到“怎么提”,再到“怎么关”全流程
软件测试·测试开发·bug
少云清2 天前
【性能测试】9_JMeter _JMeter录制脚本(了解)
jmeter·性能测试
少云清2 天前
【性能测试】8_JMeter _JMeter跨线程组关联
jmeter·性能测试