性能测试Jmeter扩展学习-添加自定义函数

  我们在使用jmeter的时候有时候会碰到jmeter现有插件或功能也无法支持的场景,比如前端加密,此时我们就需要自己手动编写函数并导入了,下面就是手动修改并导入的过程。

  首先我们需要下载jmeter源码压缩包下来,我这里下载的是apache-jmeter-4.0_src.zip,下载解压后,此时直接导入jmeter源码是不行的,我们需要修改两个文件,如下图,将eclipse去掉即可,变成.classpath和.project。(注意下,去cmd命令下修改,ren 旧文件名  新文件名)

  我们默认导入后,会发现lib下面没有任何jar包,所以我们需要下载下来,我们通过“Ant build”添加build.xml,然后就会读取配置文件所需的jar包,我们拉到下面双击选择“download_jars”将依赖的jar包全部下载下来。(这里需要一点时间,下载完后点击install即可,也是在download_jars”下方不远处)。install编译好后就会在ext下看到jmeter的核心jar。

我们可以通过右上角或者F4将jar包导入到src下面,否则很多import都会失败。然后在对jmeter路径进行配置,否则启动的话会出现启动失败。

然后在src->core->NewDriver启动即可打开jmeter了。

在这里我们写一个base64编码的函数,在src下新建目录->custom(这个名称随意),新建如下图所示:

代码如下:

package org.apache.jmeter.custom.functions;

import com.sun.xml.bind.marshaller.MinimumEscapeHandler;
import org.apache.commons.math3.analysis.function.Min;
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 java.nio.charset.Charset;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Base64;

public class UTF8EcodingBase64 extends AbstractFunction {
    private static final String KEY = "__UTF8EcodingBase64";
    private static final List<String> desc = new LinkedList<>();

    static{
        desc.add("content");
    }

    Object[] values;

    @Override
    public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
        String content = ((CompoundVariable) values[0]).execute().trim();
        String encodeText = "";
        Base64.Encoder encoder = Base64.getEncoder();
        encodeText = encoder.encodeToString(content.getBytes(Charset.forName("UTF-8")));
        return encodeText;
    }

    @Override
    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
        checkMinParameterCount(parameters, 1);
        values = parameters.toArray();
    }

    @Override
    public String getReferenceKey() {
        return KEY;
    }

    @Override
    public List<String> getArgumentDesc() {
        return desc;
    }
}

写完代码后我们还需要到build.xml下新增一些内容,新增内容如下:

<property name="src.custom" value="src/custom"/>
<property name="build.custom" value="build/custom"/>

<target name="compile-custom" depends="compile-jorphan,compile-core" description="Compile example components.">
    <mkdir dir="${build.custom}"/>
    <javac srcdir="${src.custom}" destdir="${build.custom}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}"
           includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}">
      <include name="**/*.java"/>
      <classpath>
        <pathelement location="${build.jorphan}"/>
        <pathelement location="${build.core}"/>
        <path refid="classpath"/>
      </classpath>
    </javac>
  </target>

 <target name="install-custom" depends="compile-custom" description="Build and installs the example components.">
    <jar jarfile="${dest.jar}/ApacheJMeter_custom.jar" manifest="${build.dir}/MANIFEST_BIN.MF">
      <zipfileset file="${resources.meta-inf}/default.notice"
        fullpath="META-INF/NOTICE" />
      <zipfileset file="${resources.meta-inf}/default.license"
        fullpath="META-INF/LICENSE" />
      <fileset dir="${build.custom}" includes="**/*.class" />
      <fileset dir="${src.custom}" includes="**/*.properties" />
    </jar>
  </target>

然后我们在Ant build下就可以看到我们新加的“install-custom”,我们双击就会生成class文件,然后再run就会编译产生jar包,最后拷贝jar包到jmeter的lib/ext目录下即可使用了。

下图为拷贝之后打开jmeter使用效果图:

原文地址:https://www.cnblogs.com/leixiaobai/p/9500681.html

时间: 2024-08-29 10:09:08

性能测试Jmeter扩展学习-添加自定义函数的相关文章

jmeter 工具学习 未完待续

about Apache JMeter是Apache组织的开源项目,是 一个纯Java桌面应用,用于压力测试和性能测试,它最初被设计用于 web应用测试,后来逐渐的扩展到其他领域 jmeter可以用于对静态和动态的资源(文件.Servlet.Perl脚本. Java对象,数据库和查询.FTP服务器或者是其它资源)的性能进行 测试.jmeter可以用于分析不同压力条件下的总体性能情况.也可以使用jmeter提供的图形化界面,分析性能指标. jmeter环境配置 前置条件:必须配有Java如果没配转

JMeter参数化设置——通过函数助手

Now you can know everything in the world, but the only way you're findin' out that one is by givin' it a shot. 你可以了解世间万物,但追根溯源的唯一途径便是亲身尝试. 电影<心灵捕手> 测试用例描述: 性能测试要求:5个用户循环2次. 用例名称 操作步骤 预期结果 备注 新建项目并设置团队时统计项目总工时 1. 进入项目视图,点击右侧的"添加项目"链接.  系统会自

《PHP扩展学习系列》系列技术文章整理收藏

<PHP扩展学习系列>系列技术文章整理收藏 1PHP扩展之文本处理(二)--PCRE正则表达式语法10--后向引用http://www.lai18.com/content/321526.html 2PHP扩展之文本处理(二)--PCRE正则表达式语法9--重复/量词http://www.lai18.com/content/321525.html 3PHP扩展之文本处理(二)--PCRE正则表达式语法11--断言http://www.lai18.com/content/321527.html 4

Jmeter变量参数化及函数应用

分类: 测试工具 2006-12-14 10:54 12041人阅读 评论(5) 收藏 举报 javascriptloadrunnerrandom脚本测试多线程 我们在使用Jmeter录制脚本后,经常会对已录制的脚本进行修改,需要把一些参数使用一些变量替代,Jmeter是支持这些功能的,不过是通过函数实现的.下面举一个简单的例子,使用随机数替代一个参数:        打开录制好的脚本,点击Jmeter的“选项”,选择“函数助手对话框”(或者使用快捷键“Ctrl+F”),在“选择一个功能”的下拉

Lua学习(4)——函数

在Lua中函数的调用方式和C语言基本相同,如:print("Hello World")和a = add(x, y).唯一的差别是,如果函数只有一个参数,并且该参数的类型为字符串常量或table的构造器,那么圆括号可以省略,如print "Hello World"和f {x = 20, y = 20}.    Lua为面对对象式的调用也提供了一种特殊的语法--冒号操作符.表达式o.foo(o,x)的另一种写法是o:foo(x).冒号操作符使调用o.foo时将o隐含的作

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

MySQL基础学习之函数

数学函数 绝对值      abs() 圆周率      PI() 平方根 sqrt() 模除取余   mod(被除数,除数) 随机数      rand() 四舍五入    round(数字) 次方         pow(5,2) e为底的指数函数  exp(数字) 字符串函数 字符长度       length(字符) 字符连接       concat(字符1,字符2) 带符号的字符连接    concat_ws('-','su','zhou') 字符插入      insert('su

使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)

为什么使用jmeter, 它免费开源, 不断发展, 功能逐渐强大. 可以做功能,负载, 性能测试.一套脚本可以同时用于功能和性能测试.Jmeter 有着众多的插件开发者, 支持多种的测试协议. 一 .Jmeter 使用入门教程(快速入门) 如果您熟悉英语, 可以选择阅读tutorialpoint的教程.  或浏览汉化中的[史上最完整Jmeter教程]. 您也可以继续浏览站长收集的如下资料.  1. Jmeter 快速入门教程(一)  什么是jmeter 及 google plugin介绍 (强大

Jmeter进阶学习二(参数化)

1.疑问:为啥要使用参数化? 在测试过程中,参数化也是一种很重要的东西,比如:如果系统过程中多次使用同一个id,万一此id发生变化了,就需要每个文件中id一个一个的进行修改,如果使用参数化的话,就只需修改一个文件即可: 这样的话可以减少工作量: 2.此处采用的是用户定义的变量: 3.如何调用定义的变量? ...... 未完待续.... Jmeter进阶学习二(参数化)