实施自定义JMeter采样器

随着我们采用不同的体系结构和实现方式,对通用压力测试工具的需求不断增长。

Apache Jmeter是进行负载测试时最著名的工具之一。 它支持许多协议,例如ftp http tcp,并且可以轻松地用于分布式测试。

Jmeter还为您提供了一种创建自定义采样器的简便方法。 例如,如果您需要对HTTP终结点进行负载测试,而该终结点需要用于签名标头的特定过程,那么自定义采样器将派上用场。

目标是实现一个自定义采样器项目,该项目将对一个简单功能进行负载测试。

在此示例中,我使用gradle 。

group 'com.gkatzioura.jmeter'
version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.6repositories {mavenCentral()
}dependencies {compile 'org.apache.jmeter:ApacheJMeter_java:2.11'compile 'org.json:json:20151123'testCompile group: 'junit', name: 'junit', version: '4.11'
}task copySample(type:Copy,dependsOn:[build]) {copy {from project.buildDir.getPath()+'/libs/jmeter-sampler-1.0-SNAPSHOT.jar'into 'pathtoyourjmeterinstallation/apache-jmeter-2.13/lib/ext/'}
}

我包括对项目的ApacheJMeter依赖项,因为采样器将必须扩展AbstractJavaSamplerClient。 copySample任务会将jar复制到所有采样器所在的Jmeter的lib / ext路径中。

采样器将调用一个简单的函数:

package com.gkatzioura.jmeter;/*** Created by gkatzioura on 30/1/2016.*/
public class FunctionalityForSampling {public String testFunction(String arguement1,String arguement2) throws Exception {if (arguement1.equals(arguement2)) {throw new Exception();}else return arguement1+arguement2;}}

CustomSampler类扩展AbstractJavaSamplerClient类并调用testFunction。 通过覆盖getDefaultParameters函数,我们可以应用可与请求一起使用的默认参数。

package com.gkatzioura.jmeter;import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.Serializable;/*** Created by gkatzioura on 30/1/2016.*/
public class CustomSampler extends AbstractJavaSamplerClient implements Serializable {private static final String METHOD_TAG = "method";private static final String ARG1_TAG = "arg1";private static final String ARG2_TAG = "arg2";private static final Logger LOGGER = LoggerFactory.getLogger(CustomSampler.class);@Overridepublic Arguments getDefaultParameters() {Arguments defaultParameters = new Arguments();defaultParameters.addArgument(METHOD_TAG,"test");defaultParameters.addArgument(ARG1_TAG,"arg1");defaultParameters.addArgument(ARG2_TAG,"arg2");return defaultParameters;}@Overridepublic SampleResult runTest(JavaSamplerContext javaSamplerContext) {String method = javaSamplerContext.getParameter(METHOD_TAG);String arg1 = javaSamplerContext.getParameter(ARG1_TAG);String arg2 = javaSamplerContext.getParameter(ARG2_TAG);FunctionalityForSampling functionalityForSampling = new FunctionalityForSampling();SampleResult sampleResult = new SampleResult();sampleResult.sampleStart();try {String message = functionalityForSampling.testFunction(arg1,arg2);sampleResult.sampleEnd();;sampleResult.setSuccessful(Boolean.TRUE);sampleResult.setResponseCodeOK();sampleResult.setResponseMessage(message);} catch (Exception e) {LOGGER.error("Request was not successfully processed",e);sampleResult.sampleEnd();sampleResult.setResponseMessage(e.getMessage());sampleResult.setSuccessful(Boolean.FALSE);}return sampleResult;}}

编译完成后,必须将创建的jar复制到JMeter安装目录的lib / ext目录。 同样,如果还有更多依赖项需要导入,则还应该将它们复制到JMeter安装目录的lib路径中。

通过将Java Sampler添加到JMeter线程组来完成该过程之后,我们可以选择我们的自定义采样器。

screenshot-from-2016-01-31-013006

  • 您也可以在此处找到源代码。

翻译自: https://www.javacodegeeks.com/2016/02/implement-custom-jmeter-samplers.html

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

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

相关文章

hdu 6194 后缀数组

题意:一个字符串,查询恰好出现k次的子串的数目 思路:后缀数组在height上进行操作。我们直接枚举长度为k的区间求min值,但是要注意的是直接这么算是会重复的,同时也可能超过k次,这样我们就需要把枚举的前一个…

linux grep命令 例子,14个grep命令使用例子

所有的类linux系统都会提供一个名为grep(global regular expression print,全局正则表达式输出)的搜索工具。grep命令在对一个或多个文件的内容进行基于模式的搜索的情况下是非常有用的。模式可以是单个字符、多个字符、单个单词、或者是一个句子。当命令匹配到执行…

JSP动作元素

https://www.w3cschool.cn/jsp/jsp-actions.html JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。 动作是第三种类型的语法元素,它们被转换成java代码来执行操作。如访问一个java对象或调用方法 利用JSP动作可以动态地插入文件、重用JavaBean组件…

c语言中的所有代码大全,C语言库函数代码大全

O类字母函数名: open 功 能:打开一个文件用于读或写 用 法: int open(char *pathname,int access[, int permiss]); 程序例: #include#include#include#include int main(void) { inthandle; char msg[] "Helloworld";if ((handle open("TEST.$$$", O_CRE…

依赖注入通俗解释_我如何向团队解释依赖注入

依赖注入通俗解释最近,我们公司开始开发一个新的基于Java的Web应用程序,经过一些评估过程,我们决定使用Spring。 但是许多团队成员并不了解Spring和Dependency Injection的原理。 因此,我被要求给出一个速成班,讲解什么…

session cookie

http://www.cnblogs.com/andy-zhou/p/5360107.html(牛逼网址) http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html(同款牛逼) cookie: session: Session是另一种记录客户状态的机制,不同的是Cookie保存…

C语言程序设计二期末考试,9第二学期期末考试《C语言程序设计》A

期末试题 二级c语言………………………………装………………………………订…………………………………线………………………………安徽工业大学题纸(一)2009~2010学年第一学期期末考试《C程序设计(2)》试卷 A考试时间:120分钟满分:100分(作题答案一律写…

SWT ScrolledComposite解释

就像我的一个朋友曾经说过的那样,SWT的ScrolledComposite是令人讨厌的野兽。 在某种程度上,我同意。 这可能是为什么有太多关于如何使用此小部件的问题的原因。 但不仅是ScrolledComposite的作者受到了谴责。 当某个软件无法按您预期的方式工作时&#…

c语言中变量的值十进制,C语言中介绍的整型变量 即十进制 十六进制什么的是什么意思 能具体解释一下吗 还有换算什么的 谢谢...

二进制.八进制.十进制.十六进制.编程序时不需要换算。输入的时候八进制%o十六进制%x十进制%d在计算机都一样是二进制,不影响计算,不存在转换问题。输出的时候,同理用%o,%d,%x输出相应的进制。(0.56)85*8-16*8-2(0.71875)10(12A)161*1622*161A…

大数相加c语言思路,大数相加

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include /**** 定义双向节点* 数据区为一个整型数字***/struct Node {int number;//数据区,仅一个数字,保存一位数字struct Node * next;struct Node * prev;};typedef struct Node Node;/*** 创建…

关联关系、依赖关系总结

一、关联关系总结: 1.对象和对象之间的连接。在Java中,关联关系的代码表现形式为一个类做为另一个类的属性类型存在。即“有”的关系:”has-a”。 2.关联关系的方向:关联关系分为单向关联和双向关联 ①单向关联: A类…

使用cglib创建代理对象

在上一篇文章中,我讨论了基于标准Java的代理对象。 当您要在实现接口的对象上具有方法调用处理程序时,可以使用这些方法。 Java反射代理的创建要求您具有一个实现接口的对象。 我们要代理的对象已经失控,它没有实现我们要从处理程序调用的接口…

四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现

解微分方程2001年3月焦作大学学报JOURNALOFJIAOZ&a…

8个超震撼的HTML5和纯CSS3动画源码

HTML5和CSS3之所以强大,不仅因为现在大量的浏览器的支持,更是因为它们已经越来越能满足现代开发的需要。Flash在几年之后肯定会消亡,那么HTML5和CSS3将会替代Flash。今天我们要给大家分享8个最新的HTML5和纯CSS3动画及其源码,这些…

c语言打砖块游戏代码,打砖块游戏的源代码(请多指教)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#include#include#includevoid draw(int x1){int m0,n0,x40,y20;int t0,i,j,k1;int a0,b127,c88;for(i0;i<8;i){ni*20;yn20;for(j0;j<16-t;j){m(ji)*40;xm40;int points[]{m,n,x,n,x,y,m,y}; setfillstyle(R…

git本地创建新分支并推送到远程仓库

1,在当前项目目录&#xff0c;从已有的分支创建新的分支(如从master分支),创建一个dev分支 git checkout -b dev 2,创建完可以查看一下,分支已经切换到dev git branch * dev master 3,提交该分支到远程仓库 git push origin dev 4,测试从远程获取dev git pull origin dev 5,我觉…

javadoc 开源项目_在下一个项目中不使用JavaDoc的5大原因

javadoc 开源项目JavaDoc对于框架和库的开发是绝对必需的&#xff0c;这些框架和库为其他框架&#xff08;例如Spring Framework&#xff0c;JDK&#xff09;提供了公共接口。 对于内部企业软件和/或产品开发&#xff0c;我有以下原因会在将来忽略“ 100&#xff05;JavaDoc Po…

android拍照功能无预览,Android 无预览拍照

最近得到了一个需求&#xff0c;在后台拍照并保存public void onTakePhotoClicked() {final SurfaceView preview new SurfaceView(this);SurfaceHolder holder preview.getHolder();// deprecated setting, but required on Android versions prior to 3.0holder.setType(Su…

vim选中字符复制/剪切/粘贴

问题描述&#xff1a; vim 中选中指定字符&#xff0c;进行复制/剪切/粘贴 问题解决&#xff1a; 进入vim中visual模式&#xff0c;visual模式进入&#xff0c;可以有三种方式&#xff1a; &#xff08;1&#xff09;在普通模式&#xff08;normal&#xff09;下&#xf…

使用JavaFX构建反应系统

JavaFX是用于在Java中构建图形应用程序的新标准库&#xff0c;但是许多程序员仍然对Swing甚至&#xff08;高音&#xff09;AWT感到困惑。 在Java诞生20年来&#xff0c;发生了很多事情。 两年前&#xff0c;当我开始研究Speedment UI的JavaFX库时&#xff0c;发现很多东西很着…