JMeter基本介绍


Apache JMeter 工具详解

一、JMeter 简介

JMeter 是 Apache 基金会开源的 Java 应用程序,主要用于 性能测试负载测试功能测试。它通过对服务器或网络资源模拟多种负载条件(如并发用户、持续压力),帮助评估系统性能指标(如响应时间、吞吐量、资源利用率)。

核心用途

  • Web 应用性能测试(HTTP/HTTPS 请求)。
  • API 测试(REST、SOAP、Web Services)。
  • 数据库性能测试(JDBC 连接)。
  • 服务器压力测试(FTP、SMTP、TCP 等)。
  • 接口功能验证(支持断言和结果检查)。

主要特点

  • 多协议支持:HTTP、FTP、JDBC、JMS、SOAP 等。
  • 图形化界面:方便配置测试计划,无需编码。
  • 分布式测试:支持多机器联合施压,模拟高并发。
  • 可扩展性:通过插件支持更多协议和报告生成。
  • 开源免费:节省企业测试工具采购成本。

二、JMeter 核心组件与架构

1. 基础组件

JMeter 测试计划由多个组件构成,以下是核心元素:

组件作用常用实例
测试计划测试的总容器,包含线程组、监听器、配置元件等。用户创建的顶层结构。
线程组定义虚拟用户(线程)的数量和负载模型(如并发数、启动时间)。设置 100 个线程,5 秒内启动。
Sampler发送指定协议请求(如 HTTP Sampler 发送网页请求)。HTTP 请求、JDBC 请求、FTP 请求。
监听器收集和展示测试结果(如响应时间、TPS)。表格结果、图形结果、聚合报告。
断言验证服务器返回结果是否符合预期(如检查状态码或响应内容)。响应断言、大小断言、持续时间断言。
配置元件提供测试用的变量或参数(如 CSV 数据集、Header 管理器)。HTTP Cookie 管理器、CSV Data Set Config。
前置/后置处理器在请求前后执行操作(如提取响应数据、生成动态变量)。JSON 提取器、正则表达式提取器。
2. JMeter 架构
  • 逻辑控制器:控制请求的流程(如循环次数、条件判断)。
  • 定时器:模拟用户操作的间隔(如固定定时器、高斯随机定时器)。
  • 分布式负载架构:控制机(Master)通过 RMI 协议发送指令到多台负载机(Slave),实现多机联合压测。

三、JMeter 工作原理

JMeter 的核心工作原理可概括为以下步骤:

  1. 创建测试计划:定义要测试的协议(如 HTTP)、请求参数和断言规则。
  2. 配置线程组:设置并发用户数(线程数)、循环次数、启动延迟。
  3. 模拟用户行为:每个线程独立执行测试脚本,发送请求并接收响应。
  4. 收集结果:监听器实时记录请求的响应时间、错误率等指标。
  5. 生成报告:测试结束后,统计聚合结果并生成图表或日志文件。

&pos_id=img-9lOtCbMo-1742199004409)


四、JMeter 使用步骤(以测试网站性能为例)

步骤 1:安装与启动

  • 下载地址:JMeter 官网
  • 运行:解压后执行 bin/jmeter.bat(Windows)或 bin/jmeter.sh(Linux/Mac)。

步骤 2:创建测试计划

  1. 添加线程组

    • 右击测试计划 → 添加 → 线程(用户)→ 线程组。
    • 配置线程数(用户数)、Ramp-Up 时间(启动时间)、循环次数。
  2. 添加 HTTP 请求采样器

    • 右击线程组 → 添加 → 取样器 → HTTP 请求。
    • 填写目标 URL(如 https://example.com)、协议、路径、参数。

步骤 3:配置结果监听器

  • 添加聚合报告:
    右击线程组 → 添加 → 监听器 → 聚合报告。
    (可选添加其他监听器,如“查看结果树”用于调试)

步骤 4:执行测试

  • 点击工具栏的绿色启动按钮(▶️),JMeter 开始发送请求。

步骤 5:分析结果

  • 查看 聚合报告 中的关键指标:
    • Average:平均响应时间。
    • Throughput:吞吐量(请求数/秒)。
    • Error %:错误请求比率。

五、结果分析与报告

常见指标解析

  • 响应时间(Response Time):服务器处理请求的时间(单位:毫秒)。
  • 吞吐量(Throughput):系统每秒处理的请求数(TPS)。
  • 错误率(Error %):失败请求的比例,反映系统稳定性。

示例报告(聚合报告):

LabelSamplesAverageMinMaxError %Throughput
HTTP Request1000150 ms100 ms500 ms0.0%200.0/s

预期结论:在 1000 次请求中,平均响应时间为 150ms,吞吐量达 200 请求/秒,错误率为 0,系统性能良好。


六、常见应用场景

  1. 电商黑五压测
    • 模拟数万用户并发访问商品页和下单接口,验证系统能否承受流量洪峰。
  2. API 接口性能监控
    • 通过定时任务批量调用 API,监控每日性能衰减情况。
  3. 数据库查询优化
    • 使用 JDBC Sampler 验证高并发下 SQL 查询的响应时间。

七、JMeter 优化技巧

  1. 参数化测试数据
    • 使用 CSV 数据集配置多个用户账号或动态参数。
  2. 分布式测试
    • 在多台机器上部署 JMeter Agent,通过主控机联合施压。
  3. 断言与关联
    • 通过正则表达式提取动态 Token,并传递给后续请求。

总结

JMeter 核心价值:通过模拟真实用户行为,量化系统性能瓶颈,为优化提供数据支撑。
适用阶段:推荐在接口开发和核心功能稳定后,用于性能基线测试和维护期的回归验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36626.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Quartz知识点总结

简单说明 简单的定时任务使用Timer或者ScheduledExecutorService quartz支持复杂的定时执行功能。支持ram存储(内存存储)和持久化存储。quartz有分布式和集群能力 简单使用 获取任务调度器Schedule。任务调度器可以管理任务。创建任务实例。使用JobB…

C语言每日一练——day_12(最后一天)

引言 针对初学者,每日练习几个题,快速上手C语言。第十二天。(最后一天,完结散花啦) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ&#xff0…

【宇宙回响】从Canvas到MySQL:飞机大战的全栈交响曲【附演示视频与源码】

🌟 这是星际大战系列的第三篇送福利文章,感谢一路以来支持和关注这个项目的每一位朋友! 💡 文章力求严谨,但难免有疏漏之处,欢迎各位朋友指出,让我们一起在交流中进步。 🎁 项目代码…

数据结构知识点1

目录 一、时间复杂度和空间复杂度 1.1时间复杂度: 1.2空间复杂度: 二、装箱和拆箱 三、泛型 3.1泛型类的使用: 3.2泛型的上界: 3.3泛型方法: 一、时间复杂度和空间复杂度 1.1时间复杂度: 时间复杂…

华为ipd流程华为流程体系管理华为数字化转型流程数字化管理解决方案介绍81页精品PPT

华为流程体系最佳实践主要包括构建完善的流程框架,明确各层级流程要素与职责,梳理涵盖研发、采购、营销、服务、资产管理等多领域的流程,通过梳理业务场景和核心能力搭建差异化流程框架,采用自上而下与自下而上相结合的建模方法&a…

在大数据开发中ETL是指什么?

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字经济时代,数据已成为企业最核心的资产。然而,分散在业务系统、日志文件…

Collection系列集合的小结+集合并发修改异常问题

一、Collection系列集合的小结 二、补充知识:集合的并发修改异常问题 三、Collection的其他相关知识 1. 前置知识:可变参数 2. 集合的工具类:Collections 3. 综合案例:斗地主游戏 (1)创建Card类 public c…

QT Quick(C++)跨平台应用程序项目实战教程 2 — 环境搭建和项目创建

目录 引言 1. 安装Qt开发环境 1.1 下载Qt安装包 1.2 安装Qt 1.3 安装Visual Studio 2022 1.4 在Visual Studio 2022中安装Qt插件 1.5 在Visual Studio 2022中安装大模型编程助手 2. 创建Qt Quick项目 2.1 创建新项目 2.2 项目结构 2.3 运行项目 3. 理解项目代码 3…

免密登录远程服务器shell脚本

一、脚本代码 #!/bin/bash #提示用户输入用户i名和ip地址 read -p "请输入远程服务器的用户名: " hname read -p "请输入远程服务器的IP地址: " fip read -p "请输入远程服务器的远程端口:" sdk #检查是否配置了免密登录 function sfmm(){ …

repo init 错误 Permission denied (publickey)

一、已经生成ssh-key并设置到gerrit上 二、已经设置.gitconfig (此步骤是公司要求,设置gerrit地址为一个别名之类的,有的公司不需要) 然后出现下面的错误,最后发现忘记设置git的用户名和邮箱 1. git config --globa…

卷积神经网络 - 汇聚层

卷积神经网络一般由卷积层、汇聚层和全连接层构成,本文我们来学习汇聚层。 汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进 行特征选择,降低特征数量,从而减少参数数量。 卷积层虽然可以显著减少网络中连接的…

C++ 头文件说明

如果一个程序足够大,代码功能很多,可以想象,不可能把代码写在一个cpp文件里。我们需要模块化,这样的好处很多,方便分工合作,可读性提高,调用也方便。 这个要怎么做呢? 很简单直接当…

【蓝桥杯】省赛:分糖果(思维/模拟)

思路 数据很小,直接暴力模拟。 有意思的是一个列表如何当成循环队列写?可以arr[(i1)%n]让他右边超出时自动回到开头。 code import os import sysn int(input()) arr list(map(int,input().split()))ans 0 while 1:arr1 arr.copy()for i in range…

如何理解分布式光纤传感器?

关键词:OFDR、分布式光纤传感、光纤传感器 分布式光纤传感器是近年来备受关注的前沿技术,其核心在于将光纤本身作为传感介质和信号传输介质,通过解析光信号在光纤中的散射效应,实现对温度、应变、振动等物理量的连续、无盲区、高…

【java面型对象进阶】------继承实例

继承结构下的标准Javabean 代码如下: package demo10;//定义员工父类 public class Employee {private String id;private String name;private double salary;//构造方法public Employee(){}public Employee(String id,String name,double salary){this.idid;thi…

matrix-breakout-2-morpheus 靶机----练习攻略 【仅获取shell】

【此练习仅做到反弹shell】 1.靶机下载地址 https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 2. 打开靶机,kali使用nmap扫描同C段的主机 找到靶机ip 确保靶机和kali网卡均为NAT模式 先查看kali的ip nmap 192.168.182.1/24 …

解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南

文章目录 解锁MySQL 8.0.41源码调试:Mac 11.6CLion 2024.3.4实战指南前期准备环境搭建详细步骤安装 CLion安装 CMake 3.30.5准备 MySQL 8.0.41 源码配置 CMake 选项构建 MySQL 项目 调试环境配置与验证配置 LLDB 调试器启动调试验证调试环境 总结与拓展碰到的问题1.…

使用码云搭建CocoaPods远程私有库

一、创建远程私有索引库 用来存放私有框架的详细描述信息.podspec文件 1. 创建私有库 假设码云上创建的私有库为repo-spec 2. 查看本地已存在的索引库 pod repo list 3. 将远程私有索引库添加到本地 pod repo add [https://gitee.com/jingluoguo/repo-spec.git](https://gi…

Devops之AWS:如何安装AWS CLI

AWS 命令行界面(AWS CLI)是一种开源工具,让我们能够使用命令行 Shell 中的命令与 AWS 服务进行交互。 安装步骤: 下载并运行AWS CLI的MSI安装程序: 点击如下的链接,即可下载MSI安装程序: htt…

docker需要sudo才能使用

一种方法是添加当前用户到docker组里去,当时添加的时候貌似是没问题的,但是现在又不可以了 产生的报错 ❯ docker images Cannot connect to the Docker daemon at unix:///home/ying/.docker/desktop/docker.sock. Is the docker daemon running?解决…