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

我通過為一個(gè)標(biāo)準(zhǔn) Test 裝飾上 LoadTest(由 TimedTest 裝飾)應(yīng)用了上述規(guī)范,清單 4 顯示了其結(jié)果。


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

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() 方法運(yùn)行 10 次(每隔 100 毫秒啟動(dòng)一個(gè)線程),且每個(gè)線程必須在 2 秒內(nèi)完成,否則整個(gè)測試場景將失敗。

使用注意

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

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

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


清單 5. JUnitPerf 基準(zhǔn)測試

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() 什么都沒做。其惟一的目的是確定運(yùn)行 setUp() 方法(當(dāng)然,該方法也通過 DbUnit 設(shè)置了一個(gè)數(shù)據(jù)庫)的總時(shí)間。

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

試試吧!

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

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

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