jmeter实现翻页功能_JMeter定制功能实现

jmeter实现翻页功能

JMeter提供了可在采样器中使用的功能。 在编写复杂的测试计划时,您会觉得JMeter缺少某些方法。 您使用Beanshell脚本定义自己的自定义方法。 JMeter调用Beanshell解释器来运行脚本。 只要您不产生高负载(大量线程),此方法就可以正常工作。 但是,一旦JMeter尝试产生高负载,它就会耗尽资源并大大降低速度。 如果改用JMeter自定义函数,则JMeter可以轻松生成高负载。 唯一的问题是弄清楚实现要求以及如何与JMeter集成。 JMeter几乎没有提供任何有关自定义函数实现的文档。 但是在浏览了JMeter源代码和Googling之后,我找到了实现JMeter自定义功能的方法。

定制方法实施

让我们深入了解实现的细节。 有一些应满足的要求。 这些如下。

  • 函数类包名称必须包含“ .functions”。
  • 函数类必须扩展AbstractFunction并实现execute(),setParameters(),getReferenceKey()和getArgumentDesc()方法
  • 制作jar文件并放入<JMETER_HOME> / lib / ext目录,然后重新启动JMeter

包裹名字

JMeter的设计使其无需GUI(通用用户界面)即可运行。 它加载核心类并执行测试计划。 它为核心类提供了较高的优先级,并且更喜欢先加载这些类。 为了确保GUI和核心/后端不混合,它根据程序包名称隔离类。 它尝试遵循约定,即函数实现类应存在于包中,该类应在其中包含“函数”字,例如com.code4reference.jmeter.functions 。 它在后台查找jmeter.properties文件,并尝试查找以下属性值。

classfinder.functions.contain=.functions.

如您所见,提供的默认值是".functions." 。 您可以将其更改为其他名称,但必须确保自定义函数类包名称中应存在相同的词。 最好保留默认值。 一旦定义了包,就可以编写Function实现类了。

函数实现类

在编写此类时,您必须实现以下方法。

  1. String getReferenceKey():可以从采样器调用的函数的名称。 约定是在函数名称之前放置两个“ __”(下划线),例如__TimeInMillis ,函数名称应与实现此函数的类名称相同。 此函数名称应存储在某个静态的最终String变量中,以便在执行期间不能更改。
  2. List getArgumentDesc():此方法基本上以字符串列表形式返回参数描述。 此描述出现在功能助手中(如下图所示)
  3. setParameters(Collection parameters):此方法由JMeter调用,它传递在函数调用中传递的值。 变量作为CompoundVariable的集合传递。 即使未提供任何参数,也会调用此方法。 在此方法中,可以在execute()方法中设置和访问全局变量。
  4. 字符串execute(SampleResult previousResult,Sampler currentSampler): JMeter传递先前的SampleResult和当前的SampleResult。 此方法返回一个字符串,该字符串将用作函数调用的替换值。 该方法被多个线程调用,因此它必须是线程安全的。 这种方法的奇怪之处在于,在处理完参数之后,必须将结果转换为字符串并返回

JMeter功能助手

源代码

在下面的示例源代码中,我实现了一个名为__TimeInMillis函数。 在使用提供的偏移量调整当前时间后,此方法以毫秒为单位返回时间。 例如,当当前时间是1371413877000时,此$ {__ TimeInMillis(2000)}方法调用将返回1371413879000。

package com.code4reference.jmeter.functions;import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Calendar;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 org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;public class TimeInMillis extends AbstractFunction {private static final List<String> desc = new LinkedList<String>();private static final String KEY = "__TimeInMillis";private static final int MAX_PARAM_COUNT = 1;private static final int MIN_PARAM_COUNT = 0;private static final Logger log = LoggingManager.getLoggerForClass();private Object[] values;static {desc.add("(Optional)Pass the milliseconds that should be added/subtracted from current time.");}/*** No-arg constructor.*/public TimeInMillis() {super();}/** {@inheritDoc} */@Overridepublic synchronized String execute(SampleResult previousResult, Sampler currentSampler)throws InvalidVariableException {//JMeterVariables vars = getVariables();Calendar cal = Calendar.getInstance();if (values.length == 1 ) { //If user has provided offset value then adjust the time.log.info("Got one paramenter");try {Integer offsetTime =  new Integer(((CompoundVariable) values[0]).execute().trim());cal.add(Calendar.MILLISECOND, offsetTime);} catch (Exception e) { //In case user pass invalid parameter.throw new InvalidVariableException(e);}           }return String.valueOf(cal.getTimeInMillis());}/** {@inheritDoc} */@Overridepublic synchronized void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {checkParameterCount(parameters, MIN_PARAM_COUNT, MAX_PARAM_COUNT);values = parameters.toArray();}/** {@inheritDoc} */@Overridepublic String getReferenceKey() {return KEY;}/** {@inheritDoc} */@Overridepublic List<String> getArgumentDesc() {return desc;}
}

我重点介绍了代码的一些关键部分。 在第19行,设置功能名称,如在第26行提供功能描述。 在第60行,检查参数数量,并确保已提供正确数量的参数。 代码的主要部分在44到51之间突出显示,其中当前时间被调整并作为字符串对象返回。 如果您有兴趣检查其他函数的实现,那么请检查github / Code4Reference上存在的整个源代码。 编写代码后,将其编译并制作jar文件并将其放置在<JMETER_HOME> / lib / ext目录中。 你可以得到一个样本Gradle脚本构建jar文件这篇文章 。 如果您不了解Gradle,则可以使用命令生成jar文件 。 通过在Eclipse中导出包并选择导出目标作为Jar文件,是创建jar文件的最简单方法。

参考:来自Code4Reference博客上的JCG合作伙伴 Rakesh Cusat的JMeter自定义函数实现 。

翻译自: https://www.javacodegeeks.com/2013/06/jmeter-custom-function-implementation.html

jmeter实现翻页功能

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

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

相关文章

常见的集成逻辑门(CMOS\TTL\ECL)

CMOS系列 TTL系列 ECL系列 集成逻辑门的主要性能指标 关于噪声容限UN 输出负载能力 总结一下&#xff1a;不管那么多&#xff0c;先把两个算出来&#xff0c;取最小的就完事了 答案&#xff1a;ECL,CMOS,ECL,CMOS

git如何快速提交代码(大学生适用)

众所周知&#xff0c;git是一个强大的版本控制工具 git的学习成本比较高&#xff0c;但大学生常用的功能也就那么几个 首先你需要下载一个git&#xff0c;生成一个密钥 生成方法&#xff1a;打开git&#xff08;bash&#xff09; $ ssh-keygen -t rsa -C “你的邮箱地址”&a…

mongodb副本集_设置MongoDB副本集分为4个步骤

mongodb副本集介绍 在详细介绍配置MongoDB副本集之前&#xff0c;让我简要介绍一下它们&#xff1a; 副本集是Mongodb数据库提供的功能&#xff0c;可实现高可用性和自动故障转移。 它是一种传统的主从配置&#xff0c;但具有自动故障转移功能。 基本上&#xff0c;它是mong…

Spring Boot:使用Thymeleaf布局方言的Thymeleaf模板装饰器

介绍 在所有Thymeleaf模板上重用页眉和页脚的问题经常在StackOverflow上提出。 在本文中&#xff0c;我将向您展示如何使用Thymeleaf布局方言来结构化模板&#xff0c;以在Spring Boot应用程序中实现更高的代码可重用性。 创建一个Spring Boot应用程序 让我们使用Spring Initi…

猫、狗与Java的多态

多态&#xff08;Polymorphism&#xff09;按字面的意思就是“多种状态”。在面向对象语言中&#xff0c;接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术&#xff0c;赋值之后&#…

Java构建子类对象时的顺序

先看一个这么的程序&#xff1a; //------------------------------------------------------------------------// //程序目的&#xff0c;创建一个父类与子类&#xff0c;分别创建构造方法 public abstract class usecase1 {abstract void testAbstract();usecase1(){//&…

使用绝对布局的方法创建一个登录密码验证的简易窗口

绝对布局是指直接采用坐标指定的方式在容器中创建窗口&#xff0c;这种方式比较灵活 采用这种方法创建布局的方式主要有以下几步&#xff1a; 使用Container.setLayout(null)的方式取消布局管理器使用Compon.setBounds()的方式来设置每个组件的大小 下面先上代码 import ja…

古诺模型_再见了古诺。 你好Drools工作台。

古诺模型Drools 6.0发生了许多变化。 随着功能和功能的更改&#xff0c;我们对Guvnor github存储库进行了重组&#xff0c;以更好地反映我们的新架构。 历史上&#xff0c;Guvnor一直是Drools的Web应用程序。 它由Drools专用的编辑器&#xff0c;后端存储库和简化的资产管理系统…

八千字复习一下天线与电磁波

1. 空间坐标系 空间直角坐标系&#xff08;常用&#xff09;极坐标系平面直角坐标系距离矢量就是空间向量坐标单位矢量就是给距离矢量xyz底下分别除以模长梯度就是xyz求偏导&#xff0c;记得写 ex⃗\vec{e_{x}}ex​​/ey⃗\vec{e_{y}}ey​​/ez⃗\vec{e_{z}}ez​​,最后方程左…

Apache Fluo:填充Google搜索索引的Percolator的实现

Apache Fluo是Apache Accumulo [3]的Percolator [2]&#xff08;填充Google的搜索索引&#xff09;的开源实现 。 使用Fluo&#xff0c;用户可以将新数据连续地合并到大型现有数据集中&#xff0c;而无需重新处理所有数据。 与批处理和流传输框架不同&#xff0c;Fluo提供了低得…

最通俗的语言讲解卷积码、码树图、状态图以及维特比译码

什么是卷积码&#xff1f; 卷积码是由伊利亚斯发明的一种非分组码&#xff0c;它更加倾向于纠错&#xff0c;对于实际的性能优于分组码&#xff0c;运算较为简单。 将卷积码记为(n,k,N),码率定义为k/n n是n个比特 k是k个信息位 N是N个信息段 卷积码编码器 组成&#xff1a…

通信系统的同步技术归纳

载波同步&#xff1a;在相干解调时&#xff0c;接收端的解调器要产生一个与接收到的载波同频同相的相干载波位同步&#xff1a;接收端产生一个与接收信号符号速率相同&#xff0c;相位与最佳判决时刻一致的定时脉冲序列信号群同步&#xff1a;群同步是指在接收端产生与“字、句…

c语言 在txt文件中搜索关键词_网络推广外包—网络推广外包如何在搜索引擎中体现关键词优化效果...

在当下的互联网时代中&#xff0c;没有企业愿意远离这种流量获取快、用户需求大、宣传推广能力见效快的搜索引擎&#xff0c;况且通过互联网的帮助下&#xff0c;企业网站能够通过搜索引擎进行关键词优化后获取更多的转化率&#xff0c;增加企业交易额度的提升&#xff0c;谁又…

Spring JPA数据+Hibernate+ MySQL + Maven

在Spring MVC的帮助下开发Web应用程序意味着要创建几个逻辑架构层。 层之一是DAO&#xff08;存储库&#xff09;层。 它负责与数据库进行通信。 如果您至少开发了DAO层一次&#xff0c;则应该知道它涉及许多样板代码。 Spring Data本身就是与DAO相关的日常工作的一部分。 在帖…

数字通信系统中的均衡技术

均衡技术是为了消除码间串扰的影响 自适应均衡器 可以自动调整抽头滤波系数的均衡器。包含两个工作模式&#xff0c;训练模式和跟踪模式&#xff1b; 训练模式&#xff1a;发射机发射一个已知的定长的序列&#xff0c;以便接收机处的均衡器可以做出正确的设置跟踪模式&#…

eclipse中birt插件使用_waves教学:如何使用通道条插件在DAW中创建模拟工作流

这篇Waves小文章将帮助你了解通道条插件如何来加快混音工作流程&#xff0c;同时还能在DAW中添加令人愉悦的模拟调音台染色——以及它们如何以前所未有的灵活性适应数字新时代。什么是通道条&#xff1f;第一次看到一台老式模拟调音台时&#xff0c;人们常常因为按键、旋钮和推…

X-Mas Musings –在Grails集成测试中不要使用随机服务器端口

对许多人来说&#xff0c;十二月是反思或思考的时期。 所以我决定在去年的事情和想法&#xff0c;以反映- 每一天 &#xff0c;直到圣诞节。 这是第四天 对于Grails集成测试&#xff0c;了解应用程序当前在哪个端口上运行非常有用。 Spring Boot以及因此建立在它上面的Grails都…

主板螺丝是机箱配还是主板配_要配新电脑,A520主板和B450主板哪一个更加值得购买?...

Hello大家好&#xff0c;我是兼容机之家的小牛。上周AMD正式发布了最新的A520芯片组主板&#xff0c;这也补齐了500系列主板的高中低三档配置&#xff0c;现在500系列主板已经拥有X570、B550、A520三个芯片组。那么小牛为什么要拿上一代的B450和最新的A520来做对比呢&#xff1…

使用WebLogic共享库连续交付ADF应用程序

介绍 当ADF应用程序建立在共享库之上时&#xff0c;有一种非常流行的架构模式。 因此&#xff0c;主应用程序被部署为EAR&#xff0c;并且所有子系统都在共享库中实现&#xff0c;这些共享库可以在“热”模式下独立构建并作为JAR部署到WebLogic&#xff0c;而无需停机。 这种方…

信号与系统 chapter1 常见信号及其变换

什么是信号&#xff1f; 它的定义及其宽泛&#xff0c;但在我们电子通信工程中&#xff0c;我们可以把它看成一种波形&#xff1b;在数学上&#xff0c;我们可以把它看成一个函数。说到函数&#xff0c;函数又分为离散与连续&#xff0c;信号也是一样&#xff0c;分为离散信号…