我们在使用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使用效果图:

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

  1. jmeter的使用--添加自定义函数和导入自定义jar

    1.添加自定义函数,增加  号码生成函数 MobileGenerator和身份证生成函数IdCardGenerator 在package org.apache.jmeter.functions;中增加 ...

  2. JMeter接口学习笔记2017

    协议学习地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html 本篇学习笔记来自于慕课网上学习JMeter的学习笔记 学习 ...

  3. jmeter 工具学习 未完待续

    about Apache JMeter是Apache组织的开源项目,是 一个纯Java桌面应用,用于压力测试和性能测试,它最初被设计用于 web应用测试,后来逐渐的扩展到其他领域 jmeter可以用于 ...

  4. KnockoutJS 3.X API 第七章 其他技术(6) 使用“fn”添加自定义函数

    有时,您可能会通过向Knockout的核心值类型添加新功能来寻找机会来简化您的代码. 您可以在以下任何类型中定义自定义函数: 因为继承,如果你附加一个函数到ko.subscribable,它将可用于所 ...

  5. 【转】Jmeter变量参数化及函数应用

    我们在使用Jmeter录制脚本后,经常会对已录制的脚本进行修改,需要把一些参数使用一些变量替代,Jmeter是支持这些功能的,不过是通过函数实现的.下面举一个简单的例子,使用随机数替代一个参数: 打开 ...

  6. Jmeter变量参数化及函数应用

    分类: 测试工具 2006-12-14 10:54 12041人阅读 评论(5) 收藏 举报 javascriptloadrunnerrandom脚本测试多线程 我们在使用Jmeter录制脚本后,经常 ...

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

    Now you can know everything in the world, but the only way you're findin' out that one is by givin' ...

  8. JMeter扩展插件实现对自定义协议进行支持 转

    本文版权归xmeter.net 所有.欢迎转载,转载请注明出处. 摘要## JMeter本身提供了插件机制,允许第三方扩展JMeter以支持JMeter不支持的协议的测试.本文以扩展一个简单的Apac ...

  9. luogu P5410 模板 扩展 KMP Z函数 模板

    LINK:P5410 模板 扩展 KMP Z 函数 画了10min学习了一下. 不算很难 思想就是利用前面的最长匹配来更新后面的东西. 复杂度是线性的 如果不要求线性可能直接上SA更舒服一点? 不管了 ...

随机推荐

  1. nginx原理及使用

    Nginx的特点: 方便 简单 灵活 比较具有发展潜力的服务软件 在性能上占用的系统资源更少 能支持更多的并发连接 , 特别是静态小文件场景下, 达到更的访问效率.Nginx是什么? Nginx是一个 ...

  2. python全栈开发笔记---------数据类型-----集合set

    定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key 1.不同元素组成 2.无序 3.集合中元素必须是不可变类型(数字,字符串,元组) 特性:集合的目的是讲不同的值放到 ...

  3. VMware与Centos系统安装、重置root密码

    VMware与Centos系统安装   今日任务 .Linux发行版的选择 .vmware创建一个虚拟机(centos) .安装配置centos7 .xshell配置连接虚拟机(centos) 选择性 ...

  4. UDP协议学习(转)

    reference: https://blog.csdn.net/s_lisheng/article/details/73538229                  https://blog.cs ...

  5. JVM虚拟机 YGC和FGC发生的具体场景

    1.YGC和FGC是什么 YGC :对新生代堆进行gc.频率比较高,因为大部分对象的存活寿命较短,在新生代里被回收.性能耗费较小. FGC :全堆范围的gc.默认堆空间使用到达80%(可调整)的时候会 ...

  6. cocos2d-x3.17 整体概述

    首先,cocos引擎有三个版本:C++,Lua,Js.其底层代码是由C++编写,通过脚本文件绑定到Lua与Js,所以我们之后解析的都是cocos2d-x.其次,cocos安装等就不概述了,百度一大堆. ...

  7. Mac book Pro BootCamp驱动下载地址

    https://www.drvsky.com/sort/908_1.htm 可以通过说明中的支持的独立显卡列表:,找到适合自己的版本

  8. MacBook使用笔记2 - 安装windows虚拟机攻略

    转载请标注原链接:http://www.cnblogs.com/xczyd/p/5498878.html 5月初从阿里滚粗,然后失去了公司发的Mac Air.说实话Mac机器确实比windows好用一 ...

  9. python:用wordcloud生成一个文本的词云

    今天学习了wordcloud库,对<三国演义>生成了词云图片,非常漂亮.就想多尝试几个,结果发现一系列问题.最常出现的一个错误就是"UnicodeDecodeError : .. ...

  10. redis 远程连接出错的解决办法

    1. 配置防火墙端口 redis系统的默认端口是6379端口. # 打开端口 $ firewall-cmd --zone=public --add-port=6379/tcp --permanent ...