JMeter is one of the best open source tools in the Test Automation Community. It comes with all the possible extensions to come up with our test scripts quickly. To make our life even more easier, It also lets us to come up with our own plugins by implementing few interfaces. In this article, I would like to show you how we can create a custom plugin for JMeter – A Property File Reader. I had already shared this utility in this article. However I had NOT explained how it was implemented in the article.

Aim of this article is to help you to come up with your own plugin in case of any unique requirements where JMeter’s existing plugins do not help.

Goal:

Our goal here is to create a property file which contains our test input parameters & create our config element which should appear in the below selection (as shown below) & read the given property file.


Once we added our plugin in our test, Our plugin should be able to read the property file and the test can directly use these properties in our test plan as shown here.

${__P(prop1)} will print value1

${__P(prop2)} will print value2

Reference:

I will refer to this ConfigTestElement which has to be extended to implement our ‘Property File Reader’ plugin & this JMeter tutorial to get some idea.

Setting Up IDE:

Lets first set up our IDE with all the dependencies.

  • Create a simple Maven project
  • Add below dependency for creating a custom function – add other dependencies as you need.

Creating Custom Config Element:

  • Lets create a simple java class to read the property file.
1
2
3
4
5
6
import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.testbeans.TestBean;
 
public class PropertyReader extends ConfigTestElement implements TestBean{
 
}
  • TestBean is a marker interface to tell JMeter to make a Test Bean Gui for the class.
  • We need to read the property file before the test plan gets executed. So we need to implement the corresponding interface – TestStateListener.
  • Before implementing the actual logic in the above class, lets create the GUI class for our plugin.
  • Name of this GUI class should be [ComponentName]BeanInfo.java  in the same package.
  • We are going to have only one field in the GUI – File Path – which should contain actual file path of the Property file to be read.
  • File Path – is basically a display name in the GUI.
  • By default – the field should be blank if it is not set already.
  • There should be a property file in the same package which contains the display name, short description etc
  • Name of this property file should be [ComponentName]Resources.properties
  # display name of the Configuration Element
  displayName=Property File Reader
   
  # We have only one field called - propFilePath
  # For each field - define the displayName and short Description.
  propFilePath.displayName=File Path
  propFilePath.shortDescription=Absolute path of the property file to be read
  • At this point, the package will look like this.

  • Now, lets get back to our PropertyReader.java to implement the actual logic to read the property file.
  • Lets add the public getter and setter for each field in the GUI.
  public class PropertyReader extends ConfigTestElement implements TestBean, TestStateListener {
   
  private static final Logger log = LoggingManager.getLoggerForClass();
  private String propFilePath;
   
  public PropertyReader() {
  super();
  }
   
  public void testEnded() {
  // TODO Auto-generated method stub
   
  }
   
  public void testEnded(String arg0) {
  // TODO Auto-generated method stub
   
  }
   
  public void testStarted() {
  // TODO Auto-generated method stub
  }
   
  public void testStarted(String arg0) {
  // TODO Auto-generated method stub
  }
   
   
  /**
  * @return the file path
  */
  public String getPropFilePath() {
  return this.propFilePath;
  }
   
  /**
  * @param propFilePath the file path to read
  */
  public void setPropFilePath(String propFilePath) {
  this.propFilePath = propFilePath;
  }
  }
view rawPropertyReader.java hosted with ❤ by GitHub
  • Now – it is time for us to add the logic to read the property file.
  • We need to read the file before test starts.
  • So, Add the below logic to read the file in the ‘testStarted’ method.
  public class PropertyReader extends ConfigTestElement implements TestBean, TestStateListener {
   
  private static final Logger log = LoggingManager.getLoggerForClass();
  private String propFilePath;
   
  public PropertyReader() {
  super();
  }
   
  public void testEnded() {
  // TODO Auto-generated method stub
   
  }
   
  public void testEnded(String arg0) {
  // TODO Auto-generated method stub
   
  }
   
  public void testStarted() {
  if (StringUtils.isNotEmpty(getPropFilePath())) {
  try {
  Path path = Paths.get(getPropFilePath());
  if (!path.isAbsolute())
  path = Paths.get(FileServer.getFileServer().getBaseDir(), path.toString());
  JMeterUtils.getJMeterProperties().load(new FileInputStream(path.toString()));
  log.info("Property file reader - loading the properties from " + path);
   
  } catch (FileNotFoundException e) {
  log.error(e.getMessage());
  } catch (IOException e) {
  log.error(e.getMessage());
  }
  }
  }
   
  public void testStarted(String arg0) {
  testStarted();
  }
   
   
  /**
  * @return the file path
  */
  public String getPropFilePath() {
  return this.propFilePath;
  }
   
  /**
  * @param propFilePath the file path to read
  */
  public void setPropFilePath(String propFilePath) {
  this.propFilePath = propFilePath;
  }
   
  }
view rawPropertyReader.java hosted with ❤ by GitHub

Export:

  • Now export this package as a jar file or mvn clean package command will create the jar file.
  • Place the jar in JMETER_HOME/lib/ext folder
  • Restart JMeter
  • You should be able to see the custom plugin we had created – Property File Reader – under Test Plan -> Config Element
  • Add the config element into the test plan & It will look as shown below.

Testing our Plugin:

  • Add the config element we had created. Set the property file path.

  • Add a BeanShell Sampler to print the property values.

  • Run the test – check the log

  • Our property file was read only once for each test run
  • It prints the values of the property.

Exercise:

Create a custom config element which uploads the JMeter result (.jtl) file to Amazon S3 bucket once the test finishes.

Hint:

  • Create a simple java utility class to upload a given file to Amazon S3. You can find some examples here.
  • Now follow the same approach I had explained here to the read property file.
  • Add the logic in the ‘testEnded’ method to call the utility to upload the file in Amazon s3.

Summary:

Our Property File Reader works as expected.  How can we use this PropertyFileReader efficiently!?

I had already explained this in this article for the proper use of PropertyFileReader. I would request you to read the article and provide your feedback!

Extending JMeter – Creating Custom Config Element – Property File Reader的更多相关文章

  1. 【IOS笔记】Creating Custom Content View Controllers

    Creating Custom Content View Controllers 自定义内容视图控制器 Custom content view controllers are the heart of ...

  2. Collection View Programming Guide for iOS---(六)---Creating Custom Layouts

    Creating Custom Layouts 创建自定义布局 Before you start building custom layouts, consider whether doing so ...

  3. View Controller Programming Guide for iOS---(四)---Creating Custom Content View Controllers

    Creating Custom Content View Controllers 创建自定义内容视图控制器 Custom content view controllers are the heart ...

  4. ASP.NET MVC- VIEW Creating Custom HTML Helpers Part 2

    The goal of this tutorial is to demonstrate how you can create custom HTML Helpers     that you can ...

  5. log4net:ERROR XmlHierarchyConfigurator: Cannot find Property [File] to set object on [TF.Log.FileAppender]

    难受,香菇. 大概研究了两个多小时,搜了很多资料都没有很完美的答案,最后突然脑子就一闪一闪,才弄明白咋回事. log4net:ERROR XmlHierarchyConfigurator: Canno ...

  6. Spring 中出现Element : property Bean definitions can have zero or more properties. Property elements correspond to JavaBean setter methods exposed by the bean classes. Spring supports primitives, refer

    在这个ApplicationContext.xml文件中出现 如下报错 Element : property Bean definitions can have zero or more proper ...

  7. CocoaPods did not set the base configuration of your project because your project already has a custom config set.

    今天在封装自己的消息推送SDK的时候,pod install 的时候,突然报这个错误,解决方式如下: $ pod install Analyzing dependencies Downloading ...

  8. Drag & Drop and File Reader

    参考 : http://www.html5rocks.com/zh/tutorials/file/dndfiles/ http://blog.csdn.net/rnzuozuo/article/det ...

  9. Creating Custom Connector Sending Claims with SharePoint 2013

    from:http://blogs.msdn.com/b/security_trimming_in_sharepoint_2013/archive/2012/10/29/creating-custom ...

随机推荐

  1. ffmpeg代码实现自定义encoder

    1.概述 本文主要讲述如何用ffmpeg代码实现自己的encoder. 2.代码 /* *本程序主要实现一个自己的encoder并加入到encoder链中去,供api调用 *作者:缪国凯(MK) *8 ...

  2. ES+open-falcon之报警自动发送请求信息

    当我们监控nginx的状态码出现错误状态码的时候, 一般的处理方法是通过kibana查询是哪个接口导致从而确定是哪个服务,再进一步登录业务机器查询业务日志确定原因. 我们现在要做的事情就是将 人为的通 ...

  3. ACM学习历程—UESTC 1222 Sudoku(矩阵)(2015CCPC H)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目大意就是构造一个行列和每个角的2*2都是1234的4*4矩阵. 用dfs暴力搜索,不过需要每一步进 ...

  4. bzoj 3083 遥远的国度 —— 树链剖分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3083 换根后路径还是不变,子树分类讨论一下,树剖后线段树维护即可. 代码如下: #inclu ...

  5. vs2015解决fopen、fscanf 要求替换为fopen_s、fscanf_s的办法

    在工程项目设置一下就行:项目属性 -- C/C++-- 预处理器 -- 预处理器定义,添加:_CRT_SECURE_NO_WARNINGS

  6. SpringMVC 利用@ResponseBody注解返回Json时,出现406 not acceptable 错误的解决方法。

    1 在RequestMapping中加入produces属性如: @RequestMap(value="/path",produces="application/json ...

  7. centos6 启动流程

    具体过程:1)加载BIOS的硬件信息,执行BIOS内置程序.2)读取MBR(Master Boot Record)中Boot Loader中的引导信息.3)加载内核Kernel boot到内存中.4) ...

  8. 洛谷-机器翻译-NOIP2010提高组复赛

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  9. mysql--二进制日志(bin-log)

    一.设置二进制日志 进制日志记录了所有的DDL和DML,但不包括各种查询.通过二进制日志,可以实现什么效果呢?二进制日志文件可以[实现灾难数据恢复],另外可以应用到[mysql复制数据同步].二进制日 ...

  10. 5.docker的疑难杂症

    根据官方文档:https://docs.docker.com/install/linux/docker-ce/centos/搭建docker 1.卸载docker旧版本: sudo yum remov ...