【JMeter】JMeter的工作原理

一、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简介
  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sysu_lluozh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值