http://blog.csdn.net/kash_chen007/article/details/37690411

http://wangym.iteye.com/blog/731729

1.创建一个Java工程;

2.将JMeter的lib目录下的jar文件添加进此工程的Build Path;

3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;

  1. public Arguments getDefaultParameters();设置可用参数及的默认值;
  2. public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
  3. public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
  4. public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

4.Export为Runnable Jar File;

5.将此jar包放入JMETER_HOME\lib\ext目录;

6.以管理员身份打开JMeter;

7.创建线程组、Java Request、查看结果树,进行测试;

二、实例

1.在eclipse里面新建一个工程:JavaForJMeter

2.把{Jmeter_home}\lib目录下的所有jar添加进此工程的Build Path;

3.添加类Hello,代码如下:

  1. package com.test.webservice;
  2.  
  3. public class Hello {
  4. public String sayHello()
  5. {
  6. return "Hello";
  7. }
  8. public String sayHelloToPerson(String s)
  9. {
  10. if(s == null || s.equals(""))
  11. s = "nobody";
  12. return (new StringBuilder()).append("Hello ").append(s).toString();
  13. }
  14. public int sum(int a,int b)
  15. {
  16. return a+b;
  17. }
  18. }

4.添加类perftest,并继承AbstractJavaSamplerClient,并添加代码如下:

注意:System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。

  1. package com.test.webservice;
  2.  
  3. import org.apache.jmeter.config.Arguments;
  4. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  5. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  6. import org.apache.jmeter.samplers.SampleResult;
  7. import com.test.webservice.Hello;
  8.  
  9. public class perftest extends AbstractJavaSamplerClient {
  10. private String a;
  11. private String b;
  12. /** Holds the result data (shown as Response Data in the Tree display). */
  13. private String resultData;
  14.  
  15. // 这个方法是用来自定义java方法入参的。
  16. // params.addArgument("num1","");表示入参名字叫num1,默认值为空。
  17. //设置可用参数及的默认值;
  18. public Arguments getDefaultParameters() {
  19. Arguments params = new Arguments();
  20. params.addArgument("num1", "");
  21. params.addArgument("num2", "");
  22. return params;
  23. }
  24.  
  25. //每个线程测试前执行一次,做一些初始化工作;
  26. public void setupTest(JavaSamplerContext arg0) {
  27. }
  28.  
  29. //开始测试,从arg0参数可以获得参数值;
  30. public SampleResult runTest(JavaSamplerContext arg0) {
  31. a = arg0.getParameter("num1");
  32. b = arg0.getParameter("num2");
  33. SampleResult sr = new SampleResult();
         sr.setSampleLabel( "Java请求哦");
  34. try {
  35. sr.sampleStart();// jmeter 开始统计响应时间标记
  36. Hello test = new Hello();
  37. // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
  38. resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer
  39. .parseInt(b)));
  40. if (resultData != null && resultData.length() > 0) {
  41. sr.setResponseData("结果是:"+resultData, null);
  42. sr.setDataType(SampleResult.TEXT);
  43. }
  44. // System.out.println(resultData);
  45. sr.setSuccessful(true);
  46. } catch (Throwable e) {
  47. sr.setSuccessful(false);
  48. e.printStackTrace();
  49. } finally {
  50. sr.sampleEnd();// jmeter 结束统计响应时间标记
  51. }
  52. return sr;
  53. }
  54.  
  55. //测试结束时调用;
  56. public void teardownTest(JavaSamplerContext arg0) {
  57. // System.out.println(end);
  58. // System.out.println("The cost is"+(end-start)/1000);
  59. }
  60.  
  61. // main只是为了调试用,最后打jar包的时候注释掉。
  62. /*
  63. public static void main(String[] args)
  64. { // TODO Auto-generated method stub
  65. Arguments params = new Arguments();
  66. params.addArgument("num1", "1");//设置参数,并赋予默认值1
  67. params.addArgument("num2", "2");//设置参数,并赋予默认值2
  68. JavaSamplerContext arg0 = new JavaSamplerContext(params);
  69. perftestbbb test = new perftestbbb();
  70. test.setupTest(arg0);
  71. test.runTest(arg0);
  72. test.teardownTest(arg0);
  73. }
  74. */
  75. }

5.Export为Runnable Jar File:hello.jar

6.将此hello.jar(测试用例)包放入JMETER_HOME\lib\ext目录,其他依赖的jar包可以放到lib下。

7.打开JMeter,添加线程组,添加Java请求,查看结果树。

三、JMeter Java Sampler介绍

Arguments

getDefaultParameters() 用于获取界面的参数

SampleResult

runTest(JavaSamplerContext context) 类似于LR的Action,result.sampleStart()一个事务开始,result.sampleEnd()一个事务 结束

void

setupTest(JavaSamplerContext context) 初始化方法,类似于LR的init和Junit中的setUp()

void

teardownTest(JavaSamplerContext context) 类似于LR的end和Junit中的tearDown()

执行的先后顺序为:
getDefaultParameters() --> setupTest(JavaSamplerContext context) --> runTest(JavaSamplerContext context) --> teardownTest(JavaSamplerContext context)
 
常用的方法:
①、addArgument("name", "value")    定义参数
②、sampleStart()    定义事务的开始,类似于LR的lr_start_transaction,和LR一样事务间不要放无关代码
③、sampleEnd()    定义事务的结束,类似于LR的lr_end_transaction
④、setSuccessful(true、false)    设置运行结果的成功或失败,Jmeter统计成功失败的次数,在聚合报告中能够体现。
 
 
四、自带Java Request Sampler

JMeter默认实现了两个Java Request Sampler:SleepTest Sampler和JavaTest Sampler。

JavaTest Sampler不向服务器发送数据请求,一般被用作调试目的使用。

 
 

至此,这已讲解完了。

[转]jmeter 自定义测试脚本的更多相关文章

  1. JMeter性能测试基础 (4)-使用JMeter录制测试脚本

    在进行压力测试时,由于很多web页面包含了Ajax异步请求等内容,为模拟用户真实输入,除了对html的访问外,还需要将其它的访问考虑入内,这时最好的办法就是对实际访问过程中的所有请求进行录制. 例如, ...

  2. 用BlazeMeter录制JMeter测试脚本

    工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤: 以上工具准备好以后就可以录制JMeter的测试脚本了, 在Chrome中点击 ...

  3. 菜鸟教程之工具使用(十)——用BlazeMeter录制JMeter测试脚本

    工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤: 以上工具准备好以后就可以录制JMeter的测试脚本了, 在Chrome中点击 ...

  4. 用BlazeMeter录制JMeter(三十五)测试脚本(转载)

    转载自 http://www.cnblogs.com/yangxia-test 工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤 ...

  5. jmeter压力测试笔记- HTTP协议

    一.目标 使用jmeter进行HTTP接口压力测试: 命令行方式运行,方便在linux环境运行: 二.面临的问题 支持多环境测试(开发.测试.生产环境) 支持用户数据.线程数.循环次数等配置在运行时自 ...

  6. 【NO.11】Jmeter - 构建1个可供Linux使用的Jmeter测试脚本 - 共3个步骤

    在Linux使用Jmeter做性能测试需要4个前提条件,这4个前提条件已经在之前的文档里提到了,重复一下加深印象: (1) 在本地已安装xshell 参考<SecureCRT-转换密钥-Xshe ...

  7. JMeter http(s)测试脚本录制器的使用

    JMeter http(s)测试脚本录制器的使用 by:授客 QQ:1033553122 http(s) Test Script Recorder允许Jmeter在你使用普通浏览器浏览web应用时,拦 ...

  8. 【jmeter】jMeter使用Badboy录制Web测试脚本

    JMeter 是纯Java编写的软件功能和性.能测试工具,其录制脚本过于笨拙和复杂.而Badboy是用C++开发的动态应用测试工具,其拥有强大的屏幕录制和回放 功能,同时提供图形结果分析功能,刚好弥补 ...

  9. 使用JMeter代理录制app测试脚本

    准备条件:JMeter.手机app 上一篇介绍过录制Web测试脚本的方式有两种,使用代理和使用第三方工具.本篇录制app测试脚本只讨论使用代理的方式,其他方式以后有机会再补充.其实Web和app使用代 ...

随机推荐

  1. php阿里云oss文件上传

    php的文件上传 文件上传 php的文件上传放在了$_FILES数组里,单文件和多文件上传的区别在于$_FILES['userfile']['name']是否为数组, 不熟悉的可以读一下官方文档 单文 ...

  2. 为什么hash作为内存使用的经典数据结构?

    听到这样说法:hash是内存中使用的经典数据结构.内存是典型的随机访问设备. 为什么hash这种数据结构很适合内存使用呢?如何理解内存是随机访问设备呢? 因为我想知其所以然,如何理解背后的原因,我花费 ...

  3. InstallShield脚本事件

    脚本事件主要有三大类:Before Move Data(安装数据前).Move Data(安装数据过程中).After Move Data(安装数据后). OnBegin:在初始化后,被调用 OnFi ...

  4. python 文件 IO 操作

    Python 的底层操作 * 其实Python的文件IO操作方法,和Linux底层的差不多 打开 f = open(filename , "r") 后面的 "r" ...

  5. SD卡镜像烧写--树莓派为例

    SD烧写镜像都要先擦除SD卡内容,然后用image烧写工具烧写镜像. SD卡标准官网:www.sdcard.org,提供标准的擦除工具sdformatter. windows下镜像烧写工具可选用Win ...

  6. WCF安全:通过 扩展实现用户名密码认证

    在webSservice时代,可以通过SOAPHEADER的方式很容易将用户名.密码附加到SOAP header消息头上,用户客户端对调用客户端身份的验证.在WCF 时代,也可以通过Operation ...

  7. error TRK0002: Microsoft Visual Studio 10.0\VC\bin\link.exe Access is denied.

    When you compile project, visual studio 2010 prompts “…link.exe … Access is denied” This below is I ...

  8. 基于Cookie的购物车

    var Cookies = {}; Cookies.set = function (name, value) { var argv = arguments; var argc = arguments. ...

  9. 【C】——strtok()和strtok_r()

    下面的说明摘自于最新的Linux内核2.6.29,说明了strtok()这个函数已经不再使用,由速度更快的strsep()代替 /** linux/lib/string.c** Copyright ( ...

  10. 《C++程序设计教程——给予Visual Studio 2008》读书笔记3章

    CLR(Common Language Runtime,通用运行时),负责在执行时管理代码,提供内存管理和线程管理等核心服务,同时又确保代码的安全性和准确性.