您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
追求代碼質(zhì)量: 用 JUnitPerf 進(jìn)行性能測(cè)試
作者:網(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í)限測(cè)試

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è)測(cè)試場(chǎng)景將失敗。

使用注意

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

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

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


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

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");     
 }
}
 


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

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

試試吧!

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

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

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