如何自動化功能/集成測試和數據庫回滾
與我之前的問題相反,我將嘗試給出我的要求。
我正在嘗試找到一些適合以下內容的框架/方法/“事物”:
- 能夠使用 C# 編寫自動化測試,最好用 Visual Studio 編寫。
- 測試應該像使用者一樣驅動 Web 瀏覽器並與 SUT 互動。
- 測試應該能夠在數據庫中設置測試場景。
- 測試應該能夠斷言使用者互動在 DB 中具有預期的效果。
- 測試完成後,它應該能夠回滾它在數據庫中所做的所有更改。
我的第一次嘗試是使用 NUnit 測試來驅動 Selenium(以及之前的 Watin),但我在使用 TransactionScope 回滾 Selenium 驅動的瀏覽器在數據庫中所做的更改時遇到了一些問題(檢查上面的連結)。
有沒有人在“現實世界”中做過這樣的事情?我通過Google找到了一些參考資料,但還沒有找到任何具體的例子來說明如何實現這一點。如果我要進行單元測試,就不會有任何問題。在那種情況下,TransactionScope 就足夠了。
編輯: R. Harvey 向我指出了這個問題,這與我的情況幾乎相同。
然而,這個問題幾乎是相同的。我的應用程序是一系列服務的一部分,它們都訪問同一組數據庫表。所需的測試數據量不允許有效使用 drop/create-scripts,那麼是否有一些替代解決方案?
我們使用的是 SQL Server 2005,而且我對數據庫魔法不是很精通,所以如果除了 drop/create 之外還有其他方法可以使用 sql 腳本,那麼這可能是一個選擇。
編輯2:
根據答案和一些額外的頭疼問題,我們將為開發人員尋找更輕量級的數據庫來執行單元、集成和功能測試。這使我們能夠使用 sql 腳本來設置和拆除測試。
事務中所做的更改僅在所述事務中可見。同樣將測試包裝在事務範圍內(如果可能)會使測試在一個非常關鍵的方面(事務)表現得與真實事物不同。
最好使用在每個測試套件之前還原的數據庫映像。這樣,在套件完成並完成驗證後,您將刪除測試數據庫。下一次執行,在套件設置期間,從保存的圖像重新創建數據庫,處於原始狀態,準備進行測試。更好的是擁有一個從頭開始部署數據庫並在套件設置期間執行該腳本的腳本。
順便說一句,在每次測試之前恢復到原始狀態是不可行的。更一般地,具有冗長的單獨測試設置和清理步驟是不可行的。隨著您添加更多測試,在測試之間將數據庫恢復到測試就緒狀態所花費的時間將變得難以管理。包含數百個測試的套件非常常見,數万個測試的完整測試執行意味著僅花費數小時和數小時來恢復數據庫以進行測試。設計您的個人測試,以便它們可以獨立執行,即。即使測試 N-1 失敗,測試 N 也必須產生有效結果。
要考慮的另一件事是失敗調查,您希望失敗的測試使數據庫處於可以調查有意義的資訊的狀態,並且您希望後續測試能夠執行並產生有效的結果。有時這些要求會相互矛盾,但您必須考慮它們並圍繞它們設計測試。