插件开发方法有两种:

一、在jmeter官网下载jmeter源码,在源码里面新加函数,然后导出jar;

二、不下载源码,直接导入jmeter相应的jar包,即可开发。(推荐)

  下面介绍第二种开发方法:

在eclipse新建项目,导入jmeter目录下\lib\ext目录中的的ApacheJMeter_core.jar,继承AbstractFunction类。

案例:以下写一个计算阶乘的Function,将其命名为Factorial,主要代码参考如下,

  1. import java.util.Collection;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4.  
  5. import org.apache.jmeter.engine.util.CompoundVariable;
  6. import org.apache.jmeter.functions.AbstractFunction;
  7. import org.apache.jmeter.functions.InvalidVariableException;
  8. import org.apache.jmeter.samplers.SampleResult;
  9. import org.apache.jmeter.samplers.Sampler;
  10. import org.apache.jmeter.util.JMeterUtils;
  11. import org.apache.jorphan.logging.LoggingManager;
  12. import org.apache.log.Logger;
  13.  
  14. public class Factorial extends AbstractFunction {
  15.  
  16. private static final Logger log = LoggingManager.getLoggerForClass();
  17. private static final List<String> desc = new LinkedList<String>();
  18. private static final String KEY = "__factorial";
  19. private Object[] values = null;
  20.  
  21. static {
  22. desc.add("factorial_value");
  23. }
  24. //描述参数
  25. @Override
  26. public List<String> getArgumentDesc() {
  27. // TODO Auto-generated method stub
  28. return desc;
  29. }
  30. //函数执行,返回结果
  31. @Override
  32. public String execute(SampleResult previousResult, Sampler currentSampler)
  33. throws InvalidVariableException {
  34. // TODO Auto-generated method stub
  35. String numberString = ((CompoundVariable) values[0]).execute().trim();
  36. int num;
  37. try{
  38. num = Integer.valueOf(numberString);
  39. } catch (Exception e){
  40. return null;
  41. }
  42.  
  43. return String.valueOf(factorial(num));
  44. }
  45. //获取函数引用关键字
  46. @Override
  47. public String getReferenceKey() {
  48. // TODO Auto-generated method stub
  49. return KEY;
  50. }
  51. //设置参数
  52. @Override
  53. public void setParameters(Collection<CompoundVariable> parameters)
  54. throws InvalidVariableException {
  55. // TODO Auto-generated method stub
  56. //可以检查参数数量,主要包括以下两种方法
  57. checkMinParameterCount(parameters, 1);
  58. checkParameterCount(parameters, 1, 1);
  59. values = parameters.toArray();
  60. }
  61.  
  62. private int factorial(int num){
  63. int result = 1;
  64. if(num < 0){
  65. return -1;
  66. }
  67. if(num == 0){
  68. result = 1;
  69. } else {
  70. for(int i = num; i > 0; i--){
  71. result *= i;
  72. }
  73. }
  74.  
  75. return result;
  76. }
  77. }

通过继承AbstractFunction抽象类,重写getArgumentDesc方法实现对函数参数的描述,重写setParameters方法来对函数的参数进行检查和设置,重写getReferenceKey方法告诉JMeter该函数在框架中的引用名称,重写execute方法,实现对该函数的执行并返回结果。通过上述代码我们完成了对Factorial函数组件的编写。 
将代码导出为jar文件,放在\lib\ext目录中,打开jmeter即可在函数助手中查看到该函数组件: 

Jmeter函数组件开发的更多相关文章

  1. Jmeter扩展组件开发(10) - 自定义扩展函数助手的开发

    CODE package com.functions;import org.apache.jmeter.engine.util.CompoundVariable;import org.apache.j ...

  2. Jmeter扩展组件开发(8) - 函数助手扩展开发demo

    前提条件 1.pom文件引用ApacheJMeter_functions包 <dependency> <groupId>org.apache.jmeter</groupI ...

  3. Jmeter扩展组件开发(2) - 扩展开发第一个demo的实现

    maven工程src目录介绍 main:写代码 main/java:写Java代码 main/resources:写配置文件 test:写测试代码 test/java demo实现 创建Package ...

  4. Jmeter扩展组件开发(1) - 创建maven工程

    前言 没有安装IDEA的伙伴先安装.url:https://www.cnblogs.com/gltou/p/14956060.html 扩展开发实现的两种方式 继承AbstracJavaSampler ...

  5. Jmeter扩展组件开发(9) - 解决空指针问题

    问题分析 上一节https://www.cnblogs.com/gltou/p/14967005.html功能描述内容为空,导致Jmeter报空指针 CODE List desc = new Arra ...

  6. Jmeter扩展组件开发(7) - 自定义java请求的开发

    CODE package com.demo;import org.apache.jmeter.config.Arguments;import org.apache.jmeter.protocol.ja ...

  7. Jmeter扩展组件开发(6) - 将响应结果数据显示到查看结果树中

    CODE //用来存储响应数据,目的是将响应结果放到查看结果树当中private String resultData;/** 这个方法就是实现你具体功能逻辑的方法* @param javaSample ...

  8. Jmeter扩展组件开发(5) - 初始化方法的作用与实现

    CODE //URLNAME 就是在图形化界面当中显示的变量名称private static final String URLNAME = "URL";//设置界面当中默认显示的变 ...

  9. Jmeter扩展组件开发(4) - 自定义参数的实现

    CODE //URLNAME 就是在图形化界面当中显示的变量名称private static final String URLNAME = "URL";//设置界面当中默认显示的变 ...

随机推荐

  1. 浅谈iOS程序员的成长和进阶

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  2. JDBC链接mysql数据库

    Unit_1 首先:JDBC:java database connectivity SUN公司提供的一套操作数据库的标准规范. JDBC与数据库驱动的关系是接口与实现的关系. JDBC涉及到四个核心的 ...

  3. jeesite简单入口分析

    这两天要开新项目 , 准备使用比较受欢迎的 jeesite框架 . jeesite是一个写好的网站 , 用到的框架比较多 具体请看 -- > github链接 下载下来之后 , 手动把maven ...

  4. cookie跨域和js跨域问题

    js跨域:主机名,协议,端口号只要有任何一个不同,就不能成立

  5. 每天一个Linux命令(04)--mkdir命令

    Linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项]目录 2.命令功能: ...

  6. VUE2.0实现购物车和地址选配功能学习第五节

    第五节 单件商品金额计算和单选全选功能 1.vue精髓在于操作data模型来改变dom,渲染页面,而不是直接去改变dom 2.加减改变总金额功能: html:<div class="c ...

  7. javascript组成概述认识

    这里的JavaScript组成概述是说的在浏览器端渲染的JavaScript而不是nodejs js组成概述 js的完整实现是由ECMAscript.DOM.BOM三个部分组成的: -ECMAscri ...

  8. ajax 做登录 实现页面免刷新

    结合之前学的知识,可以用ajax来传递数据,实现页面不用刷新,仅数据刷新,来看一下ajax是怎么来实现页面免刷新的 方的是客户端,圆的是服务器 如果没有ajax的话,客户端直接把数据传给服务器,服务器 ...

  9. RMI原理及简单示例

    分布式对象 在学习 RMI 之前,先来分布式对象(Distributed Object):分布式对象是指一个对象可以被远程系统所调用.对于 Java 而言,即对象不仅可以被同一虚拟机中的其他客户程序( ...

  10. Spring总结_04_容器和bean

     一.概念理解 1.容器 IoC容器负责容纳并管理bean,在Spring中,BeanFactory是IoC容器的核心接口. 它的职责包括:实例化.定位.配置应用程序中的对象及建立这些对象间的依赖. ...