您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源性能測(cè)試工具 >
認(rèn)識(shí) p-unit : 一款開(kāi)源的性能測(cè)試工具
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/6 15:41:27 ] 推薦標(biāo)簽:

    p-unit 是一款開(kāi)放源碼的性能測(cè)試框架,和 JUnit 不同,JUnit 關(guān)注的是測(cè)試案例的正確性,而 p-unit 不僅關(guān)注測(cè)試案例的正確性,還收集測(cè)試案例的性能參數(shù),默認(rèn)情況下,p-unit 收集測(cè)試案例的時(shí)間和內(nèi)存消耗情況,可以產(chǎn)生文件,圖片,和 PDF 格式的報(bào)表。此外,p-unit 還支持參數(shù)化測(cè)試,多線程測(cè)試以及不同 Java 虛擬機(jī)性能之間的比較。

p-unit 簡(jiǎn)介

或許我們已經(jīng)習(xí)慣了使用 JUnit 來(lái)寫(xiě)單元測(cè)試來(lái)保證代碼質(zhì)量(我也一直這么做),但可能經(jīng)常碰到這樣的問(wèn)題:

    程序多線程下正確性如何?
    如何測(cè)試程序的性能?
    當(dāng)有多個(gè)方案可以選擇時(shí),技術(shù)上如何比較不同方案的性能?

對(duì)于問(wèn)題 1,我們或許聽(tīng)天由命?或是憑借人工分析,或是根據(jù)用戶反饋?很多軟件單線程下的單元測(cè)試覆蓋率相當(dāng)高,從而保證了代碼的健壯性。然而多線程測(cè)試時(shí)常被忽略,這并不代表多線程測(cè)試不重要,相反,修正一個(gè)用戶報(bào)告的多線程 BUG 往往比單線程的要高出很多,因?yàn)闇y(cè)試案例經(jīng)常不是 可重現(xiàn)的。這更要求程序員在開(kāi)發(fā)階段充分的重視。目前多線程單元測(cè)試力度不夠的一個(gè)重要原因是沒(méi)有一個(gè)像 JUnit 那樣易用的測(cè)試工具,另外重復(fù)寫(xiě)測(cè)試案例往往不被程序員接受。

對(duì)于問(wèn)題 2,一個(gè)成熟的關(guān)心性能的產(chǎn)品往往有一個(gè)性能測(cè)試平臺(tái)。這個(gè)測(cè)試平臺(tái)應(yīng)該關(guān)注的是測(cè)試業(yè)務(wù)邏輯本身,而無(wú)需關(guān)心如何運(yùn)行測(cè)試案例。你是否為寫(xiě)這樣的測(cè)試平臺(tái)痛苦過(guò)?以及花費(fèi)時(shí)間在產(chǎn)生一些直觀的報(bào)表上面?

對(duì)于問(wèn)題 3,我們往往寫(xiě)一個(gè)原型來(lái)比較不同產(chǎn)品之間的性能,如何比較執(zhí)行速度和內(nèi)存消耗?或是選擇適合你的虛擬機(jī)?

p-unit 是這么一款開(kāi)源的性能測(cè)試軟件,它能幫助你很好的解決上述問(wèn)題。p-unit 可以:

    多線程支持:同一個(gè)測(cè)試案例可以單線程執(zhí)行,也可以多線程執(zhí)行,測(cè)試案例開(kāi)發(fā)者只需寫(xiě)一套測(cè)試案例。
    參數(shù)化測(cè)試案例:很多測(cè)試案例,需要測(cè)試同一功能在不同數(shù)量級(jí)上的性能表現(xiàn)。
    不同虛擬機(jī)性能測(cè)試:只需指定虛擬機(jī)路徑,即可測(cè)試同一個(gè)測(cè)試案例在不同虛擬機(jī)上的表現(xiàn),報(bào)表上可以非常直觀顯示性能差別。
    事件機(jī)制構(gòu)架:punit 是基于事件機(jī)制構(gòu)架的,如果用戶想定制報(bào)表,只需實(shí)現(xiàn)事件響應(yīng)器,并注冊(cè)該響應(yīng)器到 punit 核心即可。

多線程執(zhí)行測(cè)試案例

在了解如何多線程執(zhí)行測(cè)試案例之前,我們先了解一下如何利用 p-unit 單線程執(zhí)行測(cè)試案例。不同于 JUnit, p-unit 測(cè)試用例無(wú)需繼承任何測(cè)試類或是實(shí)現(xiàn)接口,即可執(zhí)行 test 開(kāi)始的方法。盡管 JUnit 4 中加入了注釋(Annotation) 的特性,但測(cè)試方法前綴為 "test" 仍然是測(cè)試者們的。因此如果你的 JUnit 測(cè)試案例遵循的是 test 命名規(guī)則,那么 p-uni t可以兼容運(yùn)行 JUnit 測(cè)試案例。

下面的代碼清單 1 是一個(gè)為普通的測(cè)試案例:


清單 1. 測(cè)試案例 1

public class SimpleTestClass {

 public void setUp() {
   SampleUtil.doSomething();
 }
 
 public void tearDown() {
   SampleUtil.doSomething();
 }
 
 public void testA() {
   System.out.println("testA");
   SampleUtil.doSomething();
 }
 
 public void testB() {
   SampleUtil.doSomething();
 }
 
 public void testC() {
   SampleUtil.doSomething();
 }

}

public class SampleUtil {
 private static Random _random = new Random();
  
 public static void consumeMemory(int length) {
  byte[] data = new byte[length];
  for(int i = 0, j = 0; i < data.length; ++i) {
    ++j;
  }
 }

 public static void consumeTime(int time) {
  ThreadUtil.sleepIgnoreInterruption(time);
 }
 
 public static void doSomething() {
  consumeTime(Math.abs(_random.nextInt()) % 500);
  consumeMemory(Math.abs(_random.nextInt()) % 100000);
 }
}

上一頁(yè)123下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd