我们在使用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. react-router解决锚点跳转问题

    添加一个onClick方法.onClick方法传入一个锚点的id,然后用下面的函数来找到锚点并跳转到锚点. scrollToAnchor = (anchorName) => { if (anch ...

  2. CSS 选择器 选择 拥有多个类名 的元素

    今天开发的时候,碰到这个连起来的类名. 才想起来,这个类似于 <div class="node hide"></div> 连起来写,表示找到  拥有这两个类 ...

  3. 经典的Foo和getName

    搜了下经典的Foo和getName的题目,看了几个解释,懒得看,自己解一下,作为笔记. function Foo(){ getName = function(){ console.log(1); }; ...

  4. Java基础-常用工具类(二)

    Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 通过 Scanner 类的 next() 与 nextLine() ...

  5. OO课程中IDEA相关插件的使用

    写在前面   由于OO课程博客作业的需要分析代码的复杂度并绘制UML图,但是课件上推荐的分析工具(http://metrics.sourceforge.net )经过自己几个小时的折腾还是没有安装成功 ...

  6. webgl优化

    浏览器支持: Mozilla Firefox 42,Google Chrome 46,Apple Safari 9.0,MS Internet Explorer 11,MS Edge 13 Safar ...

  7. huffman(greedy)

    present a file by binary character code,let the less characters can be presented simplier. package g ...

  8. Ubuntu安装lrzsz

    本文主要介绍在Ubuntu下安装lrzsz工具,方便windows和linux间的文件上传下载 方法1:二进制包自动安装1.1 在终端中,输入命令,自动安装,简单方便: sudo apt-get in ...

  9. hdu 1754 I Hate It (单点修改+区间最值+裸题)

    Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  10. PythonStudy——Python中的None与 NULL(即空字符)的区别

    None与 NULL(即空字符)的区别  (1)是不同的一种数据类型 >>>type(None) <class 'NoneType'> >>>type( ...