定制JMeter取样器
JMeter运行你区定义自己的取样器sampler,方法很简单,只需继承类org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient,并重写若干方法即可。
首先,创建一个maven项目,并加入jmeter相关的依赖包:
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter</artifactId>
<version>2.10</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>2.10</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_http</artifactId>
<version>2.10</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>2.10</version>
</dependency>
</dependencies>
然后,创建一个类,继承自AbstractJavaSamplerClient,并重写setupTest、teardownTest、runTest与getDefaultParameters方法即可
代码示例如下:
package pengliu.me.jmeter.plugins; 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.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger; import java.util.Iterator;
import java.util.Random; public class MySampler extends AbstractJavaSamplerClient
{
private static final Logger log = LoggingManager.getLoggerForClass(); @Override
public void setupTest(JavaSamplerContext context)
{
Iterator<String> it = context.getParameterNamesIterator();
while (it.hasNext())
{
String paramName = it.next();
this.log.info(String.format("-----------------paramName: %s, paramValue: %s-----------------",
paramName,
context.getParameter(paramName)));
} this.log.info(String.format("-----------------Get param 'name' from JMeter: %s-----------------",
context.getParameter("name", "Default Name")));
this.log.info(String.format("-----------------Current Thread Id: %s, Start 'setupTest(JavaSamplerContext context)'--------------------",
Thread.currentThread().getId()));
} @Override
public void teardownTest(JavaSamplerContext context)
{
this.log.info(String.format("-----------------Current Thread Id: %s, Start 'teardownTest(JavaSamplerContext context)'--------------------",
Thread.currentThread().getId()));
} public SampleResult runTest(JavaSamplerContext javaSamplerContext)
{
SampleResult result = new SampleResult();
result.sampleStart();
try
{
Random r = new Random();
long sleepTime = (long)r.nextInt(5000);
this.log.info(String.format("-----------------Current Thread Id: %s, Running Test, sleep time is %s--------------------",
Thread.currentThread().getId(),
sleepTime));
Thread.sleep(sleepTime); if(sleepTime%2 == 0)
{
throw new Exception("--------This is my exception from runTest!!!---------");
} result.sampleEnd();
result.setSuccessful(true);
result.setSampleLabel("My Lable: SUCCESS: " + Thread.currentThread().getId());
}
catch (Throwable e)
{
result.sampleEnd();
result.setSuccessful(false);
result.setSampleLabel("My Lable: FAIL: " + Thread.currentThread().getId()); e.printStackTrace();
} return result;
} @Override
public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("name", "edw"); return params;
}
}
- 其中setupTest与teardownTest方法,在一个线程只被执行一次,无论此Thread Group配置的Loop Count是多少,每个线程只运行一次这两个方法。
- 其中runTest方法,如果一个线程配置了多次的Loop Count,那么此runTest就会运行多次
- 其中getDefaultParameters方法,返回的是JMeter界面的参数列表,如下图:

- 使用”mvn package”命令打包上面的sampler:

- 将打包好的jar包放到JMeter的lib/ext目录下:

- 启动JMeter, 并加入一个Java Request的sampler:

- Classname选择代码中自定义的sampler类:

- 配置Thread Group,线程数为2,循环数为5:

选中Java Request这个sampler,可以设置参数name的值
- 开始执行后,JMeter会产生两个线程,每个线程都跑只跑一遍setupTest与teardownTest方法,但会跑5遍runTest方法
- 查看JMeter的日志输出:

查看”View Results in Table”中的结果:

定制JMeter取样器的更多相关文章
- 『动善时』JMeter基础 — 12、JMeter取样器详解:sampler
目录 1.取样器介绍 2.JMeter自带的取样器 3."HTTP请求"为例介绍一下取样器 (1)HTTP Request: (2)Web服务器: (3)HTTP请求: (4)同请 ...
- 【Python】使用Beautiful Soup等三种方式定制Jmeter测试脚本
背景介绍 我们在做性能调优时,时常需要根据实际压测的情况,调整线程组的参数,比如循环次数,线程数,所有线程启动的时间等. 如果是在一台Linux机器上,就免不了在本机打开图形页面修改,然后最后传递到压 ...
- python csv 数据切割定制jmeter数据
需求压测随机抽取10w数据中自定义区间的指定数量数据进行压测: jmeter csv/txt配置: 需要获取{data: [${myList}] } jmeter需要数据类型 获取展读取csv数据 ...
- Jmeter入门(5)- jmeter取样器的HTTP请求
一.HTTP管理器 位置:线程组右键 ==> 添加 ==> 配置元件 1.HTTP信息头管理器 添加测试计划 添加线程组 添加HTTP请求 添加请求头(HTTP信息头管理器) 设置请求参数 ...
- 一步一步和我学Apache JMeter
一. Apache JMeter介绍 1. Apache JMeter是什么? Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量 ...
- jmeter工具应用1
1.Jmeter介绍 Apache JMeter 是Apache组织的开放源代码项目,是一个纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域. 操 ...
- JMeter:生成漂亮的多维度的HTML报告
JMeter:生成漂亮的多维度的HTML报告我们做性能测试的时候会经常使用一些性能测试工具,我个人比较喜欢Jmeter这个工具,但是JMeter这个工具在生成测试报告方面一直有所欠缺.但是JMeter ...
- jmeter --- 测试计划里的元件
1.线程组 线程组元件是任何一个测试计划的开始点.在一个测试计划中的所有元件都必须在某个线程组下.顾名思义,线程组元件控制JMeter执行你的测试计划时候使用的线程数量.对线程组的控制允许你: 设置线 ...
- JMETER学习宝典
1. 简介 Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件(例如web应用程序).它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,Ja ...
随机推荐
- eclipse配置项目部署到到本地tomcat
一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...
- 华为公司内部培训资料_介绍RTSP的消息、信令等
https://wenku.baidu.com/view/b10415dabd64783e08122b9c.html
- 【转】Jmeter Http请求界面解释
一个HTTP请求有着许多的配置参数,下面将详细介绍: 名称:本属性用于标识一个取样器,建议使用一个有意义的名称. 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息. 服务器名称或IP :HTT ...
- 1136 A Delayed Palindrome
题意:略. 思路:大整数相加,回文数判断.对首次输入的数也要判断其是否是回文数,故这里用do...while,而不用while. 代码: #include <iostream> #incl ...
- oracle分布式事务总结
基本概念 Local Coordinator:在分布事务中,必须参考其它节点上的数据才能完成自己这部分操作的站点. Global Coordinator:分布事务的发起者,负责协调这个分布事务. Co ...
- 详解调试Apache的mod_rewrite模块
大家都知道Apache里面的Rewrite规则是一件很蛋疼的事情,有时候只是想做一个伪静态而已,不想去研究那些复杂的规则,可官方给的规则又常常出错,出了问题我们就要调试一下,看看提交的参数被映射到了哪 ...
- Oracle11gR2--SEC_CASE_SENSITIVE_LOGON参数解析
在Oracle的11g之前的版本中密码是不区分大小写的(使用双引号强制除外). 在Oracle的11g以及以后的版本中对此有所增强.从此密码有了大小写的区分. 这个大小写敏感特性是通过SEC_CASE ...
- Python 小练习一
1.如果同一个ip地址60s之内访问超过200次,那么就把ip加入黑名单 需求分析: 1.60s读一次文件 2.分割,取第一个元素,ip地址 3.把所有ip加入到一个list里面,如果ip次数超过20 ...
- codeforces:Helga Hufflepuff's Cup
题目大意:有一个包含n个顶点的无向无环连通图G,图中每个顶点都允许有一个值type,type的范围是1~m.有一个特殊值k,若一个顶点被赋值为k,则所有与之相邻的顶点只能被赋小于k的值.最多有x个顶点 ...
- ubuntu14.04 使用笔记
这是第二次安装使用ubuntu了,虽然上一次因为不习惯和不会使用一两天就放弃了,这次坚持的时间稍微长一点,目前ubuntu的基本使用也熟悉了.但是由于ubuntu上的应用太少,常用软件,比如QQ,Ph ...