zoukankan      html  css  js  c++  java
  • jmeter之java请求

    通常情况下,推荐使用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. }  
  • 相关阅读:
    jQuery学习笔记(一):入门
    jQuery学习笔记(二):this相关问题及选择器
    数据库基础
    有关程序员转行的想法
    在团队中如何带领新手——阅读有感
    C#中的集合类——ArrayList
    .NET基础——ASSCII码表
    C#中的文件操作2
    C#中的文件操作1
    C#中的StringBuilder
  • 原文地址:https://www.cnblogs.com/danqiu/p/6122754.html
Copyright © 2011-2022 走看看