51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1665|回复: 3
打印 上一主题 下一主题

【转载】jmeter之编写java请求-扩展Java Sampler

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2016-1-5 16:00:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    通常情况下,推荐使用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 plaincopy


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

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


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


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


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-3-19 21:43
  • 签到天数: 59 天

    连续签到: 1 天

    [LV.5]测试团长

    2#
    发表于 2016-1-5 20:49:51 | 只看该作者
    转载 记得标注下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    3#
     楼主| 发表于 2016-1-6 09:21:47 | 只看该作者

    好的。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2016-1-6 23:43:38 来自手机 | 只看该作者
    管理员大大,不是一点坑啊,可以加一下转载来源不呢
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 02:58 , Processed in 0.074751 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表