浅谈JMeter engine启动原理

目录
  • 一、简介
  • 二、配置简介
  • 三、开始原理讲解
  • 四、JMeter 引擎启动链路图

一、简介

本文主要介绍jmeter在控制台在点击执行之后底层所做的一些主要事情及内容,由于便于断点调试采用GUI方式进行操作

二、配置简介

为了调试方便,采用单线程,方式访问百度(若多线程可能断点会看晕,后面会讲到)

三、开始原理讲解

首先GUI下点击执行,在ActionRouter该类下执行performAction()方法,该类为执行后续流程的入口

ActionRouter是一个监听器,用于监听GUI事件流变化进行相应的操作

2. 进入Start类中doAction方法,会调用startEngine函数,表示开启jmeter引擎,当然不是里面开启,会在该函数进行一系列前置处理

接下来进入到StandardJMeterEngine类,这才是真正启动jmeter engine的入口,接下来我们看看在runTest函数中都做了些什么

run()方法做了些什么

从这两张图我们明白,jmeter启动过程会优先运行setup线程组中配置,其次运行线程组中配置,最后运行teardown线程组中配置

接下来讲解线程组到底如何运行,上图while (running && iter.hasNext()) {}代码块部分

现在我们进入到ThreadGroup该类处理环节,看看它到底做了什么

newThread.start()后我们开始进入JMeterThread类中run方法,看看它做了些什么,开始越来越接近重点了

doSampling()函数中会执行sampler.sample(null)该段代码,这里面会执行sample()方法并接收返回结果

上图打进去后会进入HTTPSampleProxy类调用sample函数,通过HTTPSamplerFactory工厂方法来获取请求类别

通过impl.sample(u, method, areFollowingRedirect, depth)函数会进入到HTTPHC4Impl实现类的sample方法,找到httpResponse = executeRequest(httpClient, httpRequest, localContext, url)执行部分

这个executeRequest()方法中会发生httpclient请求获取到响应数据

然后将响应数据以及请求配置的一些参数数据都传入到HTTPSampleResult类对象中,而HTTPSampleResult的父类就是SampleResult,到这儿请求响应处理结束

doSampling()函数处理完之后,就是得到的HTTPSampleResult对象做一些处理

processSampler()函数执行完之后会到sam = threadGroupLoopController.next();代码块

该代码块会得到一个LoopController循环控制器,获取下一个取样器Sampler,若没有则会跳出while循环

最后做一些清理动作

StandardJMeterEngine类run方法结尾部分,至此整个jmeter引擎启动到结束就到此结尾了

四、JMeter 引擎启动链路图

到此这篇关于浅谈JMeter engine启动原理的文章就介绍到这了,更多相关JMeter engine启动内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java使用jmeter进行压力测试

    本篇文章简单讲一下使用jmeter进行压力测试.其压测思想就是 通过创建指定数量的线程,同时请求指定接口,来模拟指定数量用户同时进行某个操作的场景. jmeter测试计划配置: 运行bin目录下的jmeter.sh,启动 1. 在测试计划上右键 - 添加线程组,设置线程数和循环次数, Rame-Up时间表示在多少秒内启动对应线程数的线程 2. 配置http请求,可以复制浏览器访问该接口时的请求头."从剪贴板添加"的方式还是很方便的. 可以配置请求默认值,该配置可以被整个线程组(也可以是

  • Jmeter常见函数使用方法汇总

    __intSum intSum 函数可用于计算两个或多个整数值的总和. 引用名称是可选的, 但它不能是有效的整数. {__intSum(2,5,MYVAR)} 将返回 7 (2 5) 并将结果存储在 MYVAR 变量中.因此 {MYVAR} 将等于7. ${__intSum(2,5,7)} 将返回 14 (2 5 7) 并将结果存储在 MYVAR 变量中. {__intSum(1,2,5,${MYVAR})} 如果 MYVAR 值等于8.1 2 5 {MYVAR}, 则返回16 __longSu

  • Jmeter测试必知的名词及环境搭建

    那么什么是性能测试,它与功能测试有什么样的区别? 性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试 简单的来说性能测试和功能测试最大的区别在于功能测试通常有明确的需求说明.而性能测试却需要顾及方方面面. 测试人员眼中的性能测试需要考虑全面的性能,包括用户.开发.管理员等各个视角的性能.做性能测试时除了要关注表面的现象如响应时间,也需要关注本质,比如用户看不到的服务器资料利用率,架构设计是否合理?代码是否合理等方方面面. 所以,做性能测试的测试工程师也

  • jmeter添加自定函数的实例(jmeter5.3+IntelliJ IDEA)

    1.打开IntelliJ IDEA,新建一个Maven项目 2.导入Jmeter的依赖包 在idea中导入jmeter下的ApacheJMeter_core.jar和ApacheJMeter_functions.jar依赖包 3.添加java自定义函数 要实现扩展JMeter function,主要有两点: 实现function的类的package声明必须包含".functions"需要继承org.apache.jmeter.functions.AbstractFunction,并且实

  • JMeter对数据库的查询操作步骤详解

    提示: 关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了.因为配置数据库连接是比较固定的步骤,这里就不重复讲解了. 本篇文章主要详细说明,使用JDBC Request组件,如何对数据库进行查询的各种操作. JMeter中查询语句的操作步骤: 添加测试计划. 添加线程组,设置线程组的次数. 添加JDBC Connection Configuration组件,配置数据库连接. 添加JDBC Request请求,编写SQL语句,使用参数化.运行脚本,发送SQL请求. 添加察看结果树

  • jmeter-正则表达式实例讲解

    目录 实例1:从JDBC查询数据,并提取查询结果 实例3(简单):提取单个字符串 实例4(简单):提取多个字符串 实例5(简单):找到所有小数的数字,比如10.2 实例6(简单):找到所有小数点后的数字 实例7(简单):找到第一个有小数的数字 实例8(简单):找到所有小数的数字 正则表达式语法 过年前产假归来,jmeter很多知识生疏了,这两天打开jmeter摸索了几下,老了记不住,还是准备弄个jmeter系列随笔吧. 言归正传,使用jmeter时经常有这样的情况:一个完整的操作流程,需先完成某

  • 浅谈JMeter engine启动原理

    目录 一.简介 二.配置简介 三.开始原理讲解 四.JMeter 引擎启动链路图 一.简介 本文主要介绍jmeter在控制台在点击执行之后底层所做的一些主要事情及内容,由于便于断点调试采用GUI方式进行操作 二.配置简介 为了调试方便,采用单线程,方式访问百度(若多线程可能断点会看晕,后面会讲到) 三.开始原理讲解 首先GUI下点击执行,在ActionRouter该类下执行performAction()方法,该类为执行后续流程的入口 ActionRouter是一个监听器,用于监听GUI事件流变化

  • 浅谈springboot自动装配原理

    一.SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFi

  • 浅谈线性表的原理及简单实现方法

    一.线性表 原理:零个或多个同类数据元素的有限序列 原理图: 特点 : 1.有序性 2.有限性 3.同类型元素 4.第一个元素无前驱,最后一个元素无后继,中间的元素有一个前驱并且有一个后继 线性表是一种逻辑上的数据结构,在物理上一般有两种实现 顺序实现和链表实现 二.基于数组的 线性表顺序实现 原理 : 用一段地址连续的存储单元依次存储线性表数据元素. 原理图: 算法原理: 1.初始化一个定长的数组空间 elementData[] , size 存储长度 存储元素 2.通过索引来快速存取元素 3

  • 浅谈MySQL使用笛卡尔积原理进行多表查询

    MySQL的多表查询(笛卡尔积原理) 先确定数据要用到哪些表. 将多个表先通过笛卡尔积变成一个表. 然后去除不符合逻辑的数据(根据两个表的关系去掉). 最后当做是一个虚拟表一样来加上条件即可. 注意:列名最好使用表别名来区别. 笛卡尔积 Demo: 左,右连接,内,外连接 l 内连接: 要点:返回的是所有匹配的记录. select * from a,b where a.x = b.x ////内连接 l 外连接有左连接和右连接两种. 要点:返回的是所有匹配的记录 外加 每行主表外键值为null的

  • 浅谈Spring Session工作原理

    目录 1.引入背景 2.使用方法 3.工作流程 4.缓存机制 5.事件订阅 6.总结 1.引入背景 HTTP协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息.在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例session共享问题随之而来. 应用部署在Tomcat时,session是由Tomcat内存维护,如果应用部署多个实例,session就不能共享.Spring Ses

  • 浅谈Vue插槽实现原理

    目录 一.样例代码 二.透过现象看本质 三.实现原理 四.父组件编译阶段 五.父组件生成渲染方法 六.父组件生成VNode 七.子组件状态初始化 八.子组件编译阶段 九.子组件生成渲染方法 十.使用技巧 10.1.具名插槽 10.2.作用域插槽 一.样例代码 <!-- 子组件comA --> <template> <div class='demo'> <slot><slot> <slot name='test'></slot&g

  • 浅谈mysql join底层原理

    目录 join算法 驱动表和非驱动表的区别 1.Simple Nested-Loop Join,简单嵌套-无索引的情况 2.Index Nested-Loop Join-有索引的情况 3.Block Nested-Loop Join ,join buffer缓冲区 缓冲区大小 数据量大的表和数据量小的表如何选择连接顺序 细节 join算法 mysql只支持一种join算法:Nested-Loop Join(嵌套循环连接),但Nested-Loop Join有三种变种: Simple Nested

  • 浅谈Webpack4 plugins 实现原理

    目录 前言 认识 实践出真知 前言 在 wabpack 中核心功能除了 loader 应该就是 plugins 插件了,它是在webpack执行过程中会广播一系列事件,plugin 会监听这些事件并通过 webpack Api 对输出文件做对应的处理, 如 hmlt-webpack-plugin 就是对模板魔剑 index.html 进行拷贝到 dist 目录的 认识 先来通过源码来认识一下 plugins 的基本结构 https://github.com/webpack/webpack/blo

  • 浅谈React双向数据绑定原理

    目录 什么是双向数据绑定 实现双向数据绑定 数据影响视图 视图影响数据 如果已经学过Vue,并且深入了解过Vue的双向数据绑定的话,就会明白 Vue 2.0 双向数据绑定的核心其实是通过Object.defineProperty来实现数据劫持和监听. 在 Vue 3.0 中则通过 Proxy来实现对整体对象的监听,对 Vue2.0 的优化. 什么是双向数据绑定 数据模型和视图之间的双向绑定. 当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化:可以这样说用户在视图

  • 浅谈React底层实现原理

    目录 1. props,state与render函数关系,数据和页面如何实现互相联动? 2. React中的虚拟DOM 常规思路 改良思路(仍使用DOM) React的思路 深入理解虚拟DOM 3. 虚拟DOM的diff算法 4. React中ref的使用 5. React中的生命周期函数 6. 生命周期函数的使用场景 1. props,state与render函数关系,数据和页面如何实现互相联动? 当组件的state或者props发生改变的时候,自己的render函数就会重新执行.注意:当父组

随机推荐