zoukankan      html  css  js  c++  java
  • 扩展JMeter

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

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

    cf001

     

    目标:

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

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

     

    参考:

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

    设置IDE:

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

    • 创建一个简单的Maven项目

    CF002

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

    创建自定义功能:

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

    cf003

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

    cf004

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

      StrJoin类看起来像这样。

    • package com.testautomationguru.plugins.functions;
      
      import java.util.Collection;
      import java.util.LinkedList;
      import java.util.List;
      
      import org.apache.jmeter.engine.util.CompoundVariable;
      import org.apache.jmeter.functions.AbstractFunction;
      import org.apache.jmeter.functions.InvalidVariableException;
      import org.apache.jmeter.samplers.SampleResult;
      import org.apache.jmeter.samplers.Sampler;
      import org.apache.jmeter.threads.JMeterVariables;
      
      public class StrJoin extends AbstractFunction {
      
          private static final List < String > desc = new LinkedList < String > ();
          private static final String MyFunctionName = "__Join";
      
          static {
              desc.add("String 1");
              desc.add("String 2");
              desc.add("Delimiter");
              desc.add("Name of variable in which to store the result (optional)");
          }
      
          private Object[] values;
      
          public StrJoin() {}
      
          public List < String > getArgumentDesc() {
              return desc;
          }
      
          @Override
          public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
      
              JMeterVariables vars = getVariables();
      
              String str1 = ((CompoundVariable) values[0]).execute().trim(); //parameter 1
              String str2 = ((CompoundVariable) values[1]).execute().trim(); //parameter 2
              String delimiter = "";
      
              if (values.length > 2) {
                  delimiter = ((CompoundVariable) values[2]).execute(); //parameter 3 - delimiter could be a space - don't trim
              }
      
              String result = str1 + delimiter + str2;
      
              //user might want the result in a variable
              if (null != vars && values.length > 3) {
                  String userVariable = ((CompoundVariable) values[3]).execute().trim();
                  vars.put(userVariable, result); //store the result in the user defined variable
              }
      
              return result;
          }
      
          @Override
          public String getReferenceKey() {
              return MyFunctionName;
          }
      
          @Override
          public void setParameters(Collection < CompoundVariable > parameters) throws InvalidVariableException {
              values = parameters.toArray();
          }
      }
      View Code
    • Export:

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

      • CF005

        测试自定义功能:

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

        CF006

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

        cf007

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

        摘要:

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

  • 相关阅读:
    AndroidStudio gradle配置
    Git中pull对比fetch和merge
    Knockout.js随手记(7)
    Knockout.js随手记(6)
    MVC自动绑定整数数组
    Knockout.js随手记(5)
    ASP.NET4.5Web API及非同步程序开发系列(3)
    Knockout.js随手记(4)
    ASP.NET4.5Web API及非同步程序开发系列(2)
    ASP.NET4.5Web API及非同步程序开发系列(1)
  • 原文地址:https://www.cnblogs.com/a00ium/p/10381256.html
Copyright © 2011-2022 走看看