【JMeter】JMeter的工作原理

article/2025/9/18 17:13:33

一、JMeter简介

JMeter是Apache组织开发的基于Java的开源的压力测试工具、接口测试工具

可以模拟高并发和多次循环的测试场景,能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试,具有可移植性

二、压测的原理

性能测试的核心三原则: 基于协议,多线程,场景模拟

  • 基于协议
    基于应用层和传输层的各种协议,比如http、udp、ftp和tcp等
  • 多线程
    通过进程下启动线程的方式来模拟并发用户实现负载
  • 场景模拟
    通过模拟用户使用的真实场景,来提高性能测试的准确性

JMeter压测的核心原理
基于各种协议,通过多线程的方式来模拟并发用户,设计各种场景来模拟真实的用户负载

三、JMeter执行原理

3.1 压力的定义

所谓压力,其实就是单位时间内向服务器发起的请求数
jmeter在设计压力模式的时候,引入了两层概念:

  • 第一是线程
  • 第二是迭代

一个人在单位时间内,可能发起一次请求,也可能发起多次,那么JMeter就通过线程*迭代,来模拟单位时间内用户多次发起请求的场景

把单位时间内线程*迭代的次数称之为压力

3.2 执行原理

3.2.1 为何选择线程模拟

操作系统有多个进程,进程有多个线程。多进程、多线程,正好可以用来模拟多个用户,对系统造成多个并发。JMeter、LoadRunner等压测工具的原理就是基于原理

  • LoadRunner
    LoadRunner既支持多进程模拟,也支持多线程模拟

  • JMeter
    JMeter由Java实现,运行在JVM虚拟机上,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载机,JMeter选择了以线程方式来运行

3.2.2 执行逻辑

JMeter运行在java虚拟机上的,基本原理是建立一个线程池,通过线程组驱动多线程,多线程运行sampler产生负载,在运行过程中通过断言来验证结果的正确性,可以通过添加监听器(聚合报告、图形结果和查看结果树等)来记录测试结果

3.2.3 使用说明

  1. 如果取样器中有参数化需求,可以通过配置元件或者前置处理器来完成
  2. 如果取样器中有关联需求,可以通过后置处理器来完成
  3. 如果要模拟负载场景,比如模拟多少用户,运动多长时间,可以通过线程组完成
  4. 如果要模拟并发场景,可以通过定时器来完成(一般不不需要设置,定时器绝对并发这种场景有点不太符合实际业务场景)
  5. 如果要控制业务的执行逻辑,比如登录只运行一次,可以通过控制器来完成

3.2.4 执行模式

JMeter运行场景不仅可以再gui方式中完成,还可以运行命令行,而且命令行的运行方式对于负载机的资源消耗会更小

四、远程运行

线程创建过多会占用大量系统资源,一般单台机器性能稍微好点的跑500的并发,内存就比较吃紧
压力测试时,压力机本身并不应该成为性能瓶颈,否则压测就没有意义,所以实际测试成百上千的并发时,单台机器显然不够,需要考虑用负载机群,即用多台负载机分布来模拟并发,如图所示
在这里插入图片描述

4.1 控制机

管理远程负载机,控制远程负载机脚本运行,收集远程负载机测试结果。控制机本身也是个负载机

4.2 负载机

向被测应用系统发起负载
远程负载机首先要启动客户端(Agent: bin 目录下 jmeter-server.bat),才能被控制机接管
如果远程负载机脚本需要参数或依赖jar包,需要使用自动化工具从控制机发送到远程负载机

4.3 远程运行逻辑

  1. 远程负载机启动 Agent 客户端,等待控制机连接
  2. 控制机连接上远程负载机
  3. 控制机发送指令到远程负载机启动线程
  4. 远程负载机运行脚本,回传结果数据
  5. 控制机收集结果并显示

4.4 远程运行脚本

  1. 远程负载机启动 jmeter-server.bat
  2. 在控制机 bin\JMeter.properties 文件中,找到 remote_hosts,添加远程负载机的ip和port
  3. 多个远程负载机,ip用逗号分隔,如remote_hosts=192.168.0.1:1664,192.168.0.2:1664
  4. 1664是JMeter的Controller和Agent之间进行通讯的默认RMI端口号
  5. 在控制机打开GUI,菜单栏Run下执行Remote命令,控制远程负载机启动,停止,退出

远程方法调用(Remote Method Invocation ,RMI)
使用户能访问在另一主机上的Java对象,并远程调用其方法
程序的对象是客户,而远程对象是服务器。远程对象也可以是另一个远程服务对象的客户
通过使用持续性(串行化和解串行化),本地对象和原始类型值可以作为参数传递给远程对象。这种方式允许Java程序可以利用分布式计算将工作量分散到多个Java虚拟机上

五、JMeter目录

JMeter 安装包是绿色版,解压即用,解压后的目录
在这里插入图片描述

  • bin:配置文件、启动文件、启动jar包、示例脚本等
  • docs:JMeter API离线帮助文档
  • extras:辅助功能,可以与Ant、Jenkins集成
  • lib:组件,基础包放在 lib 根目录下,扩展包放在 lib/ext 目录下
  • licenses:证书文本文件
  • printable_docs:JMeter 离线帮助文档
  • LICENSE:证书说明
  • NOTICE:版权声明
  • README:JMeter简介

http://chatgpt.dhexx.cn/article/HUREvanq.shtml

相关文章

jmeter设置参数化

设置参数化方法有3种 第一种: 1.打开 jmeter,导入badboy录制的脚本 导入后记得选择“step”右键选择change controller -》逻辑控制器-》循环控制器或者简单控制器 注意:badboy 仅s适用于B/S架构的产品录制 因为内置浏览器的内核的兼容性问题…

JMeter接口测试_参数化

对应qq群号:616961231 简介: 环境: Mac OS home 目录类似windows 的自建目录 如: D:/test/id.txt 上篇内容介绍了jmeter的基本使用, 略微提了如何做参数化, 本篇对参数化做进一步深入讲解. Jmeter大概有以下几种参数化方法: 参数化方式使用场景1User Parameters适用于参…

Jmeter如何实现参数化用户,并且管理Cookie

谈到性能测试,经常需要对用户进行参数化,jemter工具参数化经常使用的一个元件就是CSV数据文件设置 一、 操作步骤 1. 首先建议大家创建一个规范的目录保存文件 目录作用data保存参数result保存结果script保存脚本 2. 如下图所示 设置目录的好处&#x…

jmeter + mysql数据驱动自动化测试

测试对象:前端web等后端接口mysql数据库 https://www.cnblogs.com/testfan2019/p/12124093.html 需求: 通过后端接口,对数据进行查询,对比查询返回内容和数据库内容是否一致。 Jmeter配置: 安装mysql驱动包 1. 下…

Jmeter参数化设置,多用户登录

一、模拟多用户登录场景 如登录模式如下图所示,登录界面中需要输入:用户名、密码、验证码 用户名以及密码均是固定值,不需要做处理。验证码需要处理一下,可以后台配置成固定值,具体可以找开发咨询。 在此场景中&#x…

【完结版】jmeter+ant+python自动化框架,且支持jenkins持续集成

前言:本文是实现jmeterantpython脚本的自动化测试框架,并且把整套部署在jenkins,通过jenkins的构建来出发脚本的运行,而且还会在jenkins上展示html报告。本文记录搭建框架的整个步骤,以及遇到的问题和记录解决办法。 一…

Jmeter之参数化

这里我用到的是微信的获取access_token接口。 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET 共有三个参数。接下来是设计接口测试用例 新建一个excel文件,输入标题&#xff0c…

常用的Jmeter参数化技巧总结,总有一个你不知道

说起接口测试,相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

Jmeter关联实现及参数化使用解析

这篇文章主要介绍了Jmeter关联实现及参数化使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、Jmeter介绍 一款融合接口、性能都能完成的测试工具纯JAVA开发的工具开源工具支持多种协议应该是测试业界…

Jmeter系列之参数化

VOL 132 08 2020-06 今天距2021年206天 这是ITester软件测试小栈第132次推文 点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 07:30准时推送。 微信公众号后台回复“资源”、“测试工具包”领取测试资源,回复“21天打卡”一起学习成长,打…

Jmeter参数化---使用CSV 数据文件设置

上一篇写了jmeter做接口测试的流程(链接:使用 jmeter 做接口测试) 这一篇写的是如何参数化的做Jmeter接口测试 这次依然是获取access_token的接口,相关文档详询:(https://developers.weixin.qq.com/doc/offiaccount/…

Jmeter参数化--后置处理器之正则表达式提取器

在接口测试中,很多都需要依赖前一个请求的响应数据放到后一个请求的请求数据中来,在Jmeter中提供了正则表达式提取器来提取响应数据中的片段 本次使用的实例是微信公众号的客服发消息,在这个接口中,需要用到access_token接口返回…

jmeter java csv_Jmeter之csv参数化

Jmeter之csv参数化 创建数据源csv文件 在线程组中添加CSV Data Set Config 1、添加CSV Data Set Config 图 1 添加CSV Data Set Config 2、配置CSV Data Set Config 图 2 配置CSV Data Set Config Filename: 指保存信息的文件目录,可以相对或者绝对路径。否则会在jm…

Jmeter之数据参数化方法汇总

一、什么是参数化 Jmeter参数化是指将脚本中的某些需要输入数据使用参数来代替,在脚本运行时指定参数的取值范围和规则。脚本在运行时就可以根据需要选取不同的参数值作为输入。 常用的Jmeter的参数化请求,包括以下几种方式: 用户参数用户…

Jmeter参数化的方式

拿微信公众平台获取token-创建标签接口举例:微信公众平台 一、正则表达式提取参数 1、获取token后,使用后置处理器-正则表达式提取器,提取返回的token值 2、创建标签接口引用token参数 二、用户参数 1、选中线程组添加前置处理器&#xff…

JMeter参数化4种实现方式

1 参数化释义 什么是参数化?从字面上去理解的话,就是事先准备好数据(广义上来说,可以是具体的数据值,也可以是数据生成规则),而非在脚本中写死,脚本执行时从准备好的数据中取值。 参…

移动端适配

移动端适配是指在不同尺寸的手机设备上,页面能相对达到合理的展示(响应式)或者保持统一效果的等比缩放(看起来差不多)。本文介绍了移动端适配中需要掌握的基本概念和移动端页面开发中常用的适配方案。 一、基本概念 …

使用FTP(IOS FTP客户端开发教程)

本文翻译自新近Wrox出版社出版的,由Peter van de Put所著的《Professional.iOS.Programming》。该书题材比较新颖,结构合理,是一本不错的IOS开发书籍。本文译自该书第八章《Using FTP》。本文开放使用,不局限于转载、修改、增删&a…

移动端页面如何优雅的适配各种屏幕,包括PC端

本文为Varlet组件库源码主题阅读系列第八篇,读完本篇,可以了解到移动端页面如何适配各种尺寸的屏幕,包括pc端,另外如何将触摸事件转换成鼠标事件。 移动端适配 开发移动端页面,我们通常都会按照一个固定宽度的设计稿来…

FTP客户端和服务器的设计与实现

1 毕业设计目的和意义 2 1.1 毕业设计目的 3 1.1.1 目的一:面向系统的软件开发 3 1.1.2 目的二:面向网络应用的软件开发 3 2.毕业设计意义 3 2 毕业设计设计 4 2.1 概述 4 2.2 毕业设计原理 4 2.2.1 使用FTP协议下载文件的流程 4 2.2.2 相关类库说明 6 2…