• 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取样器的更多相关文章

  1. 『动善时』JMeter基础 — 12、JMeter取样器详解:sampler

    目录 1.取样器介绍 2.JMeter自带的取样器 3."HTTP请求"为例介绍一下取样器 (1)HTTP Request: (2)Web服务器: (3)HTTP请求: (4)同请 ...

  2. 【Python】使用Beautiful Soup等三种方式定制Jmeter测试脚本

    背景介绍 我们在做性能调优时,时常需要根据实际压测的情况,调整线程组的参数,比如循环次数,线程数,所有线程启动的时间等. 如果是在一台Linux机器上,就免不了在本机打开图形页面修改,然后最后传递到压 ...

  3. python csv 数据切割定制jmeter数据

    需求压测随机抽取10w数据中自定义区间的指定数量数据进行压测: jmeter csv/txt配置: 需要获取{data: [${myList}]  }  jmeter需要数据类型 获取展读取csv数据 ...

  4. Jmeter入门(5)- jmeter取样器的HTTP请求

    一.HTTP管理器 位置:线程组右键 ==> 添加 ==> 配置元件 1.HTTP信息头管理器 添加测试计划 添加线程组 添加HTTP请求 添加请求头(HTTP信息头管理器) 设置请求参数 ...

  5. 一步一步和我学Apache JMeter

    一. Apache JMeter介绍 1. Apache JMeter是什么? Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量 ...

  6. jmeter工具应用1

      1.Jmeter介绍 Apache JMeter 是Apache组织的开放源代码项目,是一个纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域. 操 ...

  7. JMeter:生成漂亮的多维度的HTML报告

    JMeter:生成漂亮的多维度的HTML报告我们做性能测试的时候会经常使用一些性能测试工具,我个人比较喜欢Jmeter这个工具,但是JMeter这个工具在生成测试报告方面一直有所欠缺.但是JMeter ...

  8. jmeter --- 测试计划里的元件

    1.线程组 线程组元件是任何一个测试计划的开始点.在一个测试计划中的所有元件都必须在某个线程组下.顾名思义,线程组元件控制JMeter执行你的测试计划时候使用的线程数量.对线程组的控制允许你: 设置线 ...

  9. JMETER学习宝典

    1. 简介 Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件(例如web应用程序).它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,Ja ...

随机推荐

  1. eclipse配置项目部署到到本地tomcat

    一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...

  2. 华为公司内部培训资料_介绍RTSP的消息、信令等

    https://wenku.baidu.com/view/b10415dabd64783e08122b9c.html

  3. 【转】Jmeter Http请求界面解释

    一个HTTP请求有着许多的配置参数,下面将详细介绍: 名称:本属性用于标识一个取样器,建议使用一个有意义的名称. 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息. 服务器名称或IP :HTT ...

  4. 1136 A Delayed Palindrome

    题意:略. 思路:大整数相加,回文数判断.对首次输入的数也要判断其是否是回文数,故这里用do...while,而不用while. 代码: #include <iostream> #incl ...

  5. oracle分布式事务总结

    基本概念 Local Coordinator:在分布事务中,必须参考其它节点上的数据才能完成自己这部分操作的站点. Global Coordinator:分布事务的发起者,负责协调这个分布事务. Co ...

  6. 详解调试Apache的mod_rewrite模块

    大家都知道Apache里面的Rewrite规则是一件很蛋疼的事情,有时候只是想做一个伪静态而已,不想去研究那些复杂的规则,可官方给的规则又常常出错,出了问题我们就要调试一下,看看提交的参数被映射到了哪 ...

  7. Oracle11gR2--SEC_CASE_SENSITIVE_LOGON参数解析

    在Oracle的11g之前的版本中密码是不区分大小写的(使用双引号强制除外). 在Oracle的11g以及以后的版本中对此有所增强.从此密码有了大小写的区分. 这个大小写敏感特性是通过SEC_CASE ...

  8. Python 小练习一

    1.如果同一个ip地址60s之内访问超过200次,那么就把ip加入黑名单 需求分析: 1.60s读一次文件 2.分割,取第一个元素,ip地址 3.把所有ip加入到一个list里面,如果ip次数超过20 ...

  9. codeforces:Helga Hufflepuff's Cup

    题目大意:有一个包含n个顶点的无向无环连通图G,图中每个顶点都允许有一个值type,type的范围是1~m.有一个特殊值k,若一个顶点被赋值为k,则所有与之相邻的顶点只能被赋小于k的值.最多有x个顶点 ...

  10. ubuntu14.04 使用笔记

    这是第二次安装使用ubuntu了,虽然上一次因为不习惯和不会使用一两天就放弃了,这次坚持的时间稍微长一点,目前ubuntu的基本使用也熟悉了.但是由于ubuntu上的应用太少,常用软件,比如QQ,Ph ...