jmeter之编写java请求-扩展Java Sampler

category_icon.jpg 分类:

 

JMeter实践(19) arrow_triangle%20_down.jpg

版权声明:本文为博主原创文章,未经博主允许不得转载。

新浪围脖>@o蜗牛快跑o   企鹅交流群>79642549

 

通常情况下,推荐使用jmeter之java请求编写一beashell调用java代码(上篇)(推荐)编写Java 请求

有以下优势

 

  • 脚本易维护
  • 易调试
  • 开发脚本周期短

 

不过网上扩展java请求文章比较多的还是,通过实现org.apache.jmeter.protocol.java.sampler.JavaSamplerClient接口

或是继承AbstractJavaSamplerClient虚类来实现java请求

大致步骤如下:

1. 建立java工程
2. 加载依赖包到java工程环境变量中,ApacheJMeter_core.jar和ApacheJMeter_java.jar编写时需要,调试需要加载jmeter全部依赖包(jmeter_home/lib下所有,实际上不是所有,包比较多,很难辨别)
3. 编写Java Sampler,继承AbstractJavaSamplerClient,并重写如下方法

[java] view plain copy

  1. public Arguments getDefaultParameters();可选,定义可用参数及默认值;  
  2. public void setupTest(JavaSamplerContext arg0):可选,测试前执行,做一些初始化工作;  
  3. public SampleResult runTest(JavaSamplerContext arg0);必选,实现自定义请求;  
  4. public void teardownTest(JavaSamplerContext arg0):可选,测试结束时调用;  

4. 打jar包,将包放到jmeter_home/lib/ext/下
5. 记得把所有额外的(自定义协议依赖的,非jmeter的)依赖包放到jmeter环境变量中
6. 重启jmeter,创建java Sampler选择刚定义好的测试类,如下图:

 

7. 调整好参数即可开始测试。

 

编写模板介绍

[java] view plain copy

  1. package com.sampler;  
  2. //编写jmeter.sampler插件需加载的包  
  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. //处理异常堆栈  
  8. import java.io.PrintWriter;  
  9. import java.io.StringWriter;  
  10.   
  11.   
  12. /** 
  13. * @author wo niu 
  14. * @func test ejb interface 
  15. *  继承虚类AbstractJavaSamplerClient 
  16. */  
  17. public class JavaSampler extends AbstractJavaSamplerClient {  
  18.   
  19. // main只是为调试用,最好先调试再打包  
  20. //运行前请把jmeter_home/lib下的所有jar包加载到IDE工具环境变量  
  21.   public static void main(String[] args)  
  22.   {  
  23.       Arguments args0 = new Arguments();  
  24.       args0.addArgument("parm_1","val_1");  
  25.       args0.addArgument("parm_2","val_2");  
  26.       args0.addArgument("parm_N","val_N");  
  27.       JavaSampler  test = new JavaSampler();  
  28.       JavaSamplerContext context = new JavaSamplerContext(args0);  
  29.       test.setupTest(context);  
  30.       test.runTest(context);  
  31.       test.teardownTest(context);  
  32.   }  
  33.   
  34. /** 
  35.  *  实现 runTest(JavaSamplerContext context)方法 
  36.  *  runTest()具体实施测试动作 
  37.  */  
  38. public SampleResult runTest(JavaSamplerContext context)  {  
  39.     /* 
  40.      *  SampleResult只能定义为局部变量,避免出现多线程安全问题 
  41.      *  网上一些帖子,定义为全域变量,这种做法是错误的 
  42.      */  
  43.     SampleResult results = new SampleResult();  
  44.     //默认请求成功  
  45.     results.setSuccessful(true);  
  46.     results.sampleStart(); //记录响应时间开始  
  47.     try{  
  48.         //动态变量从context中读取:  
  49.         // String key = context.getParameter("key");  
  50.         //TO-DO ejb接口调用  
  51.   
  52.         if(false){ //失败时处理  
  53.             results.setSuccessful(false);  
  54.             results.setResponseData("响应数据","utf8");  
  55.         }  
  56.     }catch(Throwable e){  
  57.         e.printStackTrace();  
  58.         results.setSuccessful(false);  
  59.         //处理异常堆栈为String,只有String才能回写响应数据  
  60.         results.setResponseData(toStringStackTrace(e),"utf8");  
  61.     }  
  62.     results.sampleEnd(); //记录响应时间结束  
  63.     return results;  
  64. }  
  65.   
  66. /** 
  67.  * 测试开始时调用,初始化 
  68.  */  
  69. public void setupTest(JavaSamplerContext context){  
  70. }  
  71. /** 
  72.  * 测试结束时调用 
  73.  */  
  74. public void teardownTest(JavaSamplerContext context){  
  75. }  
  76.   
  77. /** 
  78.  *  定义默认参数 
  79.  */  
  80. @Override  
  81. public Arguments getDefaultParameters() {  
  82.     Arguments args = new Arguments();  
  83.     /* 
  84.      * test data 
  85.      */  
  86.     args.addArgument("parm_1","val_1");  
  87.     args.addArgument("parm_2","val_2");  
  88.     args.addArgument("parm_N","val_N");  
  89.     return args;  
  90. }  
  91.   
  92. /** 
  93.  *  处理异常堆栈为String,只有String才能回写响应数据 
  94.  * @param e 
  95.  * @return 
  96.  */  
  97. private String toStringStackTrace(Throwable e){  
  98.     String exception = null;  
  99.     try {  
  100.         StringWriter sw = new StringWriter();  
  101.         PrintWriter pw = new PrintWriter(sw);  
  102.         e.printStackTrace(pw);  
  103.         exception = sw.toString();  
  104.         pw.close();  
  105.         sw.close();  
  106.     } catch (Exception e1) {  
  107.         e1.printStackTrace();  
  108.     }  
  109.     return exception;  
  110. }  
  111.   
  112. }  

转载于:https://my.oschina.net/tantexian/blog/684254

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值