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实现翻页功能

jmeter实现翻页功能_JMeter定制功能实现相关推荐

  1. pdf的预览,实现放大、缩小、翻页、跳转功能

    安装vue-pdf插件 npm install --save vue-pdf 或 yarn add vue-pdf 引入 pdf 文档地址 html代码: <!--PDF 预览-->< ...

  2. 前端Vue书籍翻页功能利用turn.js来完成以及知识点(源码)

    目录 下载 文档 开始 构造方法 可配置项 方法 语法 事件 两种方式添加事件 自动翻页loading加载功能 案例 CSS basic.css源码如下 JS里面代码太多了,直接官网下载 index. ...

  3. kindle PC端有没有办法连续翻页?

    没有 我给他们了反馈: PC版的kindle阅读器能设置程滚动翻页吗? 该功能从2015年,就有用户需求,现在都2021年3月28日10:10:55了,6年多了,你们开发这个功能很难嘛? 请把客户当人 ...

  4. 宽屏首页列表翻页教程网(带手机) v5.26

    介绍 宽屏首页列表翻页教程网源码是asp+access/mssql架构网站系统,电脑版,手机版,平板版无缝切换,一个后台同步管理,整站生成静态利于搜索收录,dreamweaver打开可视化修改. 可用 ...

  5. swiper-页面的翻页动画--渐变效果

    这次内容我们介绍在swiper页面的翻页动画--渐变效果 既然有翻页,那么肯定少不了翻页效果,这个功能在swiper当中也给我们进行了包装,所以我们在使用的时候变得非常的方便. 首先进行基本的布局以及 ...

  6. 爱奇艺阅读怎么自动翻页

    爱奇艺阅读怎么自动翻页,相信很多的小伙伴也是在使用这款软件阅读小说,由于自己对于这款软件不是的熟悉,自己对此也是想要知道这个怎么自动翻页,自己也不太的了解,下面就给大家带来详细介绍. 爱奇艺阅读怎么自 ...

  7. php跳转方式带rere_PHP翻页跳转功能实现方法

    我们都知道用php+mysql在web 页实现数据库资料全部显示是非常简单而有趣的,数据库资料很少的情况下页面显示还是让人满意的,但是当数据库资料非常多的情况下,页面的显示情况将会变的非常糟糕,下面就 ...

  8. springboot:实现分页查询,以及翻页功能

    在pom.xml中引入依赖 <!-- 分页查询插件 --><dependency><groupId>com.github.pagehelper</groupI ...

  9. oracle的本地安装和PUTTY+XMING远程连接安装和oracle翻页功能

    因为我也是一个初学者,所以可能有出错的地方,如果有希望大家告诉我QQ:7343696.大家公共学习,进步. Oracle的安装 实验的环境是vmware server 1.06  rehl 5.2最小 ...

最新文章

  1. 获取SQLServer数据库中所有表
  2. Elasticsearch之Search API
  3. Tensorflow【实战Google深度学习框架】—使用 TensorFlow 实现模型
  4. windows双机调试
  5. LeetCode 1825. 求出 MK 平均值(set + queue)
  6. 【软件工程】交付后维护
  7. Hibernate事务增删改查(第一部分)
  8. java报505_Java调用URL错误,报505
  9. Java 异常丢失及finally子句
  10. oracle ora12514错误,【ORACLE】提示ORA-12514错误处理
  11. Java—读取多层嵌套Json文件的内容并根据索引返回JsonObject
  12. ansa导入catia模型_CATIA模型导入ADAMS的经验
  13. android rar文件怎么打开方式,rar文件手机上怎么打开 手机怎么打开zip文件
  14. html水晶按钮图片,PS按钮制作高级教程之网页常用水晶按钮
  15. Win10 使用黑屏重置键 解决 黑屏问题
  16. XDP/BPF Github教程
  17. 如何在AutoCAD中实现鼠标双击事件
  18. WebView(五)—— WebView的优化
  19. 基于PyQt5的简易计算器
  20. LAYOUT BGA布线规则

热门文章

  1. Hadoop入门(十七)Mapreduce的多表关联程序
  2. 115个Java面试题和答案——终极列表(下)
  3. JDK8新特性之方法引用
  4. 1分钟了解“区块链分叉”的本质
  5. 构建SpringCloud项目基础框架
  6. 二叉排序树的删除+图解
  7. kotlin能用嵌入式linux,Kotlin在项目中的应用和踩过的坑
  8. C打印函数printf的一种实现原理简要分析
  9. Vue 使用 token
  10. JDK8的日期时间类2