輕量級性能測試工具—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.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97