zoukankan      html  css  js  c++  java
  • Jmeter取样器之Java Request

    背景

    测试实验室需要构造常口数据1-2亿,存在的问题:单线程插入耗时太长,效率低。Jmeter可以实现多线程处理,且可通过调用jar包实现java请求。

    操作步骤

    1Java项目工程中创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;

    public Arguments getDefaultParameters();设置可用参数及的默认值;
    public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
    public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
    public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

    实例文件见附件:

    JmeterJava.java

    import com.dragonsoft.testlab.action.MHzCzrkjbxxAction;
    import com.dragonsoft.testlab.action.MHzCzrkjbxxActionNew;
    import com.dragonsoft.testlab.action.MWbSwjlAction;
    import com.dragonsoft.testlab.common.CLKData;
    import com.dragonsoft.testlab.common.DBconn;
    import com.dragonsoft.testlab.common.IdCardGenerator;
    import com.dragonsoft.testlab.common.SameFamilyDataGenerator;
    import org.apache.jmeter.config.Arguments;
    import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    import org.apache.jmeter.samplers.SampleResult;
    
    import java.sql.Connection;
    
    /**
     * @Description
     * @Author Meiying_jiang
     * @Date 2018/6/20 10:27
     */
    public class JmeterJava extends AbstractJavaSamplerClient {
        private String record;
        private String ywkconn_ip;
        private String ywkconn_user;
        private String ywkconn_password;
        private String clkconn_ip;
        private String clkconn_user;
        private String clkconn_password;
        /** Holds the result data (shown as Response Data in the Tree display). */
        private Long resultData;
    
        // 这个方法是用来自定义java方法入参的。
        // params.addArgument("num1","");表示入参名字叫num1,默认值为空。
        //设置可用参数及的默认值;
        public Arguments getDefaultParameters() {
            Arguments params = new Arguments();
            params.addArgument("record", "1");
            params.addArgument("ywkconn_ip","192.168.0.13");
            params.addArgument("ywkconn_user","csbsys");
            params.addArgument("ywkconn_password","dragon");
            params.addArgument("clkconn_ip","192.168.0.13");
            params.addArgument("clkconn_user","csbsys");
            params.addArgument("clkconn_password","dragon");
            return params;
        }
    
        //每个线程测试前执行一次,做一些初始化工作;
        public void setupTest(JavaSamplerContext arg0) {
        }
    
        //开始测试,从arg0参数可以获得参数值;
        public SampleResult runTest(JavaSamplerContext arg0) {
            record = arg0.getParameter("record");
            ywkconn_ip = arg0.getParameter("ywkconn_ip");
            ywkconn_user = arg0.getParameter("ywkconn_user");
            ywkconn_password = arg0.getParameter("ywkconn_password");
            clkconn_ip = arg0.getParameter("clkconn_ip");
            clkconn_user = arg0.getParameter("clkconn_user");
            clkconn_password = arg0.getParameter("clkconn_password");
            SampleResult sr = new SampleResult();
            sr.setSampleLabel( "Java请求");
            try {
                sr.sampleStart();// jmeter 开始统计响应时间标记
    
    //            //代码块,常口
    //            long start = System.currentTimeMillis();
    //            Connection ywkconn = DBconn.dbconn(ywkconn_ip,ywkconn_user,ywkconn_password);
    //            Connection clkconn = DBconn.dbconn(clkconn_ip,clkconn_user,clkconn_password);
    //            long end = System.currentTimeMillis();
    //            System.out.println("连接数据库耗时:"+(end - start));
    //            long start1 = System.currentTimeMillis();
    //            //往数据库插入数据
    //            int count=Integer.valueOf(record);//插入的记录数
    //            //户政_常住人口基本信息
    ////            MHzCzrkjbxxAction.hzczrk(count,ywkconn,clkconn);
    //            MWbSwjlAction.wb(count,clkconn);
    //            long end1 = System.currentTimeMillis();
    //            System.out.println("插入用时:"+(end1 -start1));
    //            //关闭数据库,统一放外层关闭
    //            ywkconn.close();
    //            clkconn.close();
    
                //插入常口三代关系数据和户信息数据
                long start = System.currentTimeMillis();
                //定义循环次数
                int record = 5000;
                //连接数据库
                Connection ywkconn = DBconn.dbconn("192.168.0.13","csbsys","dragon");
                //身份证生成类实例化
                IdCardGenerator idcard = new IdCardGenerator();
                //策略库类实例化
                CLKData clkdb = new CLKData();
    
                //同户关系类实例化
                MHzCzrkjbxxActionNew hz = new MHzCzrkjbxxActionNew();
                //同户关系生成类实例化
                SameFamilyDataGenerator sameFamily = new SameFamilyDataGenerator();
                sameFamily.sameFamily(ywkconn,clkdb,idcard,hz,record);
    
                //关闭数据库,统一放外层关闭
                ywkconn.close();
                long end = System.currentTimeMillis();
                long time = end - start;
                System.out.println("插入 "+record +" 花费总时间:"+time);
    
    
                // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
                resultData = end-start;
                sr.setResponseData("结果是:"+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;
        }
    
        //测试结束时调用;
        @Override
        public void teardownTest(JavaSamplerContext arg0) {
        }
    
        // main只是为了调试用,最后打jar包的时候注释掉。
    //    public static void main(String[] args)
    //    { // TODO Auto-generated method stub
    //        Arguments params = new Arguments();
    //        params.addArgument("num1", "1");//设置参数,并赋予默认值1
    //        params.addArgument("num2", "2");//设置参数,并赋予默认值2
    //        JavaSamplerContext arg0 = new JavaSamplerContext(params);
    //        com.dragonsoft.testlab.JmeterJava test = new com.dragonsoft.testlab.JmeterJava();
    //        test.setupTest(arg0);
    //        test.runTest(arg0);
    //        test.teardownTest(arg0);
    //    }
    
    }
    

      

    2、将Java项目工程打成Jar包(确保打包内容包括类JmeterJava的内容);

    3、将此jar包放入JMETER_HOME\lib\ext目录;

    4、打开Jmeter,创建线程组、Java Request、查看结果树,进行测试,Java Request中选择相应的类名如下所示:

     

    附录:

    1Jmeter安装及使用,详见192.168.23.1共享文件,路径如下所示

     

    2IdeaJar注意点:需勾选build on make,每次打包直接执行菜单栏BuildRebulid Project即可完成打包。

  • 相关阅读:
    JavaScript模态对话框类
    事件模块的演变(1)
    html5中可通过document.head获取head元素
    How to search for just a specific file type in Visual Studio code?
    What do 'lazy' and 'greedy' mean in the context of regular expressions?
    正则非获取匹配 Lookahead and Lookbehind ZeroLength Assertions
    regex length 正则长度问题
    Inversion of Control vs Dependency Injection
    How to return View with QueryString in ASP.NET MVC 2?
    今天才发现Google Reader
  • 原文地址:https://www.cnblogs.com/seamy/p/15654345.html
Copyright © 2011-2022 走看看