当前位置: 首页 > news >正文

【Java知识】Java性能测试工具JMeter

一文带你了解什么是JMeter

    • 概述
      • JMeter的主要功能:
      • JMeter的工作原理:
      • JMeter的应用场景:
      • JMeter的组件介绍:
    • 实践说明
      • JMeter实践基本步骤:
      • JMeter实践关键点:
    • JMeter支持哪些参数化技术?
    • 常见插件及其功能
    • 工作界面展示
    • 相关文献

概述

Apache JMeter 是一个开源的、基于Java的压力测试工具,最初被设计用于Web应用测试,但后来扩展到其他测试领域。以下是JMeter的一些详细介绍:

JMeter的主要功能:

  1. 性能测试:JMeter可以模拟服务器、网络或对象在不同压力类别下的负载,测试它们的强度和分析整体性能。
  2. 回归测试:JMeter能够对应用程序做回归测试,通过创建带有断言的脚本来验证程序返回了预期的结果。
  3. 支持多种服务类型测试:JMeter支持对Web(HTTP, HTTPS)、SOAP/REST Webservices、FTP、Database via JDBC等多种服务类型进行测试。
  4. 高可移植性:作为一个100%的纯Java程序,JMeter具有高可移植性。
  5. 多线程框架:允许通过多个线程并发取样及通过独立的线程组对不同的功能同时取样。
  6. GUI支持:精心设计的GUI支持高速用户操作和精确计时。
  7. 缓存/离线分析:支持缓存/离线的方式分析/回放测试结果。
  8. 高扩展性:JMeter具备高扩展性,支持通过插件扩展其功能。

JMeter的工作原理:

JMeter可以作为Web服务器与浏览器之间的代理网关,捕获浏览器的请求和服务器的响应,生成性能测试脚本,并通过线程组模拟真实用户对Web服务器的访问压力。

JMeter的应用场景:

  1. Web应用性能测试:模拟用户访问Web应用程序,测试其响应时间和吞吐量。
  2. 服务器性能测试:通过模拟高并发请求来评估服务器的最大承载能力。
  3. 数据库性能测试:测试数据库连接的性能,评估数据库的响应时间。
  4. 网络性能测试:测试网络传输速度和稳定性。
  5. 桌面应用性能测试:测试桌面应用程序的性能。

JMeter的组件介绍:

  1. 线程组(Thread Group):定义测试的并发用户数量和循环次数。
  2. 取样器(Sampler):用于向服务器发送请求,如HTTP请求、JDBC请求等。
  3. 逻辑控制器(Logical Controller):控制测试的执行逻辑,如循环、条件判断等。
  4. 前置处理器(PreProcessor)和后置处理器(PostProcessor):在请求发送前或收到响应后处理数据。
  5. 断言(Assertion):验证响应是否符合预期。
  6. 监听器(Listener):展示测试结果,如查看结果树、聚合报告等。
  7. 配置元件(Config Element):设置测试中使用的参数和变量。
  8. 定时器(Timer):控制请求之间的时间间隔。

JMeter是一个功能强大且灵活的工具,适用于各种性能测试场景,并且由于其开源性质,被广泛使用于全球的软件开发和测试社区中。

实践说明

JMeter是一种流行的开源性能测试工具,用于对软件和服务器进行负载和压力测试。以下是JMeter实践的基本步骤和一些关键点:

JMeter实践基本步骤:

  1. 编辑测试计划(Test Plan)

    • 打开JMeter,创建一个新的测试计划,这是所有测试元件的容器。
  2. 创建线程组(Thread Group)

    • 线程组定义了虚拟用户的数量和它们的行为。你可以设置线程数(虚拟用户数)、Ramp-Up Period(启动时间,即所有线程启动所需的时间)和循环次数。
  3. 创建HTTP请求(HTTP Request)

    • 在线程组下添加HTTP请求,配置请求的URL、方法(GET/POST)、参数等。
  4. 添加监听器查看结果(View Results Tree)

    • 添加监听器来查看请求的结果,例如“查看结果树”可以显示请求的详细信息,包括请求和响应数据。
  5. 发送请求,查看结果

    • 运行测试计划,JMeter会根据线程组的设置发送请求,并在监听器中显示结果。

JMeter实践关键点:

  • 使用正确的线程数

    • 根据硬件性能和测试计划设计确定合适的线程数。过多的线程可能会导致测试结果不准确。
  • 使用HTTP(S)测试脚本记录器

    • JMeter可以录制HTTP请求,自动生成测试脚本。
  • 参数化和传参

    • 在接口测试中,JMeter支持多种参数化技术,如CSV Data Set Config、用户定义的变量、数据库提取数据等,以及使用JSON提取器、正则表达式、BeanShell后置处理器等进行参数传递和处理。
  • 测试结果分析

    • JMeter提供了多种测试报告,如聚合报告和HTML格式的测试报告,帮助分析测试结果。
  • 插件扩展

    • JMeter插件如JMeterPlugins-Standard和JMeterPlugins-Extras提供了额外的功能,如更详细的图表和统计信息。
  • 负载测试运行

    • 在进行负载测试时,需要正确调整机器大小、操作系统调优和Java安装,以确保JMeter能够高效运行。
  • 增加Java堆大小

    • 默认情况下,JMeter以1GB的堆运行,这可能不足以用于大型测试,具体取决于测试计划和线程数。可以通过设置环境变量来增加Java堆大小。

通过遵循这些步骤和关键点,你可以有效地使用JMeter来进行性能测试和接口测试。JMeter的灵活性和强大的功能使其成为性能测试领域的一个宝贵工具。

JMeter支持哪些参数化技术?

JMeter支持多种参数化技术,以下是一些常用的参数化方法:

  1. CSV Data Set Config

    • 这是最常用的参数化方法,适用于参数取值范围较大、灵活性强的场景。通过读取CSV文件中的数据并生成变量,被JMeter脚本引用,实现参数化。
    • 在线程组右键添加配置元件,选择CSV Data Set Config,设置文件路径、变量名称和分隔符等参数。
  2. User Parameters

    • 适用于参数取值范围很小的场景。通过添加前置处理器中的用户参数,可以添加多个参数和对应的值。
    • 每个线程会一直使用一组数据,例如设置4个线程并发,那么线程1使用用户_1的数据,线程2使用用户_2的数据,以此类推。
  3. 函数助手(Function Helper)

    • 使用JMeter提供的函数生成参数,如__Random函数,可以生成随机数字和随机字符串实现参数化。
    • 通过菜单“选项”->“函数助手对话框”,即可在“函数助手”弹出框上找到JMeter提供的多种函数。
  4. 用户定义的变量(User Defined Variables)

    • 用户自定义变量更多用于设置全局变量,如参数化文件路径、host、url等。
    • 在线程组或测试计划上右键添加配置元件,选择用户定义的变量,添加变量名和相对应的值。
  5. HTTP请求默认值

    • 对于请求中不变的参数,如URL、端口等,可以使用HTTP请求默认值元件,避免在每个请求中重复填写。

这些参数化技术可以帮助测试人员根据不同的测试需求和场景,灵活地管理和使用测试数据,实现数据驱动的测试。

常见插件及其功能

JMeter插件可以显著扩展其功能,以下是一些常用的JMeter插件及其扩展的功能:

  1. JMeter Plugins Manager

    • 这是一个插件管理工具,允许用户在JMeter内部搜索、安装、卸载和更新其他插件。通过JMeter Plugins Manager,用户可以轻松管理JMeter插件,无需手动下载和添加jar文件。
  2. Basic Graphs

    • 包含三个插件,用于在性能测试中监控关键指标:
      • Transactions per Second(TPS):监控每秒事务数。
      • Response Times Over Time(TRT):监控事务响应时间。
      • Active Threads Over Time:统计每秒活动的线程总数。
  3. PerfMon Metrics Collector

    • 服务器性能监控数据采集器,用于在性能测试中实时监控服务器的资源使用情况,如CPU、内存、I/O等。
  4. Custom Thread Groups

    • 提供了额外的线程组类型,如阶梯式加压线程组(jp@gc - Stepping Thread Group),允许用户以非线性方式增加线程压力。
  5. WebSocket Samplers

    • 允许JMeter进行WebSocket通信的插件,包括WebSocket Open Connection和WebSocket request-response Sampler取样器。
  6. jpgc - Standard Set

    • 包含多个有用的插件,如阶梯式加压线程组和多种监听器,用于监控TPS、响应时间和线程活动。
  7. Composite Graph

    • 允许同时展示多个图表,使得用户可以在一个界面上比较不同的性能指标。
  8. Bytes Throughput Over Time

    • 展示不同时间的吞吐量(按字节Bytes展示),与聚合报告中的Throughput(按请求个数展示)相辅相成。
  9. HTML Report

    • 生成HTML格式的测试报告,提供更丰富的结果分析和可视化展示。
  10. JSON Path Assertion

    • 用于处理JSON格式数据的插件,可以根据JSON路径表达式提取字段并进行断言判断。

通过这些插件,JMeter能够提供更全面的性能测试支持,包括更复杂的测试场景模拟、更详细的结果分析和更强大的数据处理能力。使用这些插件可以显著提升测试效率和准确性。

工作界面展示

jemeter-ws

相关文献

JMeter官网地址

相关文章:

【Java知识】Java性能测试工具JMeter

一文带你了解什么是JMeter 概述JMeter的主要功能:JMeter的工作原理:JMeter的应用场景:JMeter的组件介绍: 实践说明JMeter实践基本步骤:JMeter实践关键点: JMeter支持哪些参数化技术?常见插件及其…...

Git 安装

一、下载安装包 Git官网 https://git-scm.com/ Git 阿里镜像 二、安装 点击安装包运行,基本上一路 next 就行。 使用许可声明 选择安装目录 选择组件,默认勾选就行 选择开始菜单文件夹,默认就行 选择 Git 的默认编译器,默认 V…...

【Python】FastAPI:Token认证

FastAPI:Token认证 本教程通过 FastAPI 实现用户登录和基于 JWT(JSON Web Token) 的认证与授权,适合初学者到进阶用户。教程特别关注 Depends、OAuth2PasswordBearer 等非基础操作的详细讲解,帮助你全面掌握相关技术。…...

【FAQ】HarmonyOS SDK 闭源开放能力 —ArkUI

1.问题描述: App启动的时候会有个弹框,询问用户是否需要进去隐私模式,在该隐私模式下,App不能获取任何用户信息。当前鸿蒙App级别是否有隐私模式? 解决方案: 当前实现隐私模式都是三方应用自己实现&…...

ubuntu没有了有线网络如何修复

今天打开ubuntu之后发现有线网络连接没有了,如下图,此时是修复好之后的,“有线”部分存在,出现问题时是不存在的 此时只需要修改NetworkManager.conf配置文件,将managedfalse更改为managedtrue,保存退出就可以了 sudo…...

渗透学习之windows基础

引路Windows基础之病毒编写(完结)_哔哩哔哩_bilibili windows基础(2) 21 ftp 23 tenlet 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 msspl 1521 oracle 2082/2083 cpanel 主机管理系…...

【Swift】运算符

文章目录 术语赋值运算符算数运算符基本四则算术运算符求余运算符一元负号运算符一元正号运算符 比较运算符三元运算符空合运算符区间运算符闭区间运算符半开区间运算符单侧区间运算符 逻辑运算符逻辑非运算符逻辑与运算符逻辑或运算符逻辑运算符组合计算 位运算符运算符优先级…...

minikube start --driver=docker 指定国内镜像

要在Ubuntu 22上使用Minikube并指定国内镜像,你可以根据以下步骤操作: 安装Minikube: 你可以通过阿里云提供的国内源来安装Minikube,这样可以避免访问国外源的问题。使用以下命令安装Minikube: curl -Lo minikube http…...

Quality minus junk论文阅读

Quality minus junk论文阅读 文章目录 Quality minus junk论文阅读 AbstractTheoretical FrameworkEmpirical AnalysisDataQuality scorePortfoliosEx ante quality forecasts fundamentals Results and DiscussionThe price of qualityUnderstanding the price of quality: th…...

Apache和HTTPS证书的生成与安装

摘要 介绍linux系统下使用openssl生成https证书,并将证书安装在apache服务器上,最终实现通过https访问服务器。这个过程涉及到openssl生成自签名证书(适用于测试环境),修改apache配置,开放防火墙https端口…...

前端—Cursor编辑器

在当今快速发展的软件开发领域,效率和质量是衡量一个工具是否优秀的两个关键指标。今天,我要向大家推荐一款革命性的代码编辑器——Cursor,它集成了强大的AI功能,旨在提高开发者的编程效率。以下是Cursor编辑器的详细介绍和推荐理…...

【数据结构】【线性表】【练习】删除链表倒数第n个结点

目录 申明 题目 分析题目信息 解题思路 代码解析 技巧解析:创建虚拟头结点 时间复杂度分析 思考:能否只用一趟扫描实现? 双指针 双指针解题思路 代码解析 申明 该题源自力扣题库19,文章内容(代码&#xff0c…...

MySQL高级(四):索引

基础概念 什么是索引? 索引是一种数据结构,用于加速查询的过程。它类似于书本的目录,可以快速定位数据行。MySQL 索引主要是基于 B 树(也有其他类型如哈希索引、全文索引等)来实现的。 为什么使用索引? …...

hhdb数据库介绍(9-21)

计算节点参数说明 checkClusterBeforeDnSwitch 参数说明: PropertyValue参数值checkClusterBeforeDnSwitch是否可见否参数说明集群模式下触发数据节点高可用切换时,是否先判断集群所有成员正常再进行数据节点切换默认值falseReload是否生效是 参数设…...

React中组件通信的几种方式

在构建复杂的React应用时,组件之间的通信是至关重要的。从简单的父子组件通信到跨组件状态同步,不同组件之间的通信方式多种多样。 1. 父子组件通信 父子组件通信是 React 中最基本的通信方式之一。在这种模式下,数据是从父组件通过 props …...

python脚本实现csv中百度经纬度转84经纬度

数据准备 csv文件,带百度经纬度字段:bd09_x,bd09_y 目的 将百度经纬度转换为84经纬度,并在csv文件中添加两个字段:84_x,84_y python脚本 from ChangeCoordinate import ChangeCoordimport pandas as pd import numpy as npcoord = ChangeCoord()def bd09_to_wgs84...

syslog udp配置笔记

要将 /var/log/ 目录下的日志信息通过 UDP 发送到远程服务器,可以使用 rsyslog 的配置来实现。以下是详细步骤: 步骤 1:确保 rsyslog 已安装 如果 rsyslog 没有安装,请使用以下命令进行安装: 在 CentOS/RHEL: sudo yum install rsyslog在 Ubuntu/Debian: sudo apt-get i…...

Linux环境开启MongoDB的安全认证

文章目录 1. MongoDB安全认证简介1.1 访问控制1.2 角色1.3 权限 2. MongoDB中的常见角色3. MongoDB Shell3.1 下载MongoDB Shell3.2 通过MongoDB Shell连接MongoDB 4. 创建管理员用户5. 为具体的数据库创建用户6. 开启权限认证7. 重启MongoDB服务8. 连接MongoDB9. MongoDB数据库…...

django基于Python的农产品销售系统的设计与实现

摘 要 随着现代人们的快速发展,农产品销售系统已成为农产品的需求。该平台采用Python技术和django搭建系统框架,后台使用MySQL数据库进行信息管理;通过个人中心、用户管理、商家管理、产品类型管理、农产品管理、系统管理、订单管理等功能&a…...

linux复习5:C prog

编辑 缩排 为了使C源代码更加整洁易读,可以使用一些工具来自动格式化代码,例如cb(C程序美化器)、bcpp(C美化器)和indent等。 编译 编译并链接C文件 gcc hello.c -o hello 将 hello.c 编译并链接成可执行文…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

快刀集(1): 一刀斩断视频片头广告

一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...