Jmeter使用之:怎么编写扩展函数(二)

目录

前言:

1、实现function的类的package声明必须包含".functions"

2、需要继承org.apache.jmeter.functions.AbstractFunction,并且实现相应的方法。

第一步:eclipse 导入jmeter目录:apache-jmeter-2.13libext下的 ApacheJMeter_core.jar(怎么导入jar包,不会就百度吧)

第二步:这里编写一个“获取当前时间前后的指定格式日期时间数据”的函数(__TimeConvert),自带的函数(__Time)不能满足要求。具体的编码为:

第三步:把该自定义函数导出为一个jar包(TimeConvertFunction.jar):

第四步:把导出的jar文件放到jmeter的 lib/ext目录,重启Jmeter,在函数助手框可以看到我们新加的自定义函数:__TimeConvert


前言:

在JMeter中,扩展函数是用于自定义功能和逻辑的强大工具。扩展函数允许你添加自定义的函数,以满足特定的测试需求。通过编写扩展函数,你可以执行复杂的数据处理、动态参数生成、自定义计算等操作。

前面,我已经在文章《Jmeter使用之:怎么编写扩展函数(一)》分享了怎么编写使用外部函数,但使用起来并不方便。我们要怎么像使用内置函数一样使用自定义函数呢?可以通过扩展JMeter函数来实现,在扩展JMeter函数之前主要有两点需要注意:

1、实现function的类的package声明必须包含".functions"

说明:JMeter设计让一些核心的类(非UI相关的,比如ApacheJMeter_core等)可以在非UI的方式下运行的时候能被加载进来,这些类会被优先加载。加载这些类的时候是通过命名规则来实现的。所有实现function的类必需包含".functions.",所以我们自定义实现的类里必须包含".functions",比如 "com.xmeter.customized.functions"。

2、需要继承org.apache.jmeter.functions.AbstractFunction,并且实现相应的方法。

下面来一个扩展函数的编写实例:

第一步:eclipse 导入jmeter目录:apache-jmeter-2.13libext下的 ApacheJMeter_core.jar(怎么导入jar包,不会就百度吧)

第二步:这里编写一个“获取当前时间前后的指定格式日期时间数据”的函数(__TimeConvert),自带的函数(__Time)不能满足要求。具体的编码为:

/*** 获取当前日期时间前后的指定格式日期时间数据*/
package com.ste.ruink.time.functions;import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
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;
/*** @author Ruink*/
public class TimeConvertFunction extends AbstractFunction {//自定义function的描述private static final List desc = new LinkedList();static {desc.add("获取当前时间往前(后)多少秒的时间,使用格式${__TimeConvert(flag,sec,format)},flag为前后标识符(pre-前,later-后,其他值时默认为当前),"+ "seconds为间隔时间多少秒,format为日期格式,默认为yyyy-MM-dd HH:mm:ss");}//确定function名称private static final String KEY = "__TimeConvert";//最多传入的参数个数private static final int MAX_PARA_COUNT = 3;//最少传入的参数个数private static final int MIN_PARA_COUNT = 3;//用于存入传入参数的值private Object[] values;/* * 告诉JMeter关于你实现的function的描述*/@Overridepublic List getArgumentDesc() {return desc;}/* *JMeter会将上次运行的SampleResult和当前的Sampler作为参数传入到该方法里,*返回值就是在运行该function后得到的值,以String类型返回。该方法如果操作了非线程安全的对象(比如文件),*则需要将对该方法进行线程同步保护。*/@Overridepublic String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {String flag = ((CompoundVariable) values[0]).execute().trim();long sec = new Integer(((CompoundVariable) values[1]).execute().trim());String format = ((CompoundVariable) values[2]).execute().trim();// 这里就是jmeter中执行函数后的返回结果return getTime(flag,sec,format);}/* * 这个就是function的名字。JMeter的命名规则是在方法名前面加入双下划线"__"。比如"__GetEven",* function的名字跟实现该类的类名应该一致,而且该名字应该以static final的方式在实现类中定义好,* 避免在运行的时候更改它。*/@Overridepublic String getReferenceKey() {// 返回函数名称return KEY;}/* * 这个方法在用于传递用户在执行过程当中传入的实际参数值。该方法在function没有参数情况下也会被调用。* 一般该方法传入的参数会被保存在类内全局变量里,并被后面调用的execute方法中使用到。*/@Overridepublic void setParameters(Collection args) throws InvalidVariableException {// 检查并获取传入变量值checkParameterCount(args, MIN_PARA_COUNT, MAX_PARA_COUNT); //检查传入的参数的个数是否正确values = args.toArray(); //将值存入类变量values中}/* * 自定义函数。获取时间,当前时间往前(后)多少秒,flag为前后标识符(pre-前,later-后,其他值时默认为当前),* seconds为间隔时间多少秒,format为日期格式,默认为yyyy-MM-dd HH:mm:ss*/  public static String getTime(String flag,long sec,String format){//获取当前时间戳long timestamp = System.currentTimeMillis();long finaltime;if(flag.equals("pre")){finaltime = timestamp - sec*1000;}else if(flag.equals("later")){finaltime = timestamp + sec*1000;}else{finaltime = timestamp;}//判断format是否有值if(format.equals(null)||format.equals("")){format="yyyy-MM-dd HH:mm:ss";}String timestr = String.valueOf(finaltime);String getdate = stampToDate(timestr,format);return getdate;}/* * 自定义函数。将时间戳转换为时间*/public static String stampToDate(String s,String format){String res;SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);long lt = new Long(s);Date date = new Date(lt);res = simpleDateFormat.format(date);return res;}
}


第三步:把该自定义函数导出为一个jar包(TimeConvertFunction.jar):

第四步:把导出的jar文件放到jmeter的 lib/ext目录,重启Jmeter,在函数助手框可以看到我们新加的自定义函数:__TimeConvert

1)最后,使用该函数,如在一个GET请求中使用:

2)执行并查看结果

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等)

相信能使你更好的进步!

点击下方小卡片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9377.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卡尔曼滤波简单实例分析

1 现实问题 假设一个物体位于1000米处以自由落体运动,底面有一台具有特殊功能的雷达,对其进行观察,现需要对其下落的高度进行测量; (1)建模 速度:V gt 位置:Y -Vt Y0 &#xff0…

ES6: 模版字符串

前言: ES5 中我们表示字符串的时候使用 或者 "" 作用: 在 ES6 中,我们还有一个东西可以表示字符串,就是 (反引号) let str hello worldconsole.log(typeof str) // string和单引号还有双引号的区别: 反引号可以换行…

Android 应用层 到 HAL 层

Android 应用层 到 HAL 层 1、相关知识点1.1 概要1.2 参考 2、拿SensorService举例2.1 Android Apps > Android Framework阶段2.2 Android Framework内部阶段2.2.1 frameworks/base2.2.2 frameworks/native 2.3 Android Framework > HAL 阶段2.3.1 旧版 HAL 1、相关知识点…

Python爬虫——怎么搭建和维护一个本地IP池

目录 背景 一、什么是本地代理IP池 二、代理IP池功能架构图 三、各个组件功能说明及示例代码 1. IP池管理器 2. 代理IP获取器 3. IP质量检测器 4、数据存储器 5、API接口层 6、应用程序 总结 背景 在我们进行爬虫工作时,经常需要使用代理IP。大多数代理…

计网笔记--网络层

1--网络层概述 网络层主要问题: ① 网络层向运输层提供怎样的服务? (可靠或不可靠) ② 网络层寻址问题(IP 地址) ③ 路由选择问题 (路径) 重点在于:TCP/IP协议栈 2--网络…

Pygame Zero(pgzrun)游戏库介绍

Pygame Zero(pgzrun)游戏库介绍 pgzero是python的一个第三方库。pgzrun 是 python game zero run 的缩写, 它对 Pygame 进行了封装, 屏蔽了繁琐枯燥的框架代码, 让学习者可以更专注于游戏的实现逻辑, 并且更快看到成果。 官网https://pygame-zero.read…

ASP.Net Core Web API快速搭建后台服务搭载SQLServer+FreeSQL(一)

目录 一.建立WebAPI所需要的环境 1. IDE编辑器:VisualStudio2019 2.数据库安装:SqlServer 3.下载SQL Server Management Studio (SSMS) 二.创建ASP.Net Core Web API工程 1.创建模板工程 2. 试运行案例接口 3.安装FreeSQL工具包 三.设计数据库 启…

【MySQL】不允许你不了解联结表

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指…

“生鲜蔬”APP的设计与实现

1.引言 在这个科技与网络齐头并进的时代,外卖服务正在飞速发展,人们对外卖APP系统功能需求越来越多,开发APP的人员对自己的要求也要越来越高,要从所做APP外卖系统所实现的功能和用户的需求来对系统进行设计,还需要与当…

python3开发-Word助手

目录 背景 思路 步骤 代码示例 总结 背景 在日常工作和学习中,我们经常需要处理Word文档,例如编辑、提取内容、生成报告等。而Python是一门功能强大的编程语言,它提供了丰富的库和工具,使得我们可以利用Python来处理Word文档…

Git无法上传删除 Commit里面有大文件

1.Bug描述 因为在一次提交中不小心把一个打包的aab文件弄到commit文件里了,于是在上传的时候push rejected 了。 因为GitHub的文件上限是100M,但是打的包太大了,有170M,所以是不能上传的,但是又是已经在Commit历史中了…

从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得。那为什么会有这么高的评价呢?是因为它有重大的理论或者模型创新吗?其实并没有,从模型创新角度看一般,创新不算大。但是架不住效果太好了,基本刷新了很多NLP的任务…