JMeter

devtools/2024/12/22 20:04:25/

通过AI可知:

Apache JMeter 是一款开源的、基于Java的压力测试和性能测试工具,它主要用于对软件和服务器进行性能测试和负载测试。JMeter 可以模拟多种用户请求,包括但不限于Web请求、数据库请求、FTP请求等,以评估系统在高负载情况下的表现。

以下是JMeter的一些主要特性:

  • 多协议支持:JMeter 支持多种协议,包括HTTP/HTTPS、FTP、TCP/UDP、JDBC等。
  • 多线程测试:JMeter 可以模拟多用户同时对服务器进行请求,以测试服务器在高并发情况下的性能。
  • 图形化界面:JMeter 提供了直观的图形化界面,用户可以通过拖拽组件来构建测试计划。
  • 结果分析:JMeter 提供了丰富的结果分析工具,包括图表、聚合报告等,帮助用户了解测试结果。
  • 可扩展性:JMeter 允许用户通过编写自定义代码来扩展其功能,例如添加新的协议支持或自定义的断言。
  • 远程测试:JMeter 支持分布式测试,可以在多个服务器上运行测试计划,以模拟更大规模的负载。
  • 脚本功能:JMeter 支持使用JMeter脚本语言(JSR223)编写脚本,以实现更复杂的测试逻辑。
  • 集成其他工具:JMeter 可以与其他工具集成,如CI/CD工具、监控工具等,以实现自动化测试和性能监控。
  • 跨平台:JMeter 是基于Java开发的,因此可以在任何支持Java的平台上运行。
  • 社区支持:作为一个开源项目,JMeter 有一个活跃的社区,用户可以从社区获得帮助和资源。

JMeter 通常用于以下场景:

  • - 性能测试:评估应用程序在特定负载下的性能。
  • - 负载测试:模拟大量用户同时访问应用程序,以测试其在高负载下的行为。
  • - 压力测试:测试应用程序在极端条件下的稳定性和性能。
  • - 配置测试:测试不同硬件、软件、网络配置对应用程序性能的影响。
  • - 可用性测试:模拟用户操作,测试应用程序的可用性和响应时间。

JMeter 是性能测试工程师和开发人员常用的工具之一,它帮助他们识别性能瓶颈,优化系统性能。

JMeter⼯作原理

安装JMeter

打开JMeter

  • 方式一:点击bat文件

  • 方式二:命令行启动
  • 添加JMeter系统环境变量

  • 修改JMeter语言:在JMeter的bin目录下,修改文件中的内容:language=zh_CN

JMeter基本使⽤流程

  • 启动JMeter
  • 在“测试计划”下添加“线程组

  • 在“线程组”下添加“HTTP”取样器
  • 填写“HTTP请求”的相关请求数据

  • 在“线程组”下添加“查看结果树”监听器

  • 点击“启动”按钮运⾏,查看接⼝测试结果

JMeter元件作⽤域和执⾏顺序

在JMeter中,元件的作⽤域和执⾏顺序是⾮常重要的概念

作⽤域:

  • JMeter元件的作⽤域主要由测试计划的树形结构中的元件⽗⼦关系来确定。

执⾏顺序:

  • 取样器(sampler)元件内组件不依赖其他元件就可执⾏,因此取样器不存在作⽤问题
  • 元件作⽤域只对它的⼦节点有作⽤
  • 其他作⽤域默认根据测试计划中树形结构来定;

重点组件

线程组

控制JMeter将⽤于执⾏测试的线程数,也可以把⼀个线程理解为⼀个测试⽤⼾。

线程数:⼀个线程即⼀个测试⽤⼾,设置发送的请求次数

Ramp-up时间(秒):设置性能测试运⾏时间,单位为秒 循环次数:

  1. 配置指定次数:控制脚本循环执⾏的次数
  2. 配置循环永远
  • 需要调度器配置使⽤
  • 运⾏时间:脚本执⾏时间
  • 延迟启动时间:脚本等待指定时间才能运⾏

HTTP取样器

添加必需的配置:

http协议

http主机名/IP

端⼝

  • http协议端⼝号80
  • https端⼝号443

请求⽅法

路径(⽬录+参数)

  • 内容编码(默认的ISO国际标准,但对中⽂⽀持不友好,可以使⽤utf-8)

参数

  • 参数可以拼在路径⾥,也可以卸载参数中
  • POST参数要放到消息体数据中{wd:test}

查看结果树

取样器结果:统计请求相关的信息

Thread Name:线程组名称
Sample time:发送请求时间
load time:响应时间
Response code :接⼝响应状态码
  • 请求:HTTP请求的请求头和请求体的详细信息
  • 响应:HTTP响应的响应头和响应体的详细信息

HTTP Cookie管理器

选择standard即可 

HTTP Cookie管理器像Web浏览器⼀样存储和发送Cookie。如果HTTP请求并且响应包含cookie,则 Cookie管理器会⾃动存储该cookie,并将其⽤于将来对该特定⽹站的所有请求。每个JMeter线程都有 ⾃⼰的"cookie存储区"。因此,正在测试使⽤cookie存储会话信息的⽹站,则每个JMeter线程都将拥 有⾃⼰的会话。此类Cookie不会显⽰在Cookie管理器显⽰屏上,可以使⽤"查看结果树监听器"查看。 缓存配置可选择standard(标准)或compatibility(兼容的),当然也可以⼿⼯添加⼀些cookie.

添加了HTTP Cookie管理器后,会⾃动存储并发送Cookie

如果设置了Cookie就会自动发送Cookie

HTTP请求默认值

  • 设置HTTP协议默认值

⽤⼾定义的变量

添加⽅式:线程组—配置元件—⽤⼾定义的变量

可以自定义变量

有时我们只想要在固定的场景⾥使⽤参数化,改动后不希望影响到其他的脚本。

使⽤:在HTTP请求的取样器中引⼊定义的变量。${参数名}

适⽤场景:变量需要在多个脚本中使⽤,⽅⾯统⼀管理和修改

CSV数据⽂件设置

以登陆接⼝为例,当我们执⾏登陆接⼝的性能测试时,⼿动配置了⽤⼾名和密码为固定的username和 password,然⽽实际使⽤中不可能只有⼀个⽤⼾登陆,为了模拟更真实的登录环境,我们需要提供更 多的⽤⼾username和password来实现登录操作

添加⽅式:线程组⸺配置元件⸺CSV数据⽂件设置

操作步骤

CSV数据⽂件设置
  • ⽂件名:填写csv⽂件的路径。建议使⽤绝对路径
  • ⽂件编码:UTF-8 • 变量名称:从csv数据⽂件中读起的数据需要保存到的变量名。有多个变量时⽤逗号分隔
  • 是否忽略⾸⾏:是否从csv数据⽂件第⼀⾏开始读取
  • 分隔符:要求与csv数据⽂件中多列的分隔符⼀致
  • 遇到⽂件结束符再次循环:若选择为True当数据不够的时候会从头取。若选择False,则需要勾选 下⾯的配置,遇到⽂件结束符停⽌线程,这⾥如果不勾选,请求将会报错

  • 编写test.csv⽂件,⽰例:

  • 修改登陆接⼝及其他涉及到username和password获取的参数

  • 修改完该配置后,登陆接⼝发起请求时将从csv⽂件中获取配置好的username和password参数,获 取顺序为从上往下依次获取
  • 修改线程组中线程数,使得每次取到的username和password都不⼀样

JSON提取器

  • 接⼝响应成功,通过提取返回值对应字段,可⽤于其他接⼝的参数配置
  • 添加JSON提取器

针对某⼀个HTTP请求接⼝添加JSON提取器

{"name": "John Doe","age": 30,"isStudent": false,"grades": {"math": 90,"science": 78,"history": 82},"languages": ["English", "Spanish", "French"],"address": {"street": "123 Main St","city": "Anytown","state": "CA","zip": "12345"},"phoneNumbers": [{"type": "home","number": "212 555-1234"},{"type": "office","number": "646 555-4567"}],"hasPets": null
}

JSON操作符参考:

参考⽂档:https://github.com/json-path/JsonPath

  • 获取相应中的所有blogId元素:$..Id
  • 获取第⼀个blogId元素:$.[0]Id

添加JSON配置

配置json提取的参数

JSON断⾔

接⼝发送请求成功,响应码为200并不能完全代表接⼝请求成功,我们更多需要关注接⼝响应数据是否符合预期

添加JSON断⾔

针对某⼀个HTTP请求接⼝添加JSON断⾔

添加JSON配置

同JSON提取器语法配置

注意

  • 若不选Additionally assert value,表⽰添加断⾔值,则可⽤来判断字段是否存在
  • 选择Additionally assert value,则必须添加Expected Value期望的断⾔值
  • 若不选Match as regular expression正则匹配,则Expected Value必须填写完整,少⼀个字符都 会导致断⾔失败
  • 若选择Match as regular expression正则匹配,则Expected Value可以仅写上部分关键词即可断⾔成功

同步定时器(集合点)

为了达到并发的效果,需要添加同步定时器

  • JMeter同步定时器的作⽤主要在于模拟多⽤⼾并发访问的场景,确保多个线程能够同时执⾏某个操 作,以达到真正的并发效果
  • 当多个线程同时启动时,它们可能会在不同的时间间隔内执⾏,这样就⽆法达到真正的并发效果。同 步定时器的作⽤就是将这些线程的执⾏时间同步,使它们在同⼀时间点执⾏。它可以在多个线程之间 制造⼀定的延迟,直到同时到达指定时间点,再同时执⾏后续的操作
  • 此外,同步定时器可以理解为集合点,当线程数量达到指定值后,再⼀起释放,可以瞬间产⽣很⼤的 压⼒。这样,可以更好地模拟真实的⽤⼾并发访问场景,提⾼测试的准确性和可靠性
  • 在性能测试过程中,为了真实模拟多个⽤⼾同时进⾏操作以度量服务器的处理能⼒,可以使⽤同步定 时器来设置集合点。不过,虽然通过加⼊集合点可以约束请求同时发送,但不能确保请求同时到达服 务器,所以只能说是较真实模拟并发

现实⽣活中,红绿灯就相当于⼀个集合点,有⼈先到达,有⼈后达到,但必须等到绿灯后所有⼈才能开始过⼈⾏道

事务控制器

JMeter事务控制器的作⽤主要⽤于测试执⾏嵌套测试元素所花费的总时间。这相当于模拟⽤⼾进⾏⼀ 系列操作的测试

在进⾏⻚⾯性能测试或API性能测试时,事务控制器是⼀个⾮常重要的⼯具。它可以帮助测试⼈员更准 确地评估系统性能,尤其是在涉及多个接⼝或操作的复杂场景中。例如,在订单提交的过程中,可能 需要调⽤多个接⼝,并且某些接⼝可能依赖于前⼀个接⼝的结果。在这种情况下,使⽤事务控制器可 以将这些接⼝统⼀视为⼀个事务进⾏性能测试,从⽽得到更接近真实场景的性能测试结果

若不添加事务控制器,则⼀个接⼝即⼀个事务

添加了事务控制器后,可以将多个接⼝统⼀放到⼀个事务控制器下作为⼀个事务

安装插件

Install :: JMeter-Plugins.org

在真实企业压测场景中,我们通常为⼀点⼀点的逐步增加线程数,因此需要安装新的插件来⽀持线程 数的配置。

通过插件管理⼯具下载其他插件

下载其他监听器插件

下载线程组插件

点击Apply Changes and Restart JMeter等待下载完成并重启JMeter

下载完成后再线程和监听器中可以看到新增的元件

Stepping Thread Group

This group will start:启动多少个线程,同线程组中的线程数

First, wait for:等待多少秒才开始压测,⼀般默认为0

Then start:⼀开始有多少个线程数,⼀般默认为0


Next,add:下⼀次增加多少个线程数

threads every:当前运⾏多⻓时间后再次启动线程,即每⼀次线程启动完成之后的的持续时间;

using ramp-up:启动线程的时间;若设置为5秒,表⽰每次启动线程都持续5秒


then hold loadfor:线程全部启动完之后持续运⾏多⻓时间

finally,stop/threadsevery:多⻓时间释放多少个线程;若设置为5个和1秒,表⽰持续负载结束之后 每1秒钟释放5个线程

常⻅监听器

聚合报告

从聚合报告可以看到性能测试过程中整体的数据变化

 

Response Times Over Time

Response Times Over Time主要⽤于监听整个事务运⾏期间的响应时间。在测试过程中,它可以帮助 测试⼈员观察并分析响应时间的实时平均值以及整体响应时间的⾛向。通过这⼀监听器,测试⼈员能 够更直观地了解系统在不同时间点的响应性能,从⽽发现可能存在的性能问题或瓶颈。

Response Times Over Time的图形展⽰中,横坐标通常代表运⾏时间,⽽纵坐标则代表响应时间(单 位是毫秒)。测试人员可以根据图形中的趋势线来判断响应时间的稳定性以及是否存在⼤的波动。例 如,如果响应时间在某个时间点突然增加,这可能意味着系统在该时间点遇到了性能问题

Transactions per Second(TPS)

JMeter中的Transactions per Second(TPS)监听器是⼀个⽤于分析系统吞吐量的重要⼯具。TPS, 即每秒事务数,表⽰⼀个客⼾机向服务器发送请求后服务器做出反应的过程。这个指标反映了系统在 同⼀时间内处理业务的最⼤能⼒。TPS值越⾼,说明系统的处理能⼒越强。

在使⽤TPS监听器时,横坐标通常代表运⾏时间,⽽纵坐标则代表TPS值。通过监听器展⽰的图表,可 以清晰地看到TPS值随时间的变化情况。在图表中,红⾊通常表⽰通过的TPS,⽽绿⾊可能表⽰失败的 TPS。这有助于我们快速识别系统性能的变化和瓶颈。

测试报告

JMeter测试报告是⼀个全⾯⽽详细的⽂档,它提供了关于测试执⾏结果的详细信息,帮助⽤⼾全⾯评 估系统的性能并进⾏性能优化

⽣成性能测试报告的命令:

Jmeter -n -t 脚本⽂件 -l ⽇志⽂件 -e -o ⽬录
-n : ⽆图形化运⾏
-t : 被运⾏的脚本
-l : 将运⾏信息写⼊⽇志⽂件,后缀为jtl的⽇志⽂件
-e : ⽣成测试报告
-o : 指定报告输出⽬录

注意:⽇志⽂件和⽬录可以不存在,若为已经存在的情况下需要保证内容为空,否则会出现错误!

正确演⽰⽰例:

性能测试报告⽣成成功后,在rizhi⽂件夹下将出现以下内容:

双击index.html⽂件,界⾯展⽰如下:


http://www.ppmy.cn/devtools/123302.html

相关文章

SQL NULL 值

SQL NULL 值 概述 在SQL(Structured Query Language)中,NULL值是一个特殊的标记,用于表示缺失或未知的值。理解NULL值的概念对于数据库设计和查询非常重要,因为它们可以影响查询的结果和性能。本文将详细介绍SQL中NULL值的概念、使用场景以及如何处理它们。 NULL值的含…

101 公司战略的基本概念

公司战略的概念 传统概念(战略是终点途径):计划性、全局性、长期性现代概念(战略是途径):应变性、竞争性、风险性综合概念(前二者的折中):预先性、反应性公司的使命与目标…

Spring源码二IOC容器源码

文章目录 Spring IOC初始化源码剖析1.prepareRefresh2.obtainFreshBeanFactory3.prepareBeanFactory4.postProcessBeanFactory5.invokeBeanFactoryPostProcessors6.registerBeanPostProcessors7.initMessageSource8.initApplicationEventMulticaster9.onRefresh10.registerList…

虚拟化数据恢复—互斥不当导致vmfs卷损坏的数据恢复案例

虚拟化数据恢复环境: 某企业信息管理平台, 几台VMware ESX Server主机共享一台存储设备,大约有几十台虚拟机。 虚拟化故障&原因: Vcenter报告虚拟磁盘丢失。管理员通过ssh远程到ESX中执行fdisk -l命令查看磁盘,发…

通信工程学习:什么是FTP文件传输协议

FTP:文件传输协议 FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上交换文件的协议,它定义了文件传输时使用的命令和响应。作为最古老的互联网协议之一,FTP至今仍被广泛使用,并在网…

SQL进阶技巧:如何计算累计指标?

目录 0 需求描述 1 数据准备 2 问题分析 3 小结 如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下: 数字化建设通关指南 专栏 原价99,现在活动价59.…

【C语言刷力扣】LCR 182.动态口令

题目: 解题思路: 字符串拼接,先遍历复制从下标为 target 开始的 len - target 位字符,再遍历复制前 target位字符至末尾。 char* dynamicPassword(char* password, int target) {int len strlen(password);// int num 0;int i …

一个为分布式环境设计的任务调度与重试平台,高灵活高效率,系统安全便捷,分布式重试杀器!(附源码)

背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天,我们经常需要对某个数据请求进行多次尝试。然而,当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时,请求…