JMeter工具入门与HTTP协议基础核心知识梳理

JMeter工具入门与HTTP协议基础核心知识梳理

一、HTTP协议核心原理回顾
  1. 工作原理:

    • 客户端 主动向 服务端 发送 请求

    • 服务端 处理请求后,向客户端返回 响应

    • 一次完整的交互 = 一个请求 + 一个响应。

  2. 数据包结构:

    • 无论是请求还是响应,数据都遵循相同的格式,由 两部分组成。

    • Header: 存放通用信息(如元数据)。

    • Body: 存放具体的业务数据或敏感信息。

    • 类比: 如同寄信,Header是信封(地址、邮编),Body是信纸(具体内容)。

  3. 请求详解:

    • 请求行: 包含 请求方法URL协议版本

      • 常见请求方法:

        • GET:获取数据。

        • POST:提交数据。

        • PUT:更新数据。

        • DELETE:删除数据。

    • 请求头: 包含关于请求的附加信息。

      • 关键字段:

        • Host:目标域名和端口。

        • Content-Type声明请求体的数据格式,至关重要。

        • Content-Length:请求体的长度。

        • User-Agent:客户端信息(如浏览器类型)。

        • Cookie:用于状态保持。

    • 请求体: 存放具体的请求参数或数据。

      • 常见 Content-Type 与数据格式对应关系:

        • application/x-www-form-urlencoded:表单格式,数据为 key=value&key=value

        • application/json:JSON字符串格式,数据为 {"key": "value"}

  4. 响应详解:

    • 状态行: 包含 协议版本状态码

      • 状态码:

        • 2xx:成功(如 200 OK)。

        • 4xx:客户端错误(如 404 Not Found)。

        • 5xx:服务端错误(如 500 Internal Server Error)。

    • 响应头: 与请求头类似,包含关于响应的元数据。

    • 响应体: 服务端返回的实际数据(如 HTML页面、JSON数据等)。


二、JMeter入门与实战

1. JMeter 简介

  • 本质: 基于Java开发的开源性能测试工具。

  • 来源: Apache基金会。

  • 用途: 可用于功能和性能测试,支持扩展。

2. 环境准备

  • 安装JDK: 必须安装 JDK 1.8 或更高版本。

  • 安装JMeter: 从官网下载 binaries 的ZIP包,解压即用,无需安装。

  • 启动: 进入解压目录的 bin 文件夹,双击 jmeter.bat 文件启动。

3. 初始配置(重要)

  • 修改 bin 目录下的 jmeter.properties 文件:

    • 语言: 搜索 language,修改为 language=zh_CN,切换为中文界面。

    • 编码: 搜索 sampleresult.default.encoding,修改为 UTF-8,防止中文乱码。

    • 注意: 修改后需重启JMeter生效。

4. 核心组件与第一个脚本

  • 测试计划: JMeter脚本的根节点。

  • 线程组:

    • 地位: 所有其他组件的容器,是模拟并发用户的起点。

    • 理解: 代表 一组虚拟用户

    • 操作: 右键测试计划 -> 添加 -> 线程(用户) -> 线程组。

  • 取样器:

    • 作用: 模拟用户发出的 各种请求

    • 操作: 右键线程组 -> 添加 -> 取样器 -> HTTP请求

  • HTTP请求配置:

    • 协议: httphttps(不填默认为http)。

    • 服务器名称/IP: 被测服务的地址(本地可用 localhost127.0.0.1)。

    • 端口号: 服务的端口(如 8080)。

    • HTTP请求: 选择请求方法(GET/POST等)。

    • 路径: 接口的URI。

    • 参数: 对于GET请求,在“参数”表中添加;对于POST请求,根据 Content-Type 在“参数”表或“消息体数据”中填写。

  • 监听器:

    • 作用: 用来 查看、分析和保存测试结果

    • 关键组件: 查看结果树

    • 操作: 右键线程组 -> 添加 -> 监听器 -> 查看结果树

    • 功能: 可以详细查看每个请求的请求头、请求体、响应头、响应体、状态码等信息,是调试脚本的利器。

JMeter脚本进阶核心知识梳理

一、POST请求的两种常见参数类型
  1. 表单类型

    • Content-Type: application/x-www-form-urlencoded

    • 参数格式: key=value&key=value (键值对形式)

    • 在JMeter中的位置: 在HTTP请求的 “参数” 选项卡中填写。

    • 特点: JMeter默认使用此类型,无需额外配置HTTP信息头管理器

  2. JSON类型

    • Content-Type: application/json

    • 参数格式: {"key": "value"} (JSON字符串格式)

    • 在JMeter中的位置: 在HTTP请求的 “消息体数据” 选项卡中填写。

    • 必须配置: 必须添加 HTTP信息头管理器,并设置 Content-Typeapplication/json,否则服务器会返回 415 Unsupported Media Type 错误。

  3. 混合类型

    • 格式: 参数为键值对,但值是一个JSON字符串 (例如: param={"key": "value"})。

    • 本质: 其本质仍然是表单类型,因为它遵循 key=value 的格式。

    • 在JMeter中的位置:“参数” 选项卡中填写。

    • 配置: 按表单类型处理,无需额外设置JSON的 Content-Type

二、HTTP信息头管理器的作用域
  • 重要原则: JMeter组件具有作用域

  • 最佳实践:HTTP信息头管理器 放置在具体的HTTP请求采样器之下

  • 原因: 这样配置只会对该特定请求生效。如果放在线程组级别,会对其下的所有请求生效,可能会引起不必要的错误。

三、设置请求超时
  • 位置: 在HTTP请求的 “高级” 选项卡中。

  • 类型:

    • 连接超时: 等待与服务器建立连接的最长时间。

    • 响应超时: 等待服务器返回响应的最长时间。

  • 单位: 毫秒 (例如:10000毫秒 = 10秒)。

  • 作用: 避免因个别接口响应极慢而导致测试脚本长时间挂起,无法结束。超时后JMeter会主动断开连接并标记该请求为失败。

四、断言 - 验证接口响应

1. 为什么需要断言?

  • JMeter默认仅通过HTTP状态码 (如200) 判断请求成功与否。

  • 但业务上,接口可能返回状态码200,实际业务数据却是错误的(例如搜索无结果)。

  • 断言用于根据业务返回值来更精确地判断接口请求是否真正成功。

2. 响应断言

  • 特点: 最通用、最常用的断言,适用于任何文本格式的响应(JSON, HTML, XML等)。

  • 配置要点:

    • 要测试的响应字段: 绝大多数情况选择 “响应文本”

    • 模式匹配规则:

      • 包含: 响应中包含指定的字符串即算成功。(最常用)

      • 匹配: 支持正则表达式的“包含”。

      • 相等: 响应内容必须与指定字符串完全一致。(太严格,少用)

      • 字符串: 与“包含”类似,但不支持正则表达式。

    • 多条件判断:

      • 可以添加多个断言模式。

      • 默认是 “与” 关系(所有条件都必须满足)。

      • 勾选 “OR” 按钮后,变为 “或” 关系(满足任一条件即可)。

3. JSON断言

  • 特点: 专用于JSON格式的响应,语法更简洁。

  • 核心配置:

    • JSON Path表达式: 用于定位要验证的JSON字段。

      • 语法:$.key$.key.subKey (使用 $. 开头,用 . 表示层级)。

      • 示例:$.message$.data.brand

    • 预期值: 填写该字段期望的值。

    • 其他选项: 通常保持默认(验证条件为“相等”,并勾选“Validate against expected value”)。


总结

  1. 正确处理不同参数类型,特别是JSON类型必须配置请求头。

  2. 合理设置超时,提升测试脚本的健壮性。

  3. 使用断言进行业务验证,确保性能测试的同时,业务逻辑结果的正确性。

JMeter参数化与函数高级应用核心知识梳理

一、用户自定义变量(全局变量)
  • 目的: 管理公共的、固定的配置数据,实现“一处修改,处处生效”。

  • 位置:测试计划 面板中,找到 “用户定义的变量”

  • 应用场景: 服务器地址、端口号等所有请求共享的配置。

  • 引用方式: ${变量名},例如:${IP}, ${PORT}

二、参数化核心方法

1. 随机数

  • 函数: __Random

  • 位置: 选项 -> 函数助手对话框 -> __Random

  • 参数:

    • 最小值

    • 最大值

  • 作用: 在指定范围内生成随机整数。适用于ID、数量等数字型参数。

2. 随机字符串

  • 函数: __RandomString

  • 位置: 函数助手对话框 -> __RandomString

  • 参数:

    • 生成长度

    • 字符源(从哪些字符中随机选取)

  • 作用: 生成指定长度的随机字符串。适用于用户名、邮箱前缀等需要避免重复的场景。

3. 计数器

  • 位置: 线程组 -> 添加 -> 配置元件 -> 计数器

  • 关键配置:

    • 起始值: 计数开始的值。

    • 递增步长: 每次循环增加的值。

    • 最大值: 计数上限,达到后根据配置循环或停止。

    • 引用名称: 存储计数器值的变量名。

    • 与每用户独立的跟踪计数器:

      • 不勾选: 所有线程共享一个计数器。(默认)

      • 勾选: 每个线程拥有独立的计数器。

  • 作用: 生成有规律递增的数字,适用于需要序列化参数的场景(如user1, user2...)。

4. 文件参数化

方法一:CSV Read 函数

  • 函数: __CSVRead

  • 位置: 函数助手对话框 -> __CSVRead

  • 参数:

    • 文件路径

    • 列号(从0开始)

  • 核心特点: 按线程分配数据。每个线程在整个运行期间固定使用文件中的某一行数据,与循环次数无关。适用于模拟不同用户使用不同固定账号的场景。

方法二:CSV Data Set Config 元件(推荐)

  • 位置: 线程组 -> 添加 -> 配置元件 -> CSV Data Set Config

  • 关键配置:

    • 文件名: 数据文件路径。

    • 文件编码: 按文件实际编码选择(默认通常即可)。

    • 变量名称: 定义多个变量名,用逗号分隔,对应文件中的各列。

    • 忽略首行?: 文件首行是标题时设为True。

    • 分隔符: 列之间的分隔符(默认为逗号)。

    • 遇到文件结束符再次循环?:

      • True:数据用完后,从头开始循环使用。

      • False:数据用完后,停止线程

    • 遇到文件结束符停止线程?: 与上一项配合使用。

  • 核心特点: 按循环分配数据。每次循环(无论来自哪个线程)读取下一行数据。适用于需要在整个测试中均匀使用所有测试数据的场景。

三、其他常用函数

1. 时间戳

  • 函数: __time

  • 作用: 获取当前时间。

  • 常用格式:

    • 无参数:返回13位毫秒级时间戳。(最常用)

    • 带格式:返回格式化时间字符串,如 YYYY-MM-dd HH:mm:ss

2. UUID

  • 函数: __UUID

  • 作用: 生成全局唯一的标识符字符串。

  • 应用场景: 需要绝对不重复的参数,如订单号、消息ID。

四、高级技巧:函数结果存储与复用
  • 问题: 如何在同一次循环中,让多个请求使用相同的随机值?

  • 解决方案: 使用函数的 “存储结果的变量名” 参数。

  • 步骤:

    1. 在第一个使用函数的地方(如 __Random),填写“存储结果的变量名”(如 myVar)。

    2. 在本次循环后续需要该值的地方,直接使用 ${myVar} 引用。

  • 效果: 在同一次循环内,该变量值保持不变;下一次循环时,会重新生成并存储。

五、核心概念辨析
  • 线程数 vs 循环次数:

    • 线程数: 模拟的并发用户数

    • 循环次数: 每个用户执行请求的次数。

    • 总请求数 ≈ 线程数 × 循环次数

  • 参数化数据分配策略:

    • CSV Read 函数:线程分配。

    • CSV Data Set Config 元件:循环分配。


总结: 参数化是JMeter脚本的灵魂。选择哪种参数化方式,取决于你的测试数据和业务场景:

  • 需要不重复的随机值 -> __Random, __RandomString, __UUID

  • 需要有规律的序列 -> 计数器

  • 使用预设好的数据文件 -> CSV Data Set Config(最灵活通用)

  • 需要每个用户固定身份 -> CSV Read 函数

  • 需要时间相关数据 -> __time

  • 需要在同一次循环中复用动态值 -> 使用“存储结果的变量名”

熟练掌握这些方法,才能设计出能够模拟真实、复杂用户行为的性能测试脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值