zoukankan      html  css  js  c++  java
  • jmeter 二次开发

    基于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、编写测试类

    待测试的类

    public class SercertGenerate {
     
     
      public   String generate(String[] args) {
        String key = args[0];
        String secret = args[1];
        String method = args[2];
        String path = args[3];
        String gmtDate = getGMTDate();
     
          System.out.println(gmtDate);
        String signStr = "date: " + gmtDate + "
    " + method + " " + path + " HTTP/1.1";
      
        return signStr;  
      }
     
      public  String  getGMTDate() {
        DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
        return dateFormat.format(Calendar.getInstance().getTime());
      }
     
     
     
     
     
     
    //  public static void main(String[] args) {
    //
    //   String[] strarray = {"7930665351","31d5b2fa00c64b25b6db60434e51ecd3","GET","/test?test=1"};
    //   System.out.println(generate(strarray));
    //
    //
    //
    //  }
    }

    测试类

    import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    import org.apache.jmeter.samplers.SampleResult;
    import org.apache.jmeter.config.Arguments;
     
    public class SercertGenerateTest extends AbstractJavaSamplerClient {
     
        private String key;
        private String secret;
        private String method;
        private String path;
        private String gmtDate;
     
        private String resultData;
     
     
        /*
         * 通过getDefaultParameters()可以来定义入参
         *
         * */
        public Arguments getDefaultParameters() {
            //定义属性对象,用来添加GUI参数
            Arguments params = new Arguments();
            params.addArgument("key", "");
            params.addArgument("secret", "");
            params.addArgument("method", "");
            params.addArgument("path", "");
            return params;
        }
     
        //每个线程测试前执行一次,做一些初始化工作;
        public void setupTest(JavaSamplerContext arg0) {
        }
     
        //开始测试,从arg0参数可以获得参数值;
        public SampleResult runTest(JavaSamplerContext arg0) {
            key = arg0.getParameter("key");
            secret = arg0.getParameter("secret");
            method = arg0.getParameter("method");
            path = arg0.getParameter("path");
            SampleResult sr = new SampleResult();
            sr.setSampleLabel("Java request");
            try {
                sr.sampleStart();// jmeter 开始统计响应时间标记
                SercertGenerate sercertGenerate = new SercertGenerate();
                // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
                gmtDate = sercertGenerate.getGMTDate();
     
                String[] strarray = {key,secret,method,path};
                resultData = sercertGenerate.generate(strarray);
     
                if (resultData != null && gmtDate != null) {
                    sr.setResponseData("日期结果是:" + gmtDate + "加密结果是:" + resultData, null);
                    sr.setDataType(SampleResult.TEXT);
     
                }
                 System.out.println(resultData);
     
                sr.setSuccessful(true);
            } catch (Throwable e) {
                sr.setSuccessful(false);
                e.printStackTrace();
            } finally {
                sr.sampleEnd();// jmeter 结束统计响应时间标记
            }
            return sr;
        }
     
        //测试结束时调用;
        public void teardownTest(JavaSamplerContext arg0) {
            // System.out.println(end);
            // System.out.println("The cost is"+(end-start)/1000);
        }
     
        public static void main(String[] args)
        { // 测试测试类是否有问题,打包的时候需要注释掉
            Arguments params = new Arguments();
            params.addArgument("key", "7930665351");
            params.addArgument("secret", "31d5b2fa00c64b25b6db60434e51ecd3");
            params.addArgument("method", "GET");
            params.addArgument("path", "/test?test=1");
            JavaSamplerContext arg0 = new JavaSamplerContext(params);
            SercertGenerateTest test = new SercertGenerateTest();
            test.setupTest(arg0);
            test.runTest(arg0);
            test.teardownTest(arg0);
        }
     
     
    }


    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

  • 相关阅读:
    贮油点问题(C++)
    二维数组操作
    二的幂次方(递归)
    [haoi2009]巧克力
    距离最远的牛
    ssh注解basedao简单的实现
    @service中构造方法报错
    spring注解 构造函数问题
    json与gson
    AsyncTask异步类的简单操作
  • 原文地址:https://www.cnblogs.com/111testing/p/10426367.html
Copyright © 2011-2022 走看看