楼主: dsfwfyw
57 0

JMeter性能测试工具·上 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-2-9
最后登录
2018-2-9

楼主
dsfwfyw 发表于 2025-11-26 17:45:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、JMeter的简单介绍

1. JMeter安装使用

JMeter是一款基于Java语言开发的工具,可用于接口测试与性能测试。由于其依赖Java环境,因此在安装JMeter之前,需先配置好Java运行环境,建议使用Java 8或更高版本。

安装步骤如下:

  • 安装Java环境: JMeter由Java编写,必须确保系统中已安装JRE或JDK,推荐版本为Java 8及以上。
  • 下载JMeter: 访问JMeter官方网站的下载页面,在“Binaries”分类下选择合适的压缩包进行下载。
  • 解压并启动: 下载完成后解压文件,进入解压目录中的bin文件夹,通过终端执行启动命令。

示例操作(以macOS为例):

# 进入bin目录
/Applications/apache-jmeter-5.6.3/bin
# 启动JMeter
sh jmeter

成功启动后将显示以下界面:

2. JMeter文件目录结构

JMeter解压后的主目录包含多个子目录,各具不同功能:

  • bin: 存放启动脚本、配置文件、模板及日志信息。初次使用时,建议修改核心配置文件 jmeter.properties,例如设置语言和编码:
language=zh_CN
sampleresult.default.encoding=utf-8
  • extras: 用于集成第三方插件或构建工具(如Maven)。
  • lib: 存放JMeter运行所依赖的jar包,所有扩展功能的库文件均放在此处。
  • backups: 自动保存的jmx测试脚本备份文件存储目录。
jmeter.bat: windows的启动文件
jmeter.log: 日志文件
jmeter.sh: linux的启动文件

3. JMeter基本使用流程

需求目标: 使用JMeter访问百度首页接口,并查看请求与响应数据。

具体操作流程:

  1. 启动JMeter应用程序。
  2. 在“测试计划”下添加一个“线程组”。
  3. 在线程组中添加一个“HTTP请求”取样器。
  4. 填写HTTP请求的相关参数(如协议、服务器地址等)。
  5. 再在线程组下添加“查看结果树”监听器。
  6. 点击“启动”按钮运行测试,随后在监听器中查看详细结果。

4. JMeter的基本元件

JMeter由多种元件构成,它们共同协作完成完整的测试任务。

常用元件列表

  • 测试计划(必需)
  • 线程组(必需)
  • 配置元件
  • 前置处理器
  • 定时器
  • 逻辑控制器
  • 取样器(必需)
  • 后置处理器
  • 断言
  • 监听器(必需)

常用元件功能详解

  • 测试计划: 所有测试的起点。支持独立运行各个线程组,并可导入外部jar包扩展功能。
  • 线程组: 模拟用户行为的核心组件。关键属性包括:
    • 线程数: 表示虚拟用户数量,接口测试通常设为1。
    • Ramp-Up时间: 启动所有线程所需的时间,默认建议为1秒。
    • 循环次数: 每个线程执行请求的次数。
  • 配置元件: 负责初始化测试环境与数据,类似于自动化脚本中的setup阶段。常见类型包括:
    • HTTP请求默认值
    • HTTP Cookie管理器
    • 用户定义的变量
  • 前置处理器: 在发送请求前对数据进行预处理,实现参数化等功能。
  • 逻辑控制器: 控制请求的执行逻辑,支持条件判断、循环等结构。
  • 定时器: 设置请求之间的延迟时间,相当于代码中的sleep操作。
  • 取样器: 发送实际请求到服务器,是必须存在的元件,如HTTP请求、Java请求等。
  • 后置处理器: 对服务器返回的响应内容进行提取处理,类似从响应体中获取特定字段。
  • 断言: 验证响应结果是否符合预期,起到校验作用。
  • 监听器: 展示测试执行过程中的结果与日志,提供多种形式的结果展示,如树状视图、表格等。

5. 元件作用域

元件的作用范围由测试计划中的树形结构决定,尤其是父子节点关系。

核心原则围绕“取样器”展开:

  • 取样器本身无作用域概念。
  • 逻辑控制器仅对其子节点下的元件生效。
  • 其他元件:
    • 若父节点为取样器,则仅对该取样器有效。
    • 若父节点非取样器,则对其下所有子节点及其后代元件均有效。

由此得出三个结论:

  1. 元件可以作用于其父级元件。
  2. 元件可以影响同层级的其他元件。
  3. 元件能够作用于同级元件下的所有子元件。

6. 元件的执行顺序

在JMeter中,各元件按照固定顺序依次执行:

执行流程为: 配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器

注意事项: 配置元件、前置处理器和后置处理器必须依赖于取样器才能触发执行,无法单独运行。

二、JMeter的三个重要组件

1. 线程组

线程组的介绍

线程组是JMeter中最基础也是最重要的组件之一,用于模拟并发用户的行为。它是所有取样器运行的基础容器。

线程组的属性

  • 线程数: 定义并发用户的数量。
  • Ramp-Up时间: 表示在多长时间内启动全部线程。
  • 循环次数: 指定每个线程重复执行测试的次数。

2. HTTP请求(取样器)

HTTP请求元件属于取样器的一种,用于向目标服务器发送HTTP/HTTPS请求。可通过设置协议、主机名、端口、路径、方法(GET/POST)、参数等来构造完整的请求。

3. 查看结果树

该监听器用于展示每一个请求的详细发送与接收信息,包括请求头、请求体、响应数据、响应码等,便于调试和验证测试结果。

三、JMeter参数化

为了提升测试灵活性,JMeter支持多种参数化方式,使测试数据可动态变化。

1. 用户定义的变量

在测试计划或线程组级别定义全局变量,适用于在整个测试过程中保持不变的数据。

2. 用户参数

允许为每个线程(用户)分配不同的参数值,常用于模拟多用户登录等场景。

3. CSV数据文件设置

通过读取外部CSV文件中的数据实现批量参数化输入,适合大量测试数据的驱动测试。

4. 函数方式参数化

利用内置函数(如__Random、__time、__threadNum等)生成动态值,实现更灵活的参数控制。

.tgz
bin
sh jmeter

在同一个作用域中,相同类型的元件会按照从上到下的顺序依次执行。

JMeter的核心组件解析

1. 线程组

线程组的作用:通过设置线程数量来模拟真实用户行为。其中,每个线程代表一个虚拟用户,而线程组则相当于一组并发用户集合。

主要特点:

  • 支持多用户并发模拟
  • 取样器与逻辑控制器必须置于线程组之下才能生效
  • 一个测试计划可包含多个线程组,这些线程组可以并行或串行运行

执行模式说明:

  • 并行执行:默认情况下,各线程组同时启动
  • 串行执行:若在测试计划中勾选“独立运行每个线程组”,则所有线程组将按上下顺序逐一执行

线程组的分类

  • setup线程组:用于测试前的准备工作,在所有其他线程组之前最先执行
  • 普通线程组:承载核心业务逻辑和性能测试脚本的主体部分
  • teardown线程组:负责测试结束后的清理工作,如环境恢复、数据清理等,最后执行

线程组的关键属性配置

  • 线程数:设定并发用户的数量
  • Ramp-up时间:指所有虚拟用户完成启动所需的时间(单位:秒)
  • 循环次数:
    • 可指定具体循环次数
    • 也可设为“永远”循环,需配合调度器使用
  • 持续时间:控制整个测试脚本的运行时长
  • 延迟启动时间:设置脚本延迟多少秒后开始执行

注意:线程数m与循环次数n的关系:

  • 当两者同时配置时,实际发出的HTTP请求数量为 m × n
  • 尽管总请求数相同,但二者不可互换:
    • 线程数反映服务器负载压力(并发用户数)
    • 循环次数体现的是执行时间维度

例如:

  • 设置线程数为1,循环次数为5,则结果中显示均为“线程组1-1”,表示同一用户连续发送5次请求
  • 若设置线程数为5,循环次数为1,则会看到5个不同的线程实例分别执行一次请求

2. HTTP请求(取样器)

  • 协议类型:支持HTTP或HTTPS,默认为HTTP
  • 服务器名称或IP:填写目标服务地址
  • 端口号:HTTP默认80,HTTPS默认443
  • 请求方法:支持GET、POST、PUT、DELETE等标准HTTP方法
  • 路径:包含目录结构及查询参数
  • 编码格式:建议统一使用UTF-8编码

补充说明:

完整的HTTP请求由四个要素构成:请求方法、请求路径、请求头、请求体。

关于请求头管理:

  • 可通过“HTTP信息头管理器”进行配置
  • 若仅对单个请求生效,应将其放置于对应取样器下
  • 若需应用于全部请求,则应与取样器同级,直接放在线程组下

请求参数传递方式(四种):

  1. Params(查询字符串):适用于GET请求,参数以键值对形式附加在URL后,使用?分隔
  2. Form表单:常用于POST请求,提交键值对形式的数据
  3. JSON字符串:在请求体中发送JSON格式数据
  4. File文件:实现文件上传功能

3. 查看结果树

  • 取样器结果:展示请求的详细统计信息
  • 请求部分:包括完整的请求头与请求体内容
  • 响应部分:展示响应头与响应体的原始数据,便于调试分析

JMeter参数化技术详解

1. 用户定义的变量

方式一:通过配置元件添加

  • 路径:线程组 → 配置元件 → 用户定义的变量
  • 配置项:参数名 + 参数值
  • 引用方式:在HTTP请求中使用 ${变量名} 调用

方式二:在测试计划层级直接定义

  • 操作:在测试计划界面中添加用户定义变量
  • 引用方式:同样使用 ${变量名} 进行调用

两种方式的区别:

  • 第一种方式定义的变量仅在当前线程组内有效
  • 第二种方式定义的变量作用范围覆盖整个测试计划下的所有线程组

2. 用户参数

  • 添加路径:线程组 → 前置处理器 → 用户参数
  • 配置说明:
    • 参数:定义变量名称
    • 参数值:为不同用户分配各自的值
  • 使用方式:在取样器中通过 ${变量名} 引用

查看执行效果:

3. CSV数据文件设置

应用场景:需要循环3次,每次请求携带不同的 username、password、code 参数值,如何实现?

  • 添加路径:线程组 → 配置元件 → CSV数据文件设置
  • CSV文件编写规范:
    • 多个参数作为多列,使用逗号分隔
    • 多组数据使用多行表示

配置项说明:

  • 文件路径:推荐使用相对路径以增强可移植性
  • 文件编码:建议设置为UTF-8
  • 变量名称:与CSV列对应,多个变量名之间用逗号分隔
  • 是否忽略首行:决定是否跳过标题行读取数据
  • 分隔符:必须与CSV文件中的实际分隔符一致
  • 遇到文件末尾是否循环:默认为TRUE,即循环读取
  • 遇到文件末尾是否停止线程:仅当前一项为FALSE时该选项才生效,通常建议设为TRUE

4. 函数方式实现参数化

首先打开JMeter内置的函数助手对话框:

选择 counter 函数进行计数器配置:

  • TRUE:每个线程拥有独立的计数器实例
  • FALSE:所有线程共享同一个全局计数器

在取样器中,可以通过使用 ${__counter(FALSE,)} 来获取对应的数值。

适用场景:当所需参数化数据仅需满足唯一性,而对具体取值没有特定要求时,推荐采用函数的方式来实现。

接下来我们逐步了解实际操作流程:

配置函数参数时,请注意界面中的提示说明:若将参数设为 TRUE,则每个线程(即每个虚拟用户)将拥有独立的计数器,例如各自的计数都从1开始;若设置为 FALSE,则所有线程共享一个全局计数器。

如果文字描述不够直观,可参考以下图示说明:

当参数为 TRUE 时,各线程使用各自的计数器,因此生成的结果会是三组独立的 1 和 2;

当参数为 FALSE 时,所有线程共用同一个计数器,此时输出的值将按顺序从 1 连续递增至 6。

本部分内容到此结束,敬请期待后续更新。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Meter 性能测试 JME Applications Application

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 18:05