您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
追求代碼質(zhì)量: 用 JUnitPerf 進行性能測試
作者:網(wǎng)絡轉載 發(fā)布時間:[ 2012/12/7 11:43:02 ] 推薦標簽:

我通過為一個標準 Test 裝飾上 LoadTest(由 TimedTest 裝飾)應用了上述規(guī)范,清單 4 顯示了其結果。


清單 4. 經(jīng)裝飾的負載和時限測試

public static Test suite() {
 int users = 10;
 Timer timer = new ConstantTimer(100);
 long maxElapsedTime = 2000;  
 return new TimedTest(new LoadTest(
   new WidgetDAOImplTest("testCreate"), users, timer),
     maxElapsedTime);    
}


正如您所看到的那樣,testCreate() 方法運行 10 次(每隔 100 毫秒啟動一個線程),且每個線程必須在 2 秒內(nèi)完成,否則整個測試場景將失敗。

使用注意

盡管 JUnitPerf 是一個性能測試框架,但也要先大致估計一下測試要設定的性能指數(shù)。這是由于所有由 JUnitPerf 裝飾的測試都通過 JUnit 框架運行,所以存在額外的消耗,特別是在利用 fixture 時。由于 JUnit 本身用一個 setUp 和一個 tearDown() 方法裝飾所有測試樣例,所以要在測試場景的整個上下文中考慮執(zhí)行時間。

相應地,我經(jīng)常創(chuàng)建使用我想要的 fixture 邏輯的測試,但也會運行一個空白測試來確定性能指數(shù)基線。這是一個大致的估計,但它必須作為基線添加到任何想要的測試限制中。

例如,如果運行一個由 fixture 邏輯(使用 DbUnit)裝飾的空白測試用時 2.5 秒,那么您想要的所有測試限制都應將這一額外時間考慮在內(nèi) —— 這可以從清單 5 中的基準測試中看到:


清單 5. JUnitPerf 基準測試

public class DBUnitSetUpBenchmarkTest extends DatabaseTestCase {
 private WidgetDAO dao = null;

 public void testNothing(){
  //should be about 2.5 seconds
 }

 protected IDatabaseConnection getConnection() throws Exception {       
  Class driverClass = Class.forName("org.hsqldb.jdbcDriver");
  Connection jdbcConnection =
   DriverManager.getConnection(
     "jdbc:hsqldb:hsql://127.0.0.1", "sa", "");
  return new DatabaseConnection(jdbcConnection);
 }

 protected IDataSet getDataSet() throws Exception {       
  return new FlatXmlDataSet(new File("test/conf/seed.xml"));
 }

 protected void setUp() throws Exception {
  super.setUp();     
  final ApplicationContext context =
   new ClassPathXmlApplicationContext("spring-config.xml");     
  this.dao = (WidgetDAO) context.getBean("widgetDAO");     
 }
}
 


請注意,清單 5 的測試樣例 testNothing() 什么都沒做。其惟一的目的是確定運行 setUp() 方法(當然,該方法也通過 DbUnit 設置了一個數(shù)據(jù)庫)的總時間。

也請記住,測試時間將依賴于機器的配置而變化,同時也依賴于在執(zhí)行 JUnitPerf 測試時運行的東西而變化。我經(jīng)常發(fā)現(xiàn),將 JUnitPerf 測試放到它們自己的分類中有助于將它們同標準測試隔離開。這意味著,在運行一個測試時不必每次都運行 JUnitPerf 測試,例如在一個 CI 環(huán)境中簽入代碼。我也會創(chuàng)建特定的 Ant 任務,從而只在精心策劃的將性能測試考慮在內(nèi)的場景或環(huán)境中運行這些測試。

試試吧!

用 JUnitPerf 進行性能測試無疑是一門嚴格的科學,但在開發(fā)生命周期的早期,這是確定和監(jiān)控應用程序代碼的低端性能的方式。另外,由于它是一個基于裝飾器的 JUnit 擴展框架,所以可以很容易地用 JUnitPerf 裝飾現(xiàn)有的 JUnit 測試。

想想您已經(jīng)花了這么多時間來擔心應用程序在負載下會怎樣執(zhí)行。用 JUnitPerf 進行性能測試可以為您減少擔憂并節(jié)省時間,同時也確保了應用程序代碼的質(zhì)量。

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