使用jmeter测试java程序包性能--20130111总结liwf

2013-01-11  李万峰 

    最近在用jmeter进行性能一些测试工作,也是刚开始学习使用,为防止忘记,在自我总结的基础上,把使用要点和步骤写下。也能方便分享给一些志同道合的朋友。谨谢~

 

场景:测试java程序模块的性能(就是那种用JAVA语言编写且可以独立打包成JAR包的功能模块的性能测试,一般的测试工具是无法提供对这样的对象的性能测试的支持的,当然通过JMETER来测试,也是需要进行一定的辅助开发才行。);

1、右击测试计划-> 添加 -> Threads(Users) -> 线程组

2、设置线程属性,用于并发请求。

      介绍:

      线程数: 10

      Ramp-Up Period(in seconds) : 2

      循环次数: 3

  含义:2秒种(内)启动10个线程,每个线程循环调用3java请求 。(所以总体来说就是要执行30次请求。)    

3、线程组右击 -> 添加 -> Sampler -> Java请求

  以上是设置JMETER性能测试场景,而在这之前需要建立辅助测试类:

 

  建立测试辅助类也有几个要点需要注意;

A.JAVA工程中引入需要使用到的JMETER所属的核心的类包文件,ApacheJMeter_java.jar ApacheJMeter_core.jar ,这2jar包在 %JMETER_HOME%/lib/ext/下,即在JMETER的资源目录的/lib/ext/可以找到;(原因:因为你将要写的辅助测试类将会使用到里面的一些方法,诸如SampleResult AbstractJavaSamplerClientJavaSamplerContext等);

B.将写好并编辑测试无误的测试辅助类的工程打包成JAR包,然后再放回JMETER的资源目录的/lib/ext/下;(原因:这样,重新启动JMETER后,JMETER工具将会自动识别你刚加入的JAVA请求测试对象。在其“JAVA请求”—>”类名称下拉选择框中就会出现你编写的测试辅助类,如果没有出现,请仔细检查以上的操作步骤;要不就无法接下来的测试工作。)

 

以下贴出我写的测试辅助类:(并不是所有的都适用,但可以作为概要,提示参考)

package com.test.jmeter;

 

import java.util.Random;

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;

 

public class jmeterForCommunication extends AbstractJavaSamplerClient{

 

   

    private static long start = 0;

    private static long end = 0;

   

    /**

     * 重写构造函数

     */

    @Override 

    public void setupTest(JavaSamplerContext context) { 

        // TODO Auto-generated method stub 

        super.setupTest(context); 

        start = System.currentTimeMillis();

    } 

 

    /**

     * 重写析构函数

     */

    @Override 

    public void teardownTest(JavaSamplerContext context) { 

        // TODO Auto-generated method stub 

        super.teardownTest(context); 

        end = System.currentTimeMillis();

        // 总体耗时

        System.err.println("cost time:" + (end - start) / 1000 + "秒。");

    } 

   

    /**

     * 用户后续调用计算产生随机数

     */

    public static double computer(double a,double b){ 

        return a * b / a * a; 

    } 

   

    /**

     * JMeter界面中可手工输入参数,代码里面通过此方法获取

     */

    public Arguments getDefaultParameters() {

 

            Arguments args = new Arguments();

 

            return args;

    }

 

    /**

     * 重写JMETERrunTest启动方法,测试用例的入口,相当于JAVA程序的main方法;

     */

    @Override 

    public SampleResult runTest(JavaSamplerContext arg0) { 

        // TODO Auto-generated method stub 

        SampleResult sr = new SampleResult(); 

        sr.sampleStart(); 

         

        Random random = new Random(); 

        for(int i=0; i<10000; i++){ 

            computer(random.nextDouble(),random.nextDouble());   

        } 

      

        sr.setSuccessful(true); 

        sr.sampleEnd(); 

        return sr; 

    } 

    /**

    public static void main(String []args){

       

    }

    */

 PS:另外通过测试类调用要测试的JAR包的功能的代码,我这里就不贴出来了,一是因为每个人的会不一样,二是也涉及到公司的信息也不能外传;

 

 

4、线程组右击 -> 添加 -> 监听器 -> 用表格察看结果:(有很多种监听器,但也不是所有的都要打开使用到,一般打开23个足以,因为开多了也会一定程度上影响JMETER的测试收集数据的准确性。)

 

备注提示:

  有一些快捷键操作可以方便快速使用,比如:

     Ctrl + R,开始运行,

     Ctrl + E,清除历史结果

 PS:期间也参考了一些其他很多资料,再次对参考的N人贴表示感谢~!祝合家幸福安康~!


1306°/12995 人阅读/7 条评论 发表评论

熊志男  2013-01-11

学习


李万峰  2013-01-11

熊志男: 学习
熊哥谦虚了~应该是我向你学习才对~最多是相互学习~呵呵~


付民  2013-01-15

学习学习..呵呵



李万峰  2013-01-16

付民: 学习学习..呵呵
付兄~你太谦虚了~~~
相互学习相互学习~!呵呵~~~


李万峰  2013-01-16

地址收藏了~~~谢谢COLIN~!


付民  2013-01-16

李万峰: 付兄~你太谦虚了~~~
相互学习相互学习~!呵呵~~~


登录 后发表评论