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即可完成打包。

  • 相关阅读:
    javaWeb之eclipse创建Servlet模板快捷键设置
    DBUtils-对JDBC简单封装的开源工具类库
    JDBC连接池(三)DBCP连接池
    JDBC连接池-C3P0连接
    JavaWeb中jsp九大内置对象 和四大作用域
    JDBC连接池-自定义连接池
    JavaWeb中jdbcproperties配置文件
    python学习之字典(Dictionary)练习
    用$.getJSON() 和$.post()获取第三方数据做页面 ——惠品折页面(1)
    请求转发与请求重定向的区别
  • 原文地址:https://www.cnblogs.com/seamy/p/15654345.html
Copyright © 2011-2022 走看看