问题:在某些场景下我们会发现Jmeter里面提供的各种Sample不能满足自己的需求,应为这个世界上的压力测试的逻辑本来就是千变万化的,所以这个时候我们如果自己实现一套测试逻辑(当Jmeter的基本elements和sample无法满足我们的需求时, 例如我们要测试一个udp服务, 而协议的内容是我们自定义的),这个时候需要使用jmeter 的扩展性。下面我们通过一个简单的例子来看看如何开发这样的一个自定义Sample? 自定Sample的生命周期是怎样的?

  1. package com.alibaba.stress.load;
  2. import org.apache.jmeter.config.Arguments;
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  5. import org.apache.jmeter.samplers.SampleResult;
  6. public class LifecycleJMeterSampleextends AbstractJavaSamplerClient {
  7. @Override
  8. public Arguments getDefaultParameters() {
  9. System.out.println("Get Parameter name! [getDefaultParameters]");
  10. return super.getDefaultParameters();
  11. }
  12. @Override
  13. public void setupTest(JavaSamplerContext context) {
  14. System.out.println("[setupTest]");
  15. super.setupTest(context);
  16. }
  17. @Override
  18. public void teardownTest(JavaSamplerContext context) {
  19. System.out.println("[teardownTest]");
  20. super.teardownTest(context);
  21. }
  22. @Override
  23. public SampleResult runTest(JavaSamplerContext ctx) {
  24. SampleResult result = new SampleResult();
  25. result.sampleStart();
  26. System.out.println("[runTest]");
  27. result.setSuccessful(true);
  28. result.sampleEnd();
  29. return result;
  30. }
  31. }
 
  1. package com.alibaba.stress.load;
  2. import org.apache.jmeter.config.Arguments;
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  5. import org.apache.jmeter.samplers.SampleResult;
  6. public class LifecycleJMeterSample extends AbstractJavaSamplerClient {
  7. @Override
  8. public Arguments getDefaultParameters() {
  9. System.out.println("Get Parameter name! [getDefaultParameters]");
  10. return super.getDefaultParameters();
  11. }
  12. @Override
  13. public void setupTest(JavaSamplerContext context) {
  14. System.out.println("[setupTest]");
  15. super.setupTest(context);
  16. }
  17. @Override
  18. public void teardownTest(JavaSamplerContext context) {
  19. System.out.println("[teardownTest]");
  20. super.teardownTest(context);
  21. }
  22. @Override
  23. public SampleResult runTest(JavaSamplerContext ctx) {
  24. SampleResult result = new SampleResult();
  25. result.sampleStart();
  26. System.out.println("[runTest]");
  27. result.setSuccessful(true);
  28. result.sampleEnd();
  29. return result;
  30. }
  31. }
 
其中AbstractJavaSamplerClient是从ApacheJmeter_Java.jar 中获得。编写的类文件打包xxx.jar, 把这个Jar放到Jmeter

的解压目录下的lib/ext下。重新启动jmeter.

一次先加入线程组,和聚合报告两个组件,在聚合报告组件之前加入一个新的Sample(Java Sample ), 如图:

运行测试。可以看到控制台的输出。调整几次线程组的线程数目的控制,我们会发现我们的这个自定义类中的teardowntest 和 setupuptest方法都是正对线程组中的某一个线程来执行的,线程组中线程的调用数目其实就是指runtest方法的运行次数。

9.Jmeter自定义Sample(自定义测试内容)完成测试的更多相关文章

  1. 在Jmeter中使用自定义编写的Java测试代码

    我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","Java ...

  2. .net中自定义过滤器对Response内容进行处理

    原文:http://www.cnblogs.com/zgqys1980/archive/2008/09/02/1281895.html 代码DEMO:http://files.cnblogs.com/ ...

  3. WPF界面设计技巧(5)—自定义列表项呈现内容

    原文:WPF界面设计技巧(5)-自定义列表项呈现内容 接续上次的程序,稍微改动一下原有样式,并添加一个数据模板,我们就可以达成下面这样的显示功能: 鼠标悬停于文件列表项上,会在工具提示中显示图像缩略图 ...

  4. 自定义View 可清除内容、设置图标、下划线的输入框 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. echarts自定义tooltip提示框内容

    1.echarts自定义tooltip提示框内容 https://blog.csdn.net/dreamsup/article/details/56667330 2.关于Echarts的formatt ...

  6. Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容

    后台管理 第1步.本地化:设置语言.时区 修改project1/settings.py #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' #设置语言 ...

  7. 【转】web测试内容及工具经典总结

    基于Web的系统测试在基于Web的系统开发中,如果缺乏严格的过程,我们在开发.发布.实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大.而且,随着基于Web的系统变得越来越复杂,一 ...

  8. (转)学习使用Jmeter做压力测试(一)--压力测试基本概念

    一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...

  9. 【转】学习使用Jmeter做压力测试(二)--压力测试的实施

    JMeter测试步骤: 1.建立测试计划 2.添加线程组 3.添加HTTP请求 4.增加监听器 5.执行测试计划 6.根据JMeter提供的报告分析结果 一.目标 测试访问目标服务器网站首页的每秒查询 ...

随机推荐

  1. day 107radis非关系型数据库

    http://www.cnblogs.com/wupeiqi/articles/5132791.html   参考邮件. radis : 1. NoSql 2. 缓存在内存中 3.支持数据持久化 二. ...

  2. js-xlsx sheet_to_json 读取小数位数变多

    read as string . 例如:2.85 读取后变成 2.84999999999999999 这种. 以字符串形式读取. XLSX.utils.sheet_to_json(workbook.S ...

  3. 好1.1.4 PTA提交列表及说明

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 概括本周的学习以及更加熟练本周的代码 参考文献 C语言程序设计 百度文献 (h ...

  4. smartforms 字段文本碰见 "-" 自动换行

    长文本会在 '-' 这个符号处自动换行 原理:SAP 标准SMARTFORMS 的功能,遇到 '-' 自动判断后面字段是否能在本行完全显示,不够则换行 注意:如果一行文本有多个 ‘-’ ,则 判断 ' ...

  5. 通过URL传参数,然后第二个页面需要获取参数

    /** * 方法说明:通过url参数键值名称获取参数的值 * @method getQueryString * @param name 要获取的参数键值 * @return * @remark */ ...

  6. 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?

    Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...

  7. k8s之ingress-nginx部署一直提示健康检查10254端口不通过问题就处理

    之前部署了一套k8s集群,但是到部署ingress-nginx的时候,一直提示10254端口拒绝不通:如下图. 这是因为我之前装的是docker1.17.默认的驱动是systemd.因为systemd ...

  8. Codeforces 1188D Make Equal DP

    题意:给你个序列,你可以给某个数加上2的幂次,问最少多少次可以让所有的数相等. 思路(官方题解):我们先给序列排序,假设bit(c)为c的二进制数中1的个数,假设所有的数最后都成为了x, 显然x &g ...

  9. 理解Java主函数中的"String[] args"

    public class Understand_String_args { public static void main(String[] args) { System.out.printf(&qu ...

  10. shell读取文件第一行和最后一行,小数的运算比较

    1. 读取文件的第一行:head -n +1 file.txt 读取文件的最后一行: tail -n -1 file.txt echo 12:30:55 | cut -d: -f 1 结果为12,意思 ...