zoukankan      html  css  js  c++  java
  • 【转】jmeter 进行java request测试

    本周使用jmeter进行一个远程dubbo接口的性能测试,因为没有访问页面,本来开发可以写一个页面,进行http请求的调用,不过已经看到jmeter可以直接对java request进行测试,所以尝试了一下。
    记录一下过程,写个demo进行下说明

    1、测试脚本的编写
    其实这个就是使用jmeter 自己的测试框架,写一个测试用例,实现对被测对象的调用,然后打包即可。
    a、引入jmeter框架依赖
    使用eclipse的时候,在工程上右键-》properties-》java build path
    将jmeter/lib 下的包都进行引入。
    b、新建一个测试class JavaTest
    c、引入jmeter的框架
    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;
    d、编写用例
    //新建的class必须继承"AbstractJavaSamplerClient"
    public class JavaTest extends AbstractJavaSamplerClient {
    //定义开始和截止的时间,可以在控制台打印出来时间,看响应情况
        private static long start = 0;
        private static long end = 0;

        Param param;

        IService<DataModel, Param> service;
    //setup 开始
        public void setupTest(JavaSamplerContext arg0) {
            start = System.currentTimeMillis();
           
            try {
              
    //try中间是你进行调用的代码           
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }

        @SuppressWarnings("unchecked")
        @Override
    //jmeter的测试框架
        public SampleResult runTest(JavaSamplerContext arg0) {

            SampleResult results = new SampleResult();
           
            try {
              

                results.sampleStart();
              
    //对上面方法的调用,jmeter会对sampleStart和sampleEnd之间的行为进行计时,作为响应时间
              
                        
             
                results.sampleEnd();
                results.setSuccessful(true);
            } catch (Throwable e) {
               
                e.printStackTrace();
            }
          
            return results;

        }

        public void teardownTest(JavaSamplerContext arg0) {
            end = System.currentTimeMillis();
    //可以在调试的时候自己打印时间
            System.err.println("cost time:" + (end - start) / 1000);
        }


    //在eclipse中自行进行调试,新建一个main函数来完成运行
        public static void main(String[] args) {

            JavaSamplerContext arg0 = new JavaSamplerContext(new Arguments());
            PerformenceTest test = new JavaTest();
    //这三步可以很清晰的看出框架执行的方式       
            test.setupTest(arg0);
            test.runTest(arg0);
            test.teardownTest(arg0);

        }

    }



    2、jmeter脚本编写
    使用jmeter ui客户端,在线程组下添加一个java request,将之前编写的用例放到jmeter的 lib/ext 目录下面,这个时候就可以在类名称下拉菜单中,选择到自己写的用例了。

    3、本地和远程调试
    在本地调试的时候,将这个脚本依赖到的全部jar包都放到jmeter的 /lib 下面,只有自己实现的测试用例.jar 放到/lib/ext下面,这样jmeter的启动消耗会小一些;放到远程服务上进行压力的时候,和本地环境一样部署即可

    写了一个demo,更直观一些
    已给被测class为:
    public class HelloWorld {

        public static int sum = 0;
        public static void sum(int a, int b) {
            sum = a + b;
            // System.out.println(sum);
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            HelloWorld a = new HelloWorld();
            a.sum(1, 2);
        }
    }

    测试上面这个class的性能,只需要实现一个用例,一直调用他,然后进行结果统计。测试case的实现:
    package TestCase;
    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 jmeter 的相关外部依赖
    import TestCase.HelloWorld;
    //import 被测对象

    public class PerformenceTest extends AbstractJavaSamplerClient {

        private static long start = 0;
        private static long end = 0;

        public void setupTest(JavaSamplerContext arg0) {
            start = System.currentTimeMillis();//获取当前系统时间
            // System.out.println(start);
        }

        public SampleResult runTest(JavaSamplerContext arg0) {
            SampleResult sr = new SampleResult();
            sr.sampleStart();// jmeter 开始统计响应时间标记
            try {

                HelloWorld test = new HelloWorld();
                test.sum(1, 1);
    //被测对象调用
            } catch (Throwable e) {
                sr.setSuccessful(false);
            } finally {
                sr.sampleEnd();//jmeter 结束统计响应时间标记
            }
            return sr;
        }

        public void teardownTest(JavaSamplerContext arg0) {
            end = System.currentTimeMillis();
            // System.out.println(end);
            // System.out.println("The cost is"+(end-start)/1000);
        }

    //测试本地调试
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            JavaSamplerContext arg0 = new JavaSamplerContext(new Arguments());
            PerformenceTest test = new PerformenceTest();
            test.setupTest(arg0);
            test.runTest(arg0);
            test.teardownTest(arg0);
        }

    }

    有了上面的case,打包将jar放到jmeter/lib/ext中,可以在新建的jmeter脚本中获取测试方法,然后配置并发和启动延时,就可以了

  • 相关阅读:
    python基础教程学习笔记十五
    使用win32imageinstall安装ubuntu
    python基础教程学习笔记十四
    python基础教程学习笔记十二
    ztpto图片轮播
    jQuery 获取屏幕高度、宽度
    h5新属性,可编辑的段落 contenteditable=“true”
    奋斗的奴隶博客中的牛逼js小测试
    ps4将图片弄成透明图片
    图片轮播,纯js+css
  • 原文地址:https://www.cnblogs.com/yanghj010/p/4950829.html
Copyright © 2011-2022 走看看