• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 輕量級性能測試工具—ContiPerf

    發表于:2012-11-27來源:一淘測試作者:冷徹點擊數: 標簽:
    ContiPerf是一個輕量級的測試工具,它能很輕易的讓用戶使用Junit4的測試用例進行聯系的性能測試。其設計的靈感來自于Junit4利用注釋進行簡單的測試配置還來自于JUnitPerf用包裝單元測試用于性能測試的思路。

      ContiPerf是一個輕量級的測試工具,它能很輕易的讓用戶使用Junit4的測試用例進行聯系的性能測試。其設計的靈感來自于Junit4利用注釋進行簡單的測試配置還來自于JUnitPerf用包裝單元測試用于性能測試的思路。

    ContiPerf目前最新的版本是2.1,它的依賴少,只需要Java5和Junit4.7以上。而且可以很輕松的通過maven導入,只需在pom文件中加入以下內容:
    alt

      以下是一個簡單的例子:

    alt

      首先,我們從上面的例子可以看到要使用ContiPerf必須現在@Rule的注釋下生成一個ContiPerfRule的對象。ContiPerfRule的構造函數有三個,分別為:

      public ContiPerfRule()、public ContiPerfRule(ExecutionLogger executionLogger)和public ContiPerfRule(ReportModule... modules)。

      @PerfTest

      用戶可以在這個注釋中添加性能測試的執行要求。

      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。

      當執行的測試類中包括了多個測試方法的時候,如下圖

    alt

      則執行是順序的,先執行test1,再執行test2。結果如圖:

    alt

      如果想讓一個測試類中的方法也是并發執行,那么只要在類的前面加一個注釋@RunWith(ParallelRunner.class)。

    alt

      @Required

      通過這個注釋可以添加一些對性能期望,如果達到期望值則測試通過,如果沒有達到期望值則執行失敗。

      @Required(throughput = 20) :每秒鐘至少執行20次

      @Required(average = 50):測試全部完成平均執行時間為20ms

      @Required(median = 45):至少50%次執行的時間在45ms內

      @Required(max = 2000) :所有執行的執行時間沒有超過2s

      @Required(totalTime = 5000) :測試完成執行時間少于5s

      @Required(percentile90 = 3000) :所有執行中90%的執行時間少于3s

      @Required(percentile95 = 5000):所有執行中95%的執行時間少于5s

      @Required(percentile99 = 10000):所有執行中99%的執行時間少于10s

      @Required(percentiles = "66:200,96:500"):所有執行中66%的執行時間少于200ms,96%的執行時間少于500ms

      @PerfTest和@Required不僅可以指定某一個方法,也可以至于類的前面指定某一個類的執行參數。例,

    同時ContiPerf還支持推Test Suites的性能測試,只需在類的最前面加注釋@RunWith和@SuiteClasses ,例如:
    alt

      在每次執行完測試的時候,ContiPerf會自動生成測試報告,報告放在target/contiperf-report/index.html下。

    alt

      PS:如果在對類指定了執行的參數,對類中的方法也執行了執行參數,那么實際執行的結果是什么?

      通過簡單的實驗來解答這個問題:

    alt
    通過注釋指定這個類執行3次,沒有指定類中的方法test1,指定類中方法test2執行2次。結果如圖:
    alt
    從執行結果中我們可以看到,沒有指定的test1執行了3次,而方法指定了執行次數的test2執行了兩次,因此我們可以得到如果方法和類同時注釋指定了執行參數,那么實際按方法的注釋執行(除了展示的這次實驗外還做了其他不同參數的實驗,結果相同)。

      為什么要新建ContiPerfRule這個對象?

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>