Dot-Net

集成(Selenium)測試後回滾數據庫

  • December 6, 2011

有沒有人對從 Selenium 等集成測試框架中回滾數據庫事務的最佳實踐或首選方式有任何建議?

這是我們目前的情況:我們有一個 .net Web 項目,其中包含許多在我們的單元測試環境中執行良好的單元測試——每個測試都繼承了一個父類,它在

$$ SetUp $$,並回滾事務中的$$ TearDown $$. 每次測試後,我們的單元測試數據庫都會恢復到原始狀態。 但是,一旦我們進入集成環境,情況就會發生變化。我們的持續集成伺服器會自動編譯我們的送出並將它們推送到測試伺服器,以便伺服器始終執行在最新的程式碼上。我們還設置了一個 Selenium 實例來自動化使用者與站點的互動。selenium 測試基本上與現有的 Selenium 伺服器通信,並告訴伺服器諸如“啟動瀏覽器並轉到http://testsite/TestPage.aspx - 將文本 ‘abc’ 輸入帶有 id ‘def’ 的表單欄位 - 斷言新頁麵包含文本“xyz””

每個測試都以與我們的普通單元測試類似的方式執行,但有一個重要的例外:Selenium 所做的任何更改都是在完全不同的執行緒/應用程序中完成的,因此我們不能(我*認為我們不能,至少)在測試拆解中回滾它們。

我們還沒有為此找到一個好的解決方案。現在我們正在使用 SqlCommand 執行 sql 語句來備份數據庫,然後在測試結束時,我們將數據庫設置為單使用者,刪除目前數據庫並恢復舊副本 - 這不太理想,因為這有效地殺死了附加到數據庫的應用程序,並要求我們再次重新初始化應用程序。

這是以前解決過的問題嗎?任何建議都會很棒。

謝謝!

我們在每次測試之前執行一個 drop/create-table 腳本。這是相當快的,並確保以前的測試沒有留下任何東西。

PS:我們正在使用 NHibernate,它動態創建這個腳本並在記憶體中的 Sqlite 上執行測試,它的速度非常快。但是如果我們切換到 SqlServer,它仍然非常快。

這是一個棘手的問題,而且每個應用程序的解決方案通常都是獨一無二的。在主要框架採用“推薦方法”之前,這將繼續是一種痛苦。

我最好的建議:在您的應用程序開始時計劃這種用法。包括在從應用程序下方重置數據庫後清理的 API(即:重置記憶體)。

引用自:https://stackoverflow.com/questions/768944