热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jmeter系列二(jmeterengine相关)

准备知识org.apache.jorphan.collections下的类,engine会使用到Data类:模拟table存储数据HashTree类:将对象以树形存储HashTreeTraverser

准备知识org.apache.jorphan.collections下的类,engine会使用到

Data类:模拟table存储数据

HashTree类:将对象以树形存储

HashTreeTraverser接口:实现了该接口的类可以获得HashTree中的存储的对象

SearchByClass类:实现了SearchByClass接口,engine会大量用到

第一篇讲的是界面相关的问题,当点击启动按钮jmeter将执行测试开始

这个toolbar是类org.apache.jmeter.gui.util.JMeterMenuBar实现的,看类中的makeRunMenu方法中代码

run_start = makeMenuItemRes("start", 'S', ActionNames.ACTION_START, KeyStrokes.ACTION_START);

1 private static JMenuItem makeMenuItemRes(String resource, int mnemonic, String actionCommand, KeyStroke keyStroke){
2 JMenuItem menuItem = new JMenuItem(JMeterUtils.getResString(resource), mnemonic);
3 menuItem.setName(resource);
4 menuItem.setActionCommand(actionCommand);
5 menuItem.setAccelerator(keyStroke);
6 menuItem.addActionListener(ActionRouter.getInstance());
7 return menuItem;
8 }

menu的响应事件的类是ActionRouter,从前面文章可以知道在org.apache.jmeter.gui.action下找到类Start

1 public void doAction(ActionEvent e) {
2 if (e.getActionCommand().equals(ActionNames.ACTION_START)) {
3 popupShouldSave(e);
4 startEngine(false);
5 } else if (e.getActionCommand().equals(ActionNames.ACTION_START_NO_TIMERS)) {
6 popupShouldSave(e);
7 startEngine(true);
8 } else if (e.getActionCommand().equals(ActionNames.ACTION_STOP)) {
9 if (engine != null) {
10 log.info("Stopping test");
11 GuiPackage.getInstance().getMainFrame().showStoppingMessage("");
12 engine.stopTest();
13 }
14 } else if (e.getActionCommand().equals(ActionNames.ACTION_SHUTDOWN)) {
15 if (engine != null) {
16 log.info("Shutting test down");
17 GuiPackage.getInstance().getMainFrame().showStoppingMessage("");
18 engine.askThreadsToStop();
19 }
20 }
21 }

追踪到startEngine方法,其中经过一系列HashTree的相互转换和配置(前提看懂HashTree类的代码),engine开始测试

runTest方法

1 public void runTest() throws JMeterEngineException {
2 if (host != null){
3 long now=System.currentTimeMillis();
4 System.out.println("Starting the test on host " + host + " @ "+new Date(now)+" ("+now+")");
5 }
6 try {
7 Thread runningThread = new Thread(this, "StandardJMeterEngine");
8 runningThread.start();
9 } catch (Exception err) {
10 stopTest();
11 throw new JMeterEngineException(err);
12 }
13 }

最后看到JmeterThread类中run方法,run方法大概流程

1.通过controller获取Sampler

2.执行preprocess(PreProcessor)

3.执行sampler(Sampler)

4.执行postprocess(PostProcessor)

5.调用SampleListeners(Visualizer)

6.调用controller的isDone方法判断是否loop

其中的这些元素都是通过HashTree来存储

转载于:https://www.cnblogs.com/liliqiang/p/4176313.html


推荐阅读
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
author-avatar
diy2099_d94639
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有