2011-06-14 30 views
2

我有Hudson每5分鐘輪詢一次無數個項目並啓動編譯檢查。 這些包含用於java項目的ant build,並部署到數據庫代碼的參考數據庫,並且系統運行良好。hudson CI - 功能還是單元測試用例?

現在我處在一個十字路口。 我的確有一套功能測試用例已經寫入了許多組件。 通過功能我的意思是,這些基本上模仿我們手動QA部門會做的事情。黑盒測試,如果你願意。他們是JUnit測試用例,但絕對不是單元測試用例。 我想知道這個類的測試是否適合5分鐘輪詢,或者應該使用更多的白盒類型單元測試用例。 也許功能套件應該是每晚構建的一部分?

任何意見讚賞 彼得

回答

6

一般來說,你想擁有你的測試儘快運行,從而使開發者的反饋迅速地 - 否則他們不會知道,如果他們打破了東西,直到很久之後,他們可能已經轉向了另一段代碼。如果你的功能測試將耗費你所有的系統資源幾個小時,那麼我建議只做夜間測試的一部分,但除此之外,我建議你同時運行你的功能測試和單元測試用例與每一個構建。兩套測試都提供了有價值的反饋,並且您不知道系統是否穩定,直到您運行它們。

但這並不意味着你必須同時擁有兩個項目輪詢。我們所做的是把它分解成幾個不同的哈得遜/詹金斯工作:

  • 一個作業投票SCM,編譯和部署項目(相當快,〜幾分鐘)
  • 當這項工作完成,它會自動啓動運行大部分功能測試的第二項工作(5-20​​分鐘,取決於項目)
  • 第三項工作每晚都會運行,並進行更廣泛的測試,測試需要花費很長時間運行或佔用大量資源(需要幾個小時)

這意味着在第一個測試完成之前,它可以開始構建第二個構建,但是大部分測試仍然針對每個構建運行。

+0

感謝您的周到反饋。我想在這個問題上投入更多的鐵將會有所幫助 – 2011-06-17 10:35:07

0

我認爲你的決定真的取決於你的意思是功能測試。如果您的功能測試實際上是驗收測試(測試做的是客戶在系統驗收測試中所做的),那麼我認爲如果可能的話,您應該讓它們在每個構建中運行。

但是,如果測試是集成測試,我真的認爲你應該考慮將這些測試重寫爲unittest(隨着時間的推移)是否更有價值。我最喜歡的主題是Integrated Tests Are A Scam

除此之外,我做第二@ Laepdjek的答案。

0

這些測試通常很脆弱,還是非常穩定?

如果它們很穩定,我會說讓它們成爲第二個Hudson作業的一部分,這個作業在5分鐘的編譯測試完成時運行。假設你的服務器不是缺乏資源,你真的沒有什麼可以從中失去。

您需要確保在構建失敗時通知適當的人員並在發出警報前手動驗證失敗情況很容易。

0

我在之前的工作環境中做了什麼:在Hudson中構建Ant任務包括單元測試,因此如果任何單元測試用例失敗,構建任務就會中斷。隨後是功能測試服務器上的軟件包安裝腳本,隨後是功能測試用例。對於桌面應用程序,Squish測試用例在每晚構建之後運行。我們的EE應用程序擁有真正的CI,我們有通過Ant任務部署的Cucumber/Selenium測試用例。

規則很簡單:在您自己的計算機上運行每個Ant任務,並且只在每個測試用例呈綠色時提交代碼更改。

在另一家公司,我看到了以下策略:如果您打破Hudson構建作業,並且在一個小時內沒有糾正它,您的提交將被恢復。