博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jmeter(三十二)Jmeter Question 之 “自定义函数开发”
阅读量:5035 次
发布时间:2019-06-12

本文共 3811 字,大约阅读时间需要 12 分钟。

 

 

  “技术是业务的支撑”,已经不是第一次听到这句话,因为有各种各样的需求,因此衍生了许多各种各样的技术。共勉!

  前面有提到提到过Jmeter的安装目录结构,也提到Jmeter的常用函数功能,有部分工作使用函数便可以完成,有满足,那肯定是有不满足的,本篇来记录函数的开发。

  先贴内置函数图,该jar包位于${jmeter_home}\lib\ext目录下,ApacheJMeter_functions.jar

  

  有很多熟悉的名字。

  那么就挑一个典型的来反编译一下。Random.class。

  GUI界面显示内容:

  

  前端实现Random函数,定义个三个参数。

  上源码: 

1 // 2 // Source code recreated from a .class file by IntelliJ IDEA 3 // (powered by Fernflower decompiler) 4 // 5  6 package org.apache.jmeter.functions; 7  8 import java.util.Collection; 9 import java.util.LinkedList;10 import java.util.List;11 import java.util.concurrent.ThreadLocalRandom;12 import org.apache.jmeter.engine.util.CompoundVariable;13 import org.apache.jmeter.samplers.SampleResult;14 import org.apache.jmeter.samplers.Sampler;15 import org.apache.jmeter.threads.JMeterVariables;16 import org.apache.jmeter.util.JMeterUtils;17 18 public class Random extends AbstractFunction {19     private static final List
desc = new LinkedList();20 private static final String KEY = "__Random";21 private CompoundVariable varName;22 private CompoundVariable minimum;23 private CompoundVariable maximum;24 25 public Random() {26 }27 28 public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {29 long min = Long.parseLong(this.minimum.execute().trim());30 long max = Long.parseLong(this.maximum.execute().trim());31 long rand = ThreadLocalRandom.current().nextLong(min, max + 1L);32 String randString = Long.toString(rand);33 if (this.varName != null) {34 JMeterVariables vars = this.getVariables();35 String varTrim = this.varName.execute().trim();36 if (vars != null && varTrim.length() > 0) {37 vars.put(varTrim, randString);38 }39 }40 41 return randString;42 }43 44 public void setParameters(Collection
parameters) throws InvalidVariableException {45 this.checkParameterCount(parameters, 2, 3);46 Object[] values = parameters.toArray();47 this.minimum = (CompoundVariable)values[0];48 this.maximum = (CompoundVariable)values[1];49 if (values.length > 2) {50 this.varName = (CompoundVariable)values[2];51 } else {52 this.varName = null;53 }54 55 }56 57 public String getReferenceKey() {58 return "__Random";59 }60 61 public List
getArgumentDesc() {62 return desc;63 }64 65 static {66 desc.add(JMeterUtils.getResString("minimum_param"));67 desc.add(JMeterUtils.getResString("maximum_param"));68 desc.add(JMeterUtils.getResString("function_name_paropt"));69 }70 }

 

  观察这段代码、整体结构大致分为三个部分。

  定义、实现逻辑、返回定义。

  在编写实现函数代码的时候需要注意的几个细节:

    1、包名必须是以functions结尾。

    2、类继承AbstractFunction。

   OK,照猫画虎,编写其中的逻辑:

  

1 String result = ""; 2  3         try { 4             int a = Integer.valueOf(str1).intValue(); 5             int b = Integer.valueOf(str2).intValue(); 6             int c = Integer.valueOf(str3).intValue(); 7             result = String.valueOf(addInt(a, b, c)); 8         } catch (Exception e) { 9             // TODO Auto-generated catch block10             e.printStackTrace();11         } 12         13         if ((localJMeterVariables != null) && (this.values.length > 0)) {14             localJMeterVariables.put(str4, result);15         }16 17         return result;18     }19 20     private int addInt(int a, int b, int c) {21         // TODO Auto-generated method stub22         return  a + b + c;23     }

    三个正整数相加,返回和。

    打包,将jar包放入lib\ext目录下,启动Jmeter

    

  调试一下。

  

  

 

  像外行一样去思考,像专家一样去实践。

                ----金出武雄

 

转载于:https://www.cnblogs.com/richered/p/8675840.html

你可能感兴趣的文章
一道关于数组的前端面试题
查看>>
为何要有交叉编译
查看>>
Retrotranslator使用简介(JDK1.5->1.4)
查看>>
Qss All
查看>>
C# 以ThreadStart方式实现多线程
查看>>
查询近一个月的表空间使用情况
查看>>
PTM人员(产品技术经理)
查看>>
Delphi 的RTTI机制浅探<一>
查看>>
SqlServer中循环和条件语句示例!
查看>>
Sokect异步连接发送
查看>>
Making HTML5 work in IE6, IE7 & IE8
查看>>
在ASP.NET 5中如何方便的添加前端库
查看>>
使用Visual Studio Code开发AngularJS应用
查看>>
8467:鸣人的影分身
查看>>
语法分析的那些算法
查看>>
jQuery each使用
查看>>
立即执行函数
查看>>
第四次寒假作业
查看>>
USE_FUNC.txt
查看>>
分享一下 Eclipse 插件 PyDev 的安装
查看>>