7

與我的previous question相反,我會盡力滿足我的要求。如何自動化功能/集成測試和數據庫回滾

我試圖找到一些框架/方法/「東西」,將符合下列:

  • 能力編寫自動測試,最好寫在Visual Studio中,使用C#。
  • 測試應該驅動一個Web瀏覽器,並像用戶一樣與SUT進行交互。
  • 測試應該能夠在數據庫中設置測試場景。
  • 測試應該能夠斷言用戶交互在DB中具有預期的效果。
  • 測試完成後,它應該能夠回滾它在數據庫中所做的所有更改。

我的第一次嘗試是使用NUnit測試來驅動硒(在此之前,華廷),但我面臨有點問題的(檢查上面的鏈接),而使用的TransactionScope回滾變化硒驅動瀏覽器在DB中做過。

有沒有人在「真實世界」中做過這樣的事情?我通過Google找到了一些參考資料,但一直未能找到有關如何實施的具體示例。如果我要進行單元測試,那就不會有任何問題。在這種情況下,TransactionScope就足夠了。

編輯:河哈維指出我的this問題,這幾乎與我的情況相同。

但是,這個問題只是差不多相同。我的應用程序是一系列服務的一部分,它們都訪問同一組數據庫表。所需的測試數據量不允許有效使用drop/create-scripts,那麼是否有一些替代解決方案?

我們正在使用SQL Server 2005,並且我不擅長數據庫魔術,所以如果有一些方法可以使用除drop/create之外的sql腳本,那麼這可能是一個選項。

編輯2:

基礎上的答案和一些額外的撓頭,我們會去更輕量級的數據庫開發人員執行單位 - ,集成 - 測試和功能測試。這使我們能夠使用sql腳本來設置和拆除測試。

+0

這可能有幫助:http://stackoverflow.com/questions/768944/rollback-database-after-integration-selenium-tests – 2009-09-24 05:12:49

+0

是的,我本身沒有硒問題。似乎是一個偉大的工具!問題在於回滾Selenium驅動的broser到db中的變化。 – juarola 2009-09-24 05:14:03

+0

哦,我的,我怎麼會錯過。在發佈之前,我試圖做大量的搜索,但這個問題的場景幾乎是一個副本。我會在我的問題中添加一點以區別於他們的情況... – juarola 2009-09-24 06:03:53

回答

7

在交易中所做的更改僅在所述交易中可見。將測試包裝在事務範圍中(如果可能的話)會使測試在非常關鍵的方面(事務)的行爲與真實的行爲不同。

使用在每個測試套件之前恢復的數據庫映像要好得多。套件完成並驗證完成後,您可以放棄測試數據庫。下一次運行,在套件安裝過程中,數據庫將從已保存的圖像中以原始狀態重新創建,並準備好進行測試。更好的辦法是有一個腳本,可以從頭開始部署數據庫,並在套件安裝過程中運行該腳本。

順便說一句,在每次測試之前恢復到原始狀態是不可行的。更一般地說,要進行冗長的單獨測試設置和清理步驟是不可行的。隨着您添加更多測試,將數據庫恢復到測試就緒狀態所需的時間將變得難以管理。帶有數百個測試的套件非常常見,並且數萬次測試的完整測試將意味着花費數小時和數小時來恢復數據庫以進行測試。設計你的個人測試,以便他們可以獨立運行,即。測試N必須產生有效結果,即使測試N-1失敗。

另一個要考慮的是故障調查,你希望你的測試失敗,使數據庫中,可以爲你想隨後的測試需要能夠運行併產生有效的結果有意義的信息進行調查的狀態。有時候這些要求會互相矛盾,但你必須考慮到這些要求並圍繞它們設計你的測試。

+0

謝謝您的見解,尤其是關於失敗調查的部分。我會將這一個標記爲答案,因爲我傾向於同意,我最初想到的並不是一個現實的解決方案。 – juarola 2009-09-25 10:25:31

+0

很久以前,您肯定已經選擇了您的方法,但請注意,您應始終能夠重現失敗的測試,並可能使用調試器逐步完成測試。所以我不會因保留數據庫狀態而造成問題。 – 2010-06-22 14:02:34

7

如果將數據庫還原到已知的良好狀態所需的數據量是望而卻步下降/創建腳本,並在運行你的開發人員或SQL 2005的企業版的測試,你可以看看的好creating a database snapshot狀態和reverting to it在每個測試之前。這比完全恢復要快得多,但如果您有數百次測試,它可能仍然太耗時。

+0

謝謝你的回覆!這是我們qa部門的標準做法。我的目標是在代碼轉向qa之前爲開發人員找到一些輕量級的替代方案。我認爲我們必須爲數據庫開發「內容」,以便在開發過程中擁有足夠的數據進行快速測試。 – juarola 2009-09-25 10:19:17