问题:在某些场景下我们会发现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. drf基础

    1.什么是编程? 数据结构和算法的结合 2.什么是REST? 同一个功能会产生五花八门的url(把查看单条记录和查看多条记录都看成是一个功能),而且响应回去的数据也没有同一的格式规范,这就造成了前后端 ...

  2. 关系型数据库MySQL(二)_索引

    优点 大大加快数据的查询速度 创建唯一性索引,保证数据库表中每一行数据的唯一性 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间 缺点 索引需要占物理空间 当对表中的数据进行增删 ...

  3. Html5 学习笔记 【PC固定布局】 实战5 咨询页面 侧栏

    最终效果图: 提出公共页脚和导航部分: 新建infomatino.html (旅游咨询)页面 <!DOCTYPE html> <html lang="zh-cn" ...

  4. js实现的页面加载完毕之前loading提示效果

    页面加载readyState的五种状态 原文如下: 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loadin ...

  5. VS2017/VS2019 git Authentication failed for "XXXXXXXXXx"

    解决办法: 控制面板,凭证管理==>删掉 对应代码仓库地址的凭证.删掉,是删掉.因为我更新了还是没有用.

  6. 【设计模式】FactoryPattern工厂模式

    Factory Pattern 简单工厂模式 将变化的部分封装起来 //简单工厂 class SimpleProductFactory{ Product createProduct(String ty ...

  7. git 资料

    git学习资料整理(知乎搜集的) https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 ...

  8. APACHE两种域名跳转法简单完成重定向

    当我们变更网站域名,或者申请多个域名指向一个网站的时候,这个时候我们就会用到域名跳转(或者叫域名重定向redirect.域名转向).下面用最简单的文字讲两种apache的域名跳转方法. 假设我们想把w ...

  9. SpringBoot集成Swagger,Postman,newman,jenkins自动化测试.

    环境:Spring Boot,Swagger,gradle,Postman,newman,jenkins SpringBoot环境搭建. Swagger简介 Swagger 是一款RESTFUL接口的 ...

  10. 目录---Asp.NETCore轻松学系列【目录】

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...