您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
JUnitPerf 使用手冊(cè)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/1/18 14:31:06 ] 推薦標(biāo)簽:

編寫有效的JUnitPerf測(cè)試

Timed Tests

Waiting Timed Tests

默認(rèn)情況下TimedTest測(cè)試中如果實(shí)際測(cè)試時(shí)間超過了預(yù)期時(shí)間則繼續(xù)執(zhí)行JUnit的測(cè)試。這種waiting timed test總是允許JUnit測(cè)試?yán)鄯e所有的測(cè)試結(jié)果,直到測(cè)試完成并且檢查完所有的測(cè)試結(jié)果。

如果測(cè)試執(zhí)行中等待測(cè)試完畢的用例直接或間接地派生多個(gè)線程,那么此次測(cè)試只有等到所有的線程執(zhí)行完畢才會(huì)返回到timed test中。另外一方面該測(cè)試將無限期地等待。一般來說,單元測(cè)試應(yīng)該等待所有派生的線程執(zhí)行完畢,例如使用Thread.join()方法,以便準(zhǔn)確地判斷結(jié)果。

Non-Waiting Timed Tests

此外,TimedTest還提供了一個(gè)構(gòu)造方法,當(dāng)實(shí)際時(shí)間超過預(yù)期時(shí)間時(shí)立即表示未通過。這種類型的測(cè)試如果執(zhí)行時(shí)間超過了預(yù)期的大時(shí)間則不等待測(cè)試?yán)^續(xù)執(zhí)行完畢。這種類型的測(cè)試比上一種方式更加有效,根據(jù)需要這種測(cè)試可節(jié)約時(shí)間,將不再等待程序執(zhí)行并且立即標(biāo)識(shí)測(cè)試未通過。然而,跟上面一種類型不同的是,這種類型的測(cè)試如果中間有測(cè)試不通過的話不繼續(xù)執(zhí)行后面的測(cè)試了。

Load Tests

Non-Atomic Load Tests

默認(rèn)情況下,如果LoadTest擴(kuò)展出來的測(cè)試直接或間接地派生線程,它不會(huì)強(qiáng)制這種線程并發(fā)執(zhí)行(正如在事務(wù)中定義的一樣)。這種類型的測(cè)試假設(shè)它擴(kuò)展的測(cè)試在當(dāng)返回控制時(shí)交互地完成。例如如果擴(kuò)展測(cè)試的派生線程和控制返回沒有等待派生進(jìn)程執(zhí)行完畢,那么擴(kuò)展測(cè)試假定為一次性地完成了。

而一般來講,單元測(cè)試中為了準(zhǔn)確地判斷結(jié)果,應(yīng)該等待派生的線程也執(zhí)行完畢,例如使用Thread.join()方法然而在某些情況下并不是一定要這樣的。例如,對(duì)于EJB分布式的查詢結(jié)果,應(yīng)用服務(wù)器可能派生一個(gè)新的線程去處理這個(gè)請(qǐng)求。如果新的線程在同一個(gè)線程組中運(yùn)行decorated測(cè)試(默認(rèn)情況),那么一個(gè)非原子的壓力測(cè)試僅僅等待壓力測(cè)試直接派生的線程執(zhí)行完畢而新生成的線程則會(huì)被忽略掉。

總之,非原子壓力測(cè)試僅僅等待壓力測(cè)試中直接派生的線程執(zhí)行完畢來模仿多個(gè)并發(fā)用戶。

Atomic Load Tests

如果多個(gè)線程規(guī)定一個(gè)decorated測(cè)試成功地執(zhí)行,這意味著只有所有decorated測(cè)試中的線程執(zhí)行完畢這個(gè)decorated測(cè)試才被認(rèn)為是完成了。可以使用setEnforceTestAtomicity(true)來強(qiáng)迫執(zhí)行這種測(cè)試()。這將有效地促使這種測(cè)試等待屬于decorated測(cè)試的線程組的所有線程執(zhí)行完畢。原子性壓力測(cè)試也會(huì)把任何過早退出的線程當(dāng)成是失敗。如果一個(gè)線程突然崩潰,那么屬于同一線程組的其他線程會(huì)立即停止執(zhí)行。

如果decorated測(cè)試派生的線程屬于同一個(gè)線程組,默認(rèn)情況下線程執(zhí)行decorated 測(cè)試,這樣原子壓力測(cè)試將無限期地等待派生的線程執(zhí)行完畢。

總之,原子壓力測(cè)試將等待所有屬于同一線程組的線程執(zhí)行完畢,壓力測(cè)試直接派生的線程,來模仿多個(gè)用戶并發(fā)。

局限性

JUnitPerf已知有以下缺陷:

·         TimedTest返回的時(shí)間是測(cè)試用例的testXXX()方法的時(shí)間,包括setUp(), testXXX()和 tearDown()三個(gè)方法的總時(shí)間,這是任何測(cè)試實(shí)例中所能提供的小的測(cè)試粒度。因此期望的時(shí)間也應(yīng)該考慮set-up 和tear-down的運(yùn)行時(shí)間。(譯者注:或者可以自己在JUnit測(cè)試用例使用System.currentTimeMillis()方法來計(jì)算某個(gè)步驟的執(zhí)行時(shí)間)

·         JUnitPerf并不是一個(gè)完整的壓力和性能測(cè)試工具,并且它也不會(huì)用來取代其它類似的工具。它僅僅用來編寫本地的單元性能測(cè)試來幫助開發(fā)人員做好重構(gòu)。

·         The performance of your tests can degrade significantly if too many concurrent users are cooperating in a load test. The actual threshold number is JVM specific.

·         在壓力測(cè)試中如果有太多的用戶并發(fā)運(yùn)行則測(cè)試情況會(huì)越來越糟。應(yīng)該參照J(rèn)VM的規(guī)范來指定用戶數(shù)。

技術(shù)支持

如果您有任何關(guān)于JUnitPerf的疑問,需要改進(jìn)的要求,成功的經(jīng)歷或者bug,或者當(dāng)有新的版本發(fā)布時(shí)得到通知請(qǐng)發(fā)email給mike@clarkware.com。您的個(gè)人信息不會(huì)被公開。

您也可以通過郵件列表(http://groups.yahoo.com/group/junitperf/)的方式來討論有關(guān)JUnitPerf并且在有新的版本發(fā)布時(shí)收到通知。

捐助

您可以通過購(gòu)買《Pragmatic Project Automation》(http://www.pragmaticprogrammer.com/sk/auto/)一書的方式支持JUnitPerf的繼續(xù)開發(fā)。

培訓(xùn)與指導(dǎo)

可以通過訪問站點(diǎn)http://clarkware.com/courses/TDDWithJUnit.html了解有關(guān)快速地創(chuàng)建測(cè)試代碼的方法。

這里也提供有關(guān)JUnit的指導(dǎo)(http://clarkware.com/mentoring.html)來幫助你改進(jìn)測(cè)試。

如果想獲得更多的信息請(qǐng)與我聯(lián)系(mailto:mike@clarkware.com)。

許可信息

JUnitPerf is licensed under the BSD License.

感謝

非常感謝Ervin Varga在線程健壯性和原子性測(cè)試方面給予的幫助。他在這些方面提出使用線程組來捕獲和處理線程的異常,此外在TimeTest和TestFactory中提出了如果執(zhí)行時(shí)間超時(shí)則立即標(biāo)識(shí)為失敗的實(shí)現(xiàn)方式。非常感激他對(duì)JUnitPerf的親睞和建議。

翻譯

MSN:wyingquan at hotmail dot com  完成時(shí)間:2005-4-19

相關(guān)資源及參考文檔

·         JUnit PrimerMike Clark, Clarkware Consulting, Inc.

本文簡(jiǎn)單闡述了如何使用JUnit測(cè)試框架來編寫和運(yùn)行簡(jiǎn)單的測(cè)試用例及套件。

·         Continuous Performance Testing With JUnitPerfMike Clark (JavaProNews, 2003)

本文講解了如何編寫JUnitPerf測(cè)試來不時(shí)地檢查性能和可測(cè)性等情況。

·         Test-Driven Development: A Practical Guide David Astels (Prentice Hall, 2003)

包括一章由本文作者編寫的如何使用JUnitPerf來持續(xù)進(jìn)行性能測(cè)試。

·         Java Extreme Programming CookbookEric Burke, Brian Coyner (O@#Reilly & Associates, 2003)

其中有一張專門講述了JUnitPerf的用法。

·         Java Tools for Extreme Programming: Mastering Open Source Tools Including Ant, JUnit, and CactusRichard Hightower, Nicholas Lesiecki (John Wiley & Sons, 2001)

包含一章描述了如何與HttpUnit一起使用JUnitPerf。

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