基于jmeter的java请求的二次开发

常用的方法:

①、addArgument("name", "value")    定义参数

②、sampleStart()    定义事务的开始,类似于LR的lr_start_transaction,和LR一样事务间不要放无关代码

③、sampleEnd()    定义事务的结束,类似于LR的lr_end_transaction

④、setSuccessful(true、false)    设置运行结果的成功或失败,Jmeter统计成功失败的次数,在聚合报告中能够体现。

二、实例介绍:

1、操作步骤:

◆ 用idea新建一个普通的java项目

◆ 引入jmeter的lib目录下的所有的jar包

◆ 编写测试类

◆ 测试类测试通过后,把项目导出为jar包放到 jmeter lib/ext目录下

◆ 启动jmeter,新建java请求,选择你编写的测试类,编写jmeter的测试用例

2、idea新建项目: file->new project->选择sdk->java ee

3、引入jmeterlib下的jar包:File –> Project Structure–> Modules->Dependencies -> + 选择Library 选择对应的jmeter目录下的lib

4、编写测试类

待测试的类

  1. public class SercertGenerate {
  2.  
  3. public String generate(String[] args) {
  4. String key = args[0];
  5. String secret = args[1];
  6. String method = args[2];
  7. String path = args[3];
  8. String gmtDate = getGMTDate();
  9.  
  10. System.out.println(gmtDate);
  11. String signStr = "date: " + gmtDate + "\n" + method + " " + path + " HTTP/1.1";
  12.  
  13. return signStr;
  14. }
  15.  
  16. public String getGMTDate() {
  17. DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
  18. dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
  19. return dateFormat.format(Calendar.getInstance().getTime());
  20. }
  21.  
  22. // public static void main(String[] args) {
  23. //
  24. // String[] strarray = {"7930665351","31d5b2fa00c64b25b6db60434e51ecd3","GET","/test?test=1"};
  25. // System.out.println(generate(strarray));
  26. //
  27. //
  28. //
  29. // }
  30. }

测试类

  1. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  2. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  3. import org.apache.jmeter.samplers.SampleResult;
  4. import org.apache.jmeter.config.Arguments;
  5.  
  6. public class SercertGenerateTest extends AbstractJavaSamplerClient {
  7.  
  8. private String key;
  9. private String secret;
  10. private String method;
  11. private String path;
  12. private String gmtDate;
  13.  
  14. private String resultData;
  15.  
  16. /*
  17. * 通过getDefaultParameters()可以来定义入参
  18. *
  19. * */
  20. public Arguments getDefaultParameters() {
  21. //定义属性对象,用来添加GUI参数
  22. Arguments params = new Arguments();
  23. params.addArgument("key", "");
  24. params.addArgument("secret", "");
  25. params.addArgument("method", "");
  26. params.addArgument("path", "");
  27. return params;
  28. }
  29.  
  30. //每个线程测试前执行一次,做一些初始化工作;
  31. public void setupTest(JavaSamplerContext arg0) {
  32. }
  33.  
  34. //开始测试,从arg0参数可以获得参数值;
  35. public SampleResult runTest(JavaSamplerContext arg0) {
  36. key = arg0.getParameter("key");
  37. secret = arg0.getParameter("secret");
  38. method = arg0.getParameter("method");
  39. path = arg0.getParameter("path");
  40. SampleResult sr = new SampleResult();
  41. sr.setSampleLabel("Java request");
  42. try {
  43. sr.sampleStart();// jmeter 开始统计响应时间标记
  44. SercertGenerate sercertGenerate = new SercertGenerate();
  45. // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
  46. gmtDate = sercertGenerate.getGMTDate();
  47.  
  48. String[] strarray = {key,secret,method,path};
  49. resultData = sercertGenerate.generate(strarray);
  50.  
  51. if (resultData != null && gmtDate != null) {
  52. sr.setResponseData("日期结果是:" + gmtDate + "加密结果是:" + resultData, null);
  53. sr.setDataType(SampleResult.TEXT);
  54.  
  55. }
  56. System.out.println(resultData);
  57.  
  58. sr.setSuccessful(true);
  59. } catch (Throwable e) {
  60. sr.setSuccessful(false);
  61. e.printStackTrace();
  62. } finally {
  63. sr.sampleEnd();// jmeter 结束统计响应时间标记
  64. }
  65. return sr;
  66. }
  67.  
  68. //测试结束时调用;
  69. public void teardownTest(JavaSamplerContext arg0) {
  70. // System.out.println(end);
  71. // System.out.println("The cost is"+(end-start)/1000);
  72. }
  73.  
  74. public static void main(String[] args)
  75. { // 测试测试类是否有问题,打包的时候需要注释掉
  76. Arguments params = new Arguments();
  77. params.addArgument("key", "7930665351");
  78. params.addArgument("secret", "31d5b2fa00c64b25b6db60434e51ecd3");
  79. params.addArgument("method", "GET");
  80. params.addArgument("path", "/test?test=1");
  81. JavaSamplerContext arg0 = new JavaSamplerContext(params);
  82. SercertGenerateTest test = new SercertGenerateTest();
  83. test.setupTest(arg0);
  84. test.runTest(arg0);
  85. test.teardownTest(arg0);
  86. }
  87.  
  88. }

5、idea导出jar包:File > Project Structure > Artifacts + > JAR > Empty 选择你的项目源文件的模块(注意:这里不是选择的web这个模块)  Build > Build Artifacts... > sampleName > Build/Rebuild

6、jar包放到jmeter的lib/ext目录后,启动jmeter,新建java请求

原文:https://blog.csdn.net/haiweizhourong/article/details/82153991

jmeter 二次开发的更多相关文章

  1. JMeter二次开发(2)-编写 JSON Assertion 插件

    本篇文章主要介绍如何对JMeter进行二次开发,添加自己所需的功能.这里以Json验证为例进行说明.在web接口测试过程中,JSON的应用已经非常普遍,但原声的JMeter并没有提供Json及Json ...

  2. Jmeter二次开发——自定义函数

    在之前的博文中,Jmeter二次开发--基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发.聊到Jmeter的函数,知道Jme ...

  3. JMeter二次开发(1)-eclipse环境配置及源码编译

    1.下载src并解压 http://jmeter.apache.org/download_jmeter.cgi   2.获取所需jar包,编译 ant download_jars ant instal ...

  4. 性能测试基础---jmeter二次开发

    ·Jmeter的二次开发,常见的有以下几种类型: ·扩展.修改Jmeter已有的组件(源代码) ·扩展.修改Jmeter已有的函数. ·完全自主开发一个新的组件(依赖于Jmeter提供的框架). ·扩 ...

  5. Jmeter二次开发——基于Java请求

    简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...

  6. JMeter二次开发环境配置

    本文主要介绍如何在Eclipse中配置JMeter开发环境. 一.下载JMeter源码 1.在JMeter官网下载二进制包和源码包: 解压备用: 二进制解压后文件夹名称为“jmeter_release ...

  7. Jmeter二次开发

    Jmater函数扩展的步骤1. 导入Jmeter源码,或使用maven项目,引入依赖的jar包 2. 继承AbstractFunction,实现自定义Function 3. 继承JMeterTestC ...

  8. jmeter二次开发----Loadrunner或Jmeter发送邮件报告

    Loadrunner支持Java Vuser,而Jmeter本身就是基于Java开发的,所以两者都可以通过JMail组件实现邮件发送.本人使用的是mail-1.4.7.jar,可以通过下载获得:htt ...

  9. Jmeter二次开发之代码环境搭建(QQ交流群:577439379)

    一.创建项目 1. 分别下载apache3.1 binaries和source两个压缩包,前者为release版本,后者为jmeter最新的源码,下载地址:http://jmeter.apache.o ...

随机推荐

  1. C#中字符串转换为计算公式(自定义公式的计算)

    第一种解决方案 第一种也是功能最强大的一种,可以使用Eval函数,像在Java中一样强大,几乎所有的运算符都可以实现,包括四则运算,与或非等. 添加COM引用: private void button ...

  2. sql语句 isnull(列名,'')='' /STUFF的意思

    (1) SELECT  SYXH,ZYHM,YEXH,ISNULL(YETZ,'') AS YETZ ,RYKSMC,RYBQMC,HZXM FROM YG_BRSYK 如果列名数据等于NULL,那么 ...

  3. python中的风险

    from math import e print(e) e = "中华人民共和国1" print(e) 输出: 2.718281828459045 中华人民共和国1 用from方式 ...

  4. 一个生产可用的mysql参数文件my.cnf

    [client]#客户端选项设置#设置客户端和连接字符集default_character_set = utf8port = 3306socket = /opt/mysql-5.6.24/tmp/my ...

  5. iOS知识点持续更新。。。

    1.自动布局拉伸和压缩优先级 Autolayout中每个约束都有一个优先级,优先级的范围是1~1000.创建一个约束,默认的优先级最高是1000. Content Hugging Priority:该 ...

  6. kubenets installation--ranchor-mesos

    [kube-proxy]http://www.cnblogs.com/xuxinkun/p/5799986.html [flannel] 安装Flannel [root@master ~]# cd ~ ...

  7. 把MP3保存到数据库中

    使用JdbcUtils得到连接con java.sql包下的Interface Blob----其实现类SerialBlob Blob是一个可以存储二进制文件的容器. BLOB常常是数据库中用来存储二 ...

  8. DbGridEh 一个单元格的值改变时另一单元格的值随之改变

    你可以为每个字段设置OnSetText事件,这样在输入完后回车会移动时就会触发,或者在adoquery的beforepost中或afterpost中都可以grid也提供了一些事件,也可以在某些条件下做 ...

  9. canvas将图片转成base64格式 以及 验证图片是否透明

    logoImgUpload:function(file) { let self = this; self.formatUpload(file); let reader = new FileReader ...

  10. CSS中position属性介绍(新增sticky)

    position的含义是指定类型,取值类型可以有:static.relative.absolute.fixed.inherit 和 sticky,这里sticky是CSS3新发布的一个属性. 1.po ...