JMeter是测试自动化社区中最好的开源工具之一。它提供了所有可能的扩展,可以快速提供我们的测试脚本。为了让我们的生活更轻松,它还让我们通过实现几个接口来提出我们自己的插件。

在本文中,让我们看看如何创建自定义函数并使其出现在下面的JMeter 函数帮助器对话框中。

目标:

我的目标是创建一个简单的Join函数,它将使用给定的分隔符连接2个给定的字符串并将其存储在用户定义的变量中。

用法是   $ {__ join(string1,string2,delimiter,resultVariable)}

参考:

我们将参考JMeter的AbstractFunction  ,它应该被扩展用于创建我们自己的函数和   __ strLen函数,以便了解我们自己的函数是如何实现的。

设置IDE:

让我们首先使用所有依赖项设置我们的IDE。

  • 创建一个简单的Maven项目

  • 添加以下依赖项以创建自定义函数 - 根据需要添加其他依赖项。
  < 依赖 >
  < groupId > org.apache.jmeter </ groupId >
  < artifactId > ApacheJMeter_core </ artifactId >
  < version > 3.1 </ version >
  </ dependency >

创建自定义功能:

  • 我通过扩展' AbstractFunction ' 创建一个StrJoin.java
  • 我让IDE添加'未实现的方法'。它看起来像这样。

  • getReferenceKey方法返回函数的名称。来源就在这里
  • 所以我创建了一个带有函数名的String常量,并使该方法返回变量。这将出现在Function Helper对话框中。
  • getArgumentDesc方法返回一个字符串列表来描述我们的自定义函数的每个参数。来源就在这里

  • 所以我创建了一个LinkedList来为我们的自定义函数添加每个参数的描述,如下所示。
    1. private static final List<String> desc = new LinkedList<String>();
    2.  
    3. static {
    4. desc.add("String 1");
    5. desc.add("String 2");
    6. desc.add("Delimiter");
    7. desc.add("Name of variable in which to store the result (optional)");
    8. }
  • view rawjmeter-custom-function-getdesc.java hosted with ❤ by GitHub
  • setParameters方法的参数参数将保存我们在JMeter中为自定义函数设置的所有参数。让我们将它们存储在一个阵列中供我们使用。
    1. private Object[] values;
    2.  
    3. @Override
    4. public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
    5. values = parameters.toArray(); //returns an object array
    6. }
    • The logic for joining 2 Strings should be in the ‘execute‘ method.
      1. @Override
      2. public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
      3.  
      4. JMeterVariables vars = getVariables();
      5.  
      6. String str1 = ((CompoundVariable) values[0]).execute().trim(); //parameter 1
      7. String str2 = ((CompoundVariable) values[1]).execute().trim(); //parameter 2
      8. String delimiter = "";
      9.  
      10. if(values.length>2){
      11. delimiter = ((CompoundVariable) values[2]).execute(); //parameter 3 - delimiter could be a space - don't trim
      12. }
      13.  
      14. String result = str1 + delimiter + str2;
      15.  
      16. //user might want the result in a variable
      17. if( null!=vars && values.length>3){
      18. String userVariable = ((CompoundVariable) values[3]).execute().trim();
      19. vars.put(userVariable, result); //store the result in the user defined variable
      20. }
      21.  
      22. return result;
      23. }
    • view rawjmeter-custom-function-execute.java hosted with ❤ by GitHub

    StrJoin类看起来像这样。

    1. package com.testautomationguru.plugins.functions;
    2.  
    3. import java.util.Collection;
    4. import java.util.LinkedList;
    5. import java.util.List;
    6.  
    7. import org.apache.jmeter.engine.util.CompoundVariable;
    8. import org.apache.jmeter.functions.AbstractFunction;
    9. import org.apache.jmeter.functions.InvalidVariableException;
    10. import org.apache.jmeter.samplers.SampleResult;
    11. import org.apache.jmeter.samplers.Sampler;
    12. import org.apache.jmeter.threads.JMeterVariables;
    13.  
    14. public class StrJoin extends AbstractFunction {
    15.  
    16. private static final List < String > desc = new LinkedList < String > ();
    17. private static final String MyFunctionName = "__Join";
    18.  
    19. static {
    20. desc.add("String 1");
    21. desc.add("String 2");
    22. desc.add("Delimiter");
    23. desc.add("Name of variable in which to store the result (optional)");
    24. }
    25.  
    26. private Object[] values;
    27.  
    28. public StrJoin() {}
    29.  
    30. public List < String > getArgumentDesc() {
    31. return desc;
    32. }
    33.  
    34. @Override
    35. public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
    36.  
    37. JMeterVariables vars = getVariables();
    38.  
    39. String str1 = ((CompoundVariable) values[0]).execute().trim(); //parameter 1
    40. String str2 = ((CompoundVariable) values[1]).execute().trim(); //parameter 2
    41. String delimiter = "";
    42.  
    43. if (values.length > 2) {
    44. delimiter = ((CompoundVariable) values[2]).execute(); //parameter 3 - delimiter could be a space - don't trim
    45. }
    46.  
    47. String result = str1 + delimiter + str2;
    48.  
    49. //user might want the result in a variable
    50. if (null != vars && values.length > 3) {
    51. String userVariable = ((CompoundVariable) values[3]).execute().trim();
    52. vars.put(userVariable, result); //store the result in the user defined variable
    53. }
    54.  
    55. return result;
    56. }
    57.  
    58. @Override
    59. public String getReferenceKey() {
    60. return MyFunctionName;
    61. }
    62.  
    63. @Override
    64. public void setParameters(Collection < CompoundVariable > parameters) throws InvalidVariableException {
    65. values = parameters.toArray();
    66. }
    67. }
  • Export:

    • 将此类导出为Jar文件或mvn clean package命令将创建jar文件。
    • 复制Jar文件并将其放在JMETER_HOME / lib / ext文件夹下。重启JMeter。
    • 检查功能助手。我们的自定义功能应该出现在那 (如果没有出现,请检查JMeter日志文件是否有异常)
    • 测试自定义功能:

      • 我在JMeter中创建一个简单的测试来使用我们的自定义函数,如下所示。

      • 执行并验证Debug Sampler的响应数据。

      • JMeter按照我们的预期加入2个字符串,并将结果存储在用户定义的变量中。

      摘要:

      我希望这篇文章可以帮助您提出自己的函数实现。我们还将在未来的文章中看到更多我们如何扩展其他JMeter的测试元素。

扩展JMeter - 创建自定义函数 - String Joiner (翻译)的更多相关文章

  1. mysql创建自定义函数与存储过程

    mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql ...

  2. MySQL 创建自定义函数(2)

    说明:下面创建一个函数,调用自定义函数返回一个返回一个随机数. (1) 创建自定义函数

  3. 题目要求:传入数组 内容为[['lisi','男','27'],['wangwu','男',18],['zhaoliu','男','30']],将此二维数组转化为一维数组,创建自定义函数完成

    //自定义函数 function getOne($arr){ $str = ''; //定义空的字符串,用来接收值 foreach ($arr as $key=>$value){ //循环遍历数 ...

  4. MySQL 创建自定义函数

    语法:Create function function_name(参数列表)returns返回值类型 函数体 函数名,应合法的标识符,不应与系统关键字冲突. 一个函数应该属于某个数据库,可以使用db_ ...

  5. MySQL下创建序列及创建自定义函数方法介绍

    工作过程中需要将基于DB2数据库的应用以及数据迁移到MySQL中去,在原应用中,大量使用了SEQUENCE,考虑尽量减少代码的修改,决定在迁移后的应用中继续保留SEQUENCE的使用,这就要求在MyS ...

  6. MySQL 创建自定义函数(1)

    1. 创建测试自定义函数(1) CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS ...

  7. PLSQL 创建自定义函数注意事项

    2017-6-8周四,今天遇到的需求是,从数据库中查找出某张表的某些数据,并将这些数据做简单的加减运算再得到结果集,没有思路,后来问辉哥,给我的建议是给这些运算封装成一个SQL函数,select选择字 ...

  8. MySQL基于实例sales创建自定义函数、视图、存储过程及触发器

    实例:数据库sales 1.客户表(Customer) 客户编号(CusNo) 姓名(CusName) 地址(Address) 电话(Tel) C001 杨婷 北京 010-5328953 C002 ...

  9. Lua 自定义函数string.split

    function string.split(str, delimiter)    if str==nil or str=='' or delimiter==nil then        return ...

随机推荐

  1. tensorflow训练验证码识别模型

    tensorflow训练验证码识别模型的样本可以使用captcha生成,captcha在linux中的安装也很简单: pip install captcha 生成验证码: # -*- coding: ...

  2. OpenCV——旋转模糊 (二)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  3. [转]CSS3盒模型display:box详解

    时间:2014-02-25来源:网络作者:未知编辑:RGB display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布 ...

  4. 51nod 1250 排列与交换——dp

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1250 仔细思考dp. 第一问,考虑已知 i-1 个数有多少种方案. ...

  5. JS 获取json长度

    var keleyijson={"plug1":"myslider","plug2":"zonemenu"," ...

  6. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  7. CSS 关于文本 背景 边框整理

    文本与字体 1)阴影:text-shadow 格式:text-shadow:5px 5px 3px #FFFFFF分别对应 水平方向 垂直方向 模糊程度 颜色值 代码: <!DOCTYPE ht ...

  8. C#使用NPOI读取电子表格Excel到DataGridView中

    上篇博文中已经介绍了如何写入Excel文件.这篇再介绍一下 如何从Excel中读取数据并保存到DataGridView中. 从Excel中读取数据并保存至DataGridView中,Excel文件第一 ...

  9. [poj2135]Farm Tour(最小费用流)

    解题关键:最小费用流 代码一:bellma-ford $O(FVE)$  bellman-ford求最短路,并在最短路上增广,速度较慢 #include<cstdio> #include& ...

  10. sell02 展现层编写

    # API ###商品列表 ``` GET /sell/buyer/product/list ``` 参数 ``` 无 ``` 返回 ``` { "code": 0, " ...