通常情况下,推荐使用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,并重写如下方法

  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. 调整好参数即可开始测试。

编写模板介绍

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

jmeter之java请求的更多相关文章

  1. jmeter 的java请求代码在main方法里面执行

    1.新建一个java请求执行加法类 public class TestDemo { public int Tdemo(int a,int b){ int sum = 0; sum = a+b; ret ...

  2. Jmeter执行Java请求

    Jmeter执行Java请求(QQ交流群:577439379) 一.打开Eclipse,创建一个Java工程 二.拷贝jmeter所依赖的jar包 将jmeter中,\lib\ext目录下的Apach ...

  3. 使用Jmeter测试java请求

    1.性能测试过程中,有时候开发想对JAVA代码进行性能测试,Jmeter是支持对Java请求进行性能测试,但是需要自己开发.打包好要测试的代码,就能在Java请求中对该java方法进行性能测试2.本文 ...

  4. 转:JMeter进行Java 请求测试

    本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...

  5. 第二篇--Jmeter测试Java请求

    前提:需要准备eclipse作为开发工具,安装jdk,准备完毕,接下来开工喽! 1.新建Java工程BMIrisJNIJarTest,新建lib目录,将Jmeter安装目录下lib/ext包下的Apa ...

  6. Jmeter自定义Java请求,继承AbstractJavaSamplerClient

    首先,使用Eclipse新建一个项目,然后从Jmeter的lib/ext目录下中拷贝ApacheJMeter_java.jar和ApacheJMeter_core.jar两个文件,然后引入这两个JAR ...

  7. jmeter(二十二)jmeter测试Java请求

    目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...

  8. Jmeter自定义Java请求开发

    一.本次实验目的 IDEA新建maven项目,使用java开发自定义jmeter的请求. 本次开发使用的代码,会百度云分享给大家. 二.本次实验环境 Idea 2017.02 Jmeter 5.1.1 ...

  9. 利用jmeter发起java请求调用shell脚本

    1.创建maven项目 在pom文件中加入依赖:     2.在路径src/main/java下创建类,如类名shellclass                     3.      创建jmet ...

随机推荐

  1. JS快速上手-基础Javascript

    1.1背景 1.1.1 ECMAScript与javascript ECMAScript是javascript的官方命名.因为java已经是一个商标.如今,一些早前收到过授权的公司,如Moailla, ...

  2. luogu P1040 加分二叉树

    题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...

  3. RabbitMQ 核心概念

    目录 RabbitMQ 特点 AMQP 协议 RabbitMQ 消息传递机制 Message Exchange 1. 简介 2. 类型 3. 属性 RabbitMQ 特点 RabbitMQ 相较于其他 ...

  4. SqlServer 并发事务:死锁跟踪(三)6种跟踪死锁的方法总结 大神

    http://blog.csdn.net/kk185800961/article/details/42504857

  5. 邁向IT專家成功之路的三十則鐵律 鐵律十:IT人思維之道-跳脫框架

    莊子的哲學思想歸本於老子,他認為人要解脫束縛必須做到不從任何的角度與任何的時間來看待事物,而是必須與天地同體,然而也唯有如此才能看清宇宙間萬事萬理的真諦.無論是莊子還是老子,他們畢竟是中國古代的聖賢, ...

  6. 细说Redis持久化机制

    概述 Redis不仅能够作为缓存来使用,也能够作为内存数据库. Redis作为内存数据库使用时.必需要解决一个问题:数据的持久性.有些将Redis作为缓存使用的场景也需要将缓存的数据持久化到存储介质上 ...

  7. vue doubleclick 鼠标双击事件

    Vue-dblclick事件(此外事件还有mouseover,mouseout,click,mousdown...): v-on:dblclick="函数" v-on:click/ ...

  8. 自己封装的CMusic类 【转】

    http://www.cnblogs.com/zhangminaxiang/archive/2013/02/27/2936011.html 缘由: 在改正俄罗斯方块程序的功能的时候,想给这个程序增加一 ...

  9. SolidEdge 打开工程图提示图纸已过期怎么办

    如下图所示,打开工程图时提示图纸已过期   点击工具-图纸视图跟踪器,按提示打开过期的装配体文件   更新这个装配体文件   然后切换到刚才提示过期的工程图文件,点击更新视图,下次再打开的时候就不会提 ...

  10. scala使用FunSpec进行单元测试报错

    遇到比较奇怪的问题,mvn项目中的main函数可以正常运行,但是test阶段出错,报错信息如下: Exception in thread "main" java.lang.NoCl ...