并发测试

  • JunitPerfer 这个测试工具不支持 @before @after 配置 也有点繁琐 弃用,参考测试步骤: http://www.blogjava.net/emu/articles/4358.html

  • ContiPerf  这个测试工具 支持注解,配置简单 还有生成测试结果页面 看起来直观,就用这个工具来测试我的项目吧,参考测试步骤:http://testing.etao.com/node/626

    下面是我自己的步骤:

  1. 引入jar包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.databene</groupId>
        <artifactId>contiperf</artifactId>
        <version>2.2.0</version>
        <scope>test</scope>
    </dependency>

    maven构建的项目最方便了,希望你的项目也是maven构建的,如果不是或者想用最新的版本:http://sourceforge.net/projects/contiperf/files/

  2. 建Test_suite类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import org.databene.*;
    import org.junit.*;
    @RunWith(ContiPerfSuiteRunner.class)
    @Suite.SuiteClasses({UtilTest.class})
    @PerfTest(invocations =5, threads = 1, rampUp = 1000)   
    public class PerformanceTest{
        @Rule
        public ContiPerfRule i = new ContiPerfRule();
    //  Invocations:方法的执行次数,例:@PerfTest(invocations = 300)重复执行300次;
    //  Threads:同时执行的线程数,例:@PerfTest(invocations = 30, threads = 2)两个线程并发执行,每个线程执行15次,总共执行30次;
    //  Duration:在指定时间范围内一直执行测试,例:@PerfTest(duration = 300)在300毫秒内反复执行。
    //  三个属性可以组合使用,其中Threads必须和其他两个属性组合才能生效。当Invocations和Duration都有指定时,以执行次数多的为准。
    //  例,@PerfTest(invocations = 300, threads = 2, duration = 100),如果执行方法300次的时候执行时间还没到100ms,
    //  则继续执行到满足执行时间等于100ms,如果执行到50次的时候已经100ms了,则会继续执行之100次。
          
    //  如果你不想让测试连续不间断的跑完,可以通过注释设置等待时间,
    //  例,@PerfTest(invocations = 1000, threads = 10, timer = RandomTimer.class, timerParams = { 30, 80 }) ,每执行完一次会等待30~80ms然后才会执行下一次调用。
          
    //  在开多线程进行并发压测的时候,如果一下子达到最大进程数有些系统可能会受不了,ContiPerf还提供了“预热”功能,
    //  例,@PerfTest(threads = 10, duration = 60000, rampUp = 1000) ,启动时会先起一个线程,然后每个1000ms起一线程,到9000ms时10个线程同时执行,那么这个测试实际执行了69s,
    //  如果只想衡量全力压测的结果,那么可以在注释中加入warmUp,即@PerfTest(threads = 10, duration = 60000, rampUp = 1000, warmUp = 9000) ,
    //  那么统计结果的时候会去掉预热的9s。
    }

    注释都在里面了 我就不多说啦,其中 @Suite.Suiteclasses({utilTest.class}) 就是你原有的junit测试类,基本不需要做任何改动,当然如果你定义了成员变量,建议你最好放线程里,因为我们做的是并发嘛

    至于具体方式请参考http://www.blogjava.net/emu/articles/4358.html





posted @ 2013-08-14 16:52  九州浪子  阅读(924)  评论(0编辑  收藏  举报