Jmeter函数助手中添加自定义函数
最近,群里的牛肉面大神有个需求,是将每个post请求的body部分做一个加密操作,其实这个需求不算难,用beanshell引入加密函数的包,然后调用就行了。只是,如果请求多了,每次都要调用一下自己加密函数,有点麻烦,也不利于给team内部其他人员,解决方法是把这个加密函数加到函数助手中去,这里我采用的方法是,将jmeter3.0的源代码下载下来,引入到eclipse当中,找到函数助手的包名,然后添加对应的java文件,编译,打包,再贴回到$JMETER_HOME/lib/ext/下面。网上有部分教程,但是不是很全,有些地方也没有说明白,这里我整理一下。
另外,国外的网站上说有另外一种方法,是直接写一个加密函数的java文件,包名必须名为.functions后缀,然后单独打成jar包放到$JMETER_HOME/lib/ext/,这种方法可能简单一点,然而我并没有调试成功,如果有成功的朋友可以在下方留言。
我自己的方法步骤及代码如下(关键部分代码隐去):
- 环境准备:
eclipse,这个就不细说了。
Jmeter3.0的源码,下载地址是:http://jmeter.apache.org/download_jmeter.cgi,页面上下载apache-jmeter-3.0_src.zip并解压到硬盘即可。
这里有没有ant不重要,我们这里只需要对函数助手打包即可。
- 把Jmeter源码导入到eclipse:
不能按照普通的导入java项目的方法导入。导入步骤如下:
第一步:新建一个java项目,比如名字叫jmeter
第二步:打开jmeter项目存放位置,关闭eclipse,删除jmeter目录下bin和src两个文件夹

第三步:修改.classpath文件:编辑.classpath文件,用apache-jmeter-3.0_src解压文件夹中的eclipse.classpath内容替换之。

第四部:重新打开eclipse,利用import导入源代码。


导入过后应该是这样的:

第五步:修改依赖,在build path中修改依赖包,加入$JMETER_HOME/lib下所有的jar包,同时加入$JMETER_HOME/lib/ext/ApacheJMeter_components.jar和$JMETER_HOME/lib/ext/ApacheJMeter_core.jar。
这样差不多项目前面的感叹号就消失了。

到此,倒入jmeter源代码的工作就完成了,我们可以加入代码。
- 找到src/functions,这里存放了所有函数助手中包含的函数:

- 我们这里增加一个java文件,我这里命名为AbbottEncry.java,关于依赖,可以参考下其他的java文件怎么写的,贴进去就行了,当然也要引入你的方法需要用的jar包,比如我这里的加密所用的jar包。
具体代码如下:代码实现部分省略,前后的定义放出来供大家参考。
package org.apache.jmeter.functions; import java.util.Collection;
import java.util.LinkedList;
import java.util.List; import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.jmeter.util.JMeterUtils;
import net.heyfinance.aes.AesCryptUtil;
import net.sf.json.JSONObject; /**
* for Abbott
*
*
*/
public class AbbottEncry extends AbstractFunction { // private static final String CHARSET_ENCODING = "UTF-8"; //$NON-NLS-1$ private static final List<String> desc = new LinkedList<>(); private static final String KEY = "__AbbottEncry";
//这个是在函数助手上显示的函数名称 static {
desc.add(JMeterUtils.getResString("src_body"));
desc.add(JMeterUtils.getResString("base_args"));
desc.add(JMeterUtils.getResString("encrtion_key"));
desc.add(JMeterUtils.getResString("encr_body"));
/*
这里4个参数,就是我们在调用函数助手时,输入的参数,这里有4个
src_body = 要加密的串串
base_args = 另外一条要加密的串串
encrtion_key = 加密用的key
encr_body = 加密后想存在jmeter中的参数名
*/
} private Object[] values;
public AbbottEncry() {
} /** {@inheritDoc} */
@Override
public String execute(SampleResult previousResult, Sampler currentSampler)
throws InvalidVariableException {
JSONObject jsonThree = new JSONObject();
String encrString = ""; //$NON-NLS-1$
String varName = ((CompoundVariable) values[values.length - 1]).execute().trim();
JMeterVariables vars = getVariables(); String srcBody = ((org.apache.jmeter.engine.util.CompoundVariable) values[0]).execute();
String baseArgs = ((org.apache.jmeter.engine.util.CompoundVariable) values[1]).execute();
String encrKey = ((org.apache.jmeter.engine.util.CompoundVariable) values[2]).execute();
//把参数转换成String //此处略去。。。 return encrString;
} /** {@inheritDoc} */
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
checkParameterCount(parameters, 3, 4);
//这里,后面的3,4是指调用函数助手时,可以接受的参数个数,低于3就不会执行(这个地方,可能解释不是很明确,后面再去看下官档)
values = parameters.toArray();
//把接受到的参数装成array,然后用value[i]取出来。
} /** {@inheritDoc} */
@Override
public String getReferenceKey() {
return KEY;
} /** {@inheritDoc} */
@Override
public List<String> getArgumentDesc() {
return desc;
}
}
- 写完了以后我们可以打包了,右键src/functions用export功能达成jar包,注意3.0后,函数助手的名字叫ApacheJMeter_functions.jar。打成jar包后,放到$JMETER_HOME/lib/ext/注意备份一下原来文件。
另外,自己的函数依赖包要放到$JMETER_HOME/lib。


- 重新启动Jmeter就行了,我们可以看到我们需要的函数了。这里还有个小bug,暂时不知道原因,第一次进去函数助手,看到自己的函数的时候,发现参数列表是空的,我以为是程序问题,但是选择一个别的函数,然后再选回到自己的函数上,参数又出现了,并且可以正常使用,暂时不知道原因,有兴趣的朋友可以讨论下。


至此,文章结束。
Jmeter函数助手中添加自定义函数的更多相关文章
- shell 从函数文件中调用函数的方法
你可以把所有的函数存储在一个函数文件中 你可以把所有的文件函数加载到当前脚本或命令行 加载函数文件中所有函数的方法: source xxx.sh
- jmeter函数助手之time函数实操
在一个接口测试中,需要提交的请求中要带时间,在看完jmeter帮忙文档,正好总结一下 1.需求 在一个XML请求中请求数据要带有时间,如下 "><ID>/lte/pdeta ...
- laravel5中添加自定义函数
laravel里面我们很多朋友不知道把自定义函数放在哪儿.我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么放置它会比较好呢?现在匀们为大家准备了laravel放置函数的规范. 1. 创建文件 ...
- open()函数 linux中open函数使用
来源:http://www.cnblogs.com/songfeixiang/p/3733855.html linux中open函数使用 open函数用来打开一个设备,他返回的是一个整型变量,如果 ...
- 苹果浏览器Safari对JS函数库中newDate()函数中的参数的解析中不支持形如“2020-01-01”形式
苹果浏览器safari对new Date('1937-01-01')不支持,用.replace(/-/g, "/")函数替换掉中划线即可 如果不做处理,会报错:invalid da ...
- 『动善时』JMeter基础 — 28、JMeter函数助手详解
目录 1.函数助手介绍 2.函数助手中的函数分类 3.常用函数介绍 (1)__Random函数 (2)__counter函数 (3)__time函数 (4)__property函数 (5)__setP ...
- jmeter主要函数助手功用说明
jmeter中虽然有很多的插件,但是有些需要安装,有些具有一定的局限性.函数助手是一个快捷的工具库.下面记录一下函数助手中一些主要的函数的使用方法. 注:不内容中所有的实例均基于3.2记录 1._Be ...
- 关于使用jmeter函数助手生成随机数的使用方法
记录自己的生活! 1.使用jmeter函数助手的生成随机数的方法,主要包含以下几个函数: [_Random] [_RandomString] 2.关于[_Random]函数的说 ...
- 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化
目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...
随机推荐
- Oracle- 复杂查询及总结
一.复杂查询 1. 列出至少有一个员工的所有部门编号.名称,并统计出这些部门的平均工资.最低工资.最高工资. 1.确定所需要的数据表: emp表:可以查询出员工的数量: dept表:部门名称: emp ...
- 表达式树(Expression Trees)
[翻译]表达式树(Expression Trees) 原文地址:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/con ...
- linux系统编程:用truncate调整文件大小
truncate的使用非常简单: int truncate(const char *path, off_t length); 参数1:文件名 参数2: 文件需要被调整的大小 length 大于 文件 ...
- nodejs 新建项目
第一步: 新建工程-->选择nodejs-->creat 注意: 如果出错就使用第二步!! 第二步:建立express 模板的nodejs 点击下图的命令窗口,依次输入下面命令 命令: & ...
- JS笔记--------预编译,闭包和作用域
(一)JS预编译四部曲: 1,创建AO对象. 2,找形参和变量声明,将变量和新参名作为AO属性名,值为undefined. 3,将实参值和形参值统一. 4,在函数体里找函数声明,值赋给函数体. (二) ...
- React之函数中的this指向
我们都知道在React中使用函数时,有两种写法,一是回调函数,二是直接调用,但需要在构造函数中绑定this,只有这样,函数中的this才指向本组件 总结一下没有绑定this的函数中的this指向 不管 ...
- OSGI企业应用开发(十)整合Spring和Mybatis框架(三)
上篇文章中,我们已经完成了OSGI应用中Spring和Mybatis框架的整合,本文就来介绍一下,如何在其他Bundle中,使用Mybatis框架来操作数据库. 为了方便演示,我们新建一个新的Plug ...
- Android Studio 编译: Program type already present: XXX 解决方案
3情况1:个例 build.gradle 中 dependencies { classpath 'com.android.tools.build:gradle:3.1.1' // } 改成 depen ...
- 精华阅读第 13 期 |常见的八种导致 APP 内存泄漏的问题
本期是移动开发精英俱乐部的第13期文章,都是以技术为主,所以这里就不过多的进行赘述了,我们直接看干货内容吧!本文系ITOM管理平台OneAPM整理. 实际项目中的MVVM(积木)模式–序章 导读:开篇 ...
- 让 Angular 应用动起来!
[编者按]本文主要通过生动的实例,介绍为 Angular 应用添加动画的原理与过程.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 我们知道,Angular 应用在更新 DOM 时,会直接将 ...