【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官网地址

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

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

相关文章

Redis的缓存穿透、缓存雪崩、缓存击穿问题及有效解决方案

目录 一、缓存穿透 1.简介 2.解决方案 3.修改前的代码 4.修改过后的代码 二、缓存雪崩 1.简介 2.解决方案 三、缓存击穿 1.简介 2.解决方案 3.用代码来实现互斥锁来解决缓存击穿 4.用代码来实现逻辑过期解决缓存击穿 四、缓存穿透和缓存击穿的区别 一、缓存穿透 …

CPU的性能指标总结(学习笔记)

CPU 性能指标 我们先来回顾下,描述 CPU 的性能指标都有哪些。 首先,最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。 用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用…

【go从零单排】Environment Variables环境变量

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,环境变量是用于配置程序行为的一种常见方式。它们可以用…

信捷PLC转以太网连接电脑方法

信捷XC/XD/XL等系列PLC如何上下载程序?可以选择用捷米特JM-ETH-XJ模块轻松搞定,并不需要编程,即插即用,具体看见以下介绍: 产品介绍 捷米特JM-ETH-XJ是专门为信捷PLC转以太网通讯面设计,可实现工厂设备信息化需求,对…

【golang-技巧】-线上死锁问题排查-by pprof

1.背景 由于目前项目使用 cgo golang 本地不能debug, 发生死锁问题,程序运行和期待不一致,通过日志排查可以大概率找到 阻塞范围,但是不能找到具体问题在哪里,同时服务器 通过k8s daemonset 部署没有更好的方式暴露端口 获取ppr…

AVL树的删除方法简单实现

看过前面的AVL树的介绍和插入方法实现AVL树了解并简单实现-CSDN博客,接着可以来学习删除方法的实现 目录 1.AVL树的删除 2.平衡因子调节 3.删除代码逻辑 4.AVL树的整体代码 1.AVL树的删除 因为AVL树也是二叉搜索树,可按照二叉搜索树的方式将节点删除…

ArcGIS的汉字(亚洲文本)垂直标注

01 需求说明 实现ArcGIS的汉字(亚洲文本的垂直标注)。 启用 Maplex 标注引擎。 在标注 工具条上单击标注管理器按钮 。 选中要进行标注的图层旁边的复选框。 选择图层下方的标注分类。 单击符号。 选中 CJK 字符方向复选框。 仅当字体有垂直的文本度…

飞凌嵌入式RK3576核心板已适配Android 14系统

在今年3月举办的RKDC2024大会上,飞凌嵌入式FET3576-C核心板作为瑞芯微RK3576处理器的行业首秀方案重磅亮相,并于今年6月率先量产发货,为客户持续稳定地供应,得到了众多合作伙伴的认可。 FET3576-C核心板此前已提供了Linux 6.1.57…

基于python的dlib库的人脸识别实现

1、环境搭建 基于dlib库的人脸识别环境配置需求如下: conda create -n dlibFace python3.6.4 conda activate dlibFacepip install dlib19.8.1 pip install opencv-python3.4.1.15 pip install tqdm 安装如下: 2、模块介绍 2.1 源代码下载 源代码点击:下载源代码 2.2 源码…

Ubuntu问题 -- 允许ssh使用root用户登陆

目的 新重装的系统, 普通用户可以使用ssh登陆服务器, 但是root不能使用ssh登陆 方法 vim 编辑ssh配置文件 sudo vim /etc/ssh/sshd_config找到 PermitRootLogin 这一行, 把后面值改成 yes 重启ssh sudo service sshd restart然后使用root账号登陆即可

DAY6 线程

作业1&#xff1a; 多线程实现文件拷贝&#xff0c;线程1拷贝一半&#xff0c;线程2拷贝另一半&#xff0c;主线程回收子线程资源。 代码&#xff1a; #include <myhead.h> sem_t sem1; void *copy1()//子线程1函数 拷贝前一半内容 {int fd1open("./1.txt",O…

第六十四周周报 TCN-LSTM

文章目录 week 64 TCN-LSTM摘要Abstract1. 题目2. Abstract3. 文献解读3.1 Introduction3.2 创新点 4. 网络结构4.1 数据分析4.2 混合深度学习框架的开发 5. 实验结果6.结论 week 64 TCN-LSTM 摘要 本周阅读了题为A hybrid deep learning approach to improve real-time effl…

单元测试时报错找不到@SpringBootConfiguration

找到问题出现原因&#xff1a; 错误表示 Spring Boot 在运行测试时无法找到 SpringBootConfiguration 注解。 通常&#xff0c;SpringBootTest注解用于加载 Spring Boot 应用上下文&#xff0c;但它需要找到一个带有SpringBootConfiguration&#xff08;或者Configuration&am…

【图像压缩感知】论文阅读:Content-Aware Scalable Deep Compressed Sensing

tips&#xff1a; 本文为个人阅读论文的笔记&#xff0c;仅作为学习记录所用。本文参考另一篇论文阅读笔记 Title&#xff1a; Content-Aware Scalable Deep Compressed Sensing Journal&#xff1a; TIP 2022 代码链接&#xff1a; https://github.com/Guaishou74851/CASNet…

浙大版《C语言程序设计(第4版)》题目集(一)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

谷歌AI进军教育,这将改变未来?

近日&#xff0c;谷歌&#xff08;Google&#xff09;正式发布了一款名为“Learn About”的全新人工智能工具&#xff0c;这犹如一颗耀眼的新星&#xff0c;在教育领域掀起了一阵波澜。这款产品具有诸多令人瞩目的亮点&#xff0c;为学习者带来了全新的学习体验。 个性化的学习…

Python酷库之旅-第三方库Pandas(218)

目录 一、用法精讲 1021、pandas.DatetimeIndex.inferred_freq属性 1021-1、语法 1021-2、参数 1021-3、功能 1021-4、返回值 1021-5、说明 1021-6、用法 1021-6-1、数据准备 1021-6-2、代码示例 1021-6-3、结果输出 1022、pandas.DatetimeIndex.indexer_at_time方…

MATLAB用到的矩阵基础知识(矩阵的乘和矩阵的逆)

1. 矩阵乘法 方法: 设第一个矩阵为 A A A,第二个矩阵为 B B B,则 A A A的第一行乘 B B B的第一列,先想乘再相加,作为目标矩阵的一个元素。 前提条件: 所以我们可以看到矩阵相乘的前提条件:第一个矩阵的列数等于第二个矩阵的行数。否则,我们就无法进行行和列的相乘。 最…

SpringBoot+MyBatis+MySQL的Point实现范围查找

前言 最近做了一个功能&#xff0c;需要通过用户当前位置点获取指定范围内的数据。由于后端存储用的是 MySQL&#xff0c;故选择使用 MySQL 中的 Point 实现范围查找功能。ORM 框架用的是 MyBatis&#xff0c;MyBatis 原生并不支持 Point 字段与 POJO 的映射&#xff0c;需要自…

共享门店模式:创新零售的新篇章

​在消费升级和数字化转型的双重浪潮下&#xff0c;传统零售业正面临前所未有的挑战与机遇。其中&#xff0c;共享门店模式作为一种创新的商业模式&#xff0c;正逐渐成为实体店铺应对电商冲击、提升运营效率和市场竞争力的重要途径。本文将深入解析共享门店模式的内涵、优势、…