Asp.net

將自動化 Web 測試集成到建構過程中

  • August 6, 2009

我正在尋找改進網站功能測試自動化過程的建議。這是我過去嘗試過的。

我曾經有一個使用WATIN的測試項目。您有效地編寫了看起來像“單元測試”的內容,並使用 WATIN 自動化瀏覽器以點擊您的網站等。

當然,您需要一個站點才能執行。所以我讓測試實際上將程式碼從我的 web 項目複製到本地目錄,並在任何測試執行之前啟動了一個指向該目錄的 web 伺服器。

這樣,新人可以簡單地從我們的原始碼控制中獲取最新資訊並執行我們的建構腳本,並查看所有測試的執行情況。他們還可以簡單地從 IDE 執行所有測試。

我遇到的問題是我花了很多時間來維護程式碼來設置測試環境,而不是測試。更不用說由於所有的複制需要很長時間才能執行。此外,我需要測試包括安裝在內的各種場景,這意味著我需要能夠將數據庫設置為各種初始狀態。

我很好奇你做了什麼來自動化功能測試來解決其中一些問題並保持簡單。

更多細節 由於人們要求更多細節,這裡就是。我正在使用 Visual Studio 和 Cassini(內置 Web 伺服器)執行 ASP.NET。我的單元測試在 MbUnit 中執行(但這並不重要。可能是 NUnit 或 XUnit.NET)。通常,我有一個單獨的單元測試框架來執行我所有的 WATIN 測試。在 AssemblyLoad 階段,我啟動 Web 伺服器並在本地複制我的所有 Web 應用程式碼。

我對任何平台的解決方案都感興趣,但我可能需要更多關於每件事的含義的描述。:)

菲爾,

自動化可能很難維護,但是您使用自動化進行部署的次數越多,您就越可以利用它進行測試設置(反之亦然)。

坦率地說,當使用不僅僅是驅動靜態編譯的、預先分解的功能單元的建構工具時,更容易發展自動化程式碼,將其分解並重構為特定的小功能

單元,就像 NAnt 和微軟建構。這是許多相對較早使用 NAnt 等工具的人轉而使用 Rake 的原因之一。將建構程式碼視為任何其他程式碼的自由度 - 不斷發展其內容和形狀 - 使用 Rake 更大。您不會像使用 Rake 那樣輕鬆快速地在自動化工件中遇到同樣的停滯,而且在 Rake 中編寫腳本比 NAnt 或 MSBuild 容易得多。

所以,你的鬥爭的某些部分本質上與工具有關。為了保持自動化的合理性和維護性,您應該警惕靜態建構工具(如 NAnt 和 MSBuild)施加的障礙。

我建議您不要將測試環境引導與程序集負載結合起來。這是一個由內而外的耦合,只提供短暫的便利。在從 IDE 或從命令行或從互動式控制台(如 C# REPL Mono 項目,或來自 IRB。

測試數據設置有時只是一件麻煩事。它必須完成。

您將需要一個可以呼叫的庫來創建和清理數據庫狀態。您可以直接從您的測試程式碼中進行這些呼叫,但我個人傾向於避免這樣做,因為測試數據或範例數據控制程式碼的用途不止一種。

我從 HTTP 驅動所有範例數據控制。我編寫帶有專門用於控制範例數據的操作的控制器,並通過 Selenium 針對這些操作發出 GET。我使用這些來創建和清理數據。我可以將 GET 組合到這些操作中以創建設置數據的常見場景,並且我可以將數據的特定值作為請求參數(或如果需要,也可以是表單參數)傳遞。

我將這些控制器放在我通常稱為“test_support”的區域中。

我部署網站的自動化沒有部署 test_support 區域或其路由和映射。作為部署驗證自動化的一部分,我確保 test_support 程式碼不在生產應用程序中。

我還使用 test_support 程式碼來自動控制整個環境 - 用假貨替換服務,關閉子系統以模擬故障和故障轉移,啟動或停用與這些方面無關的功能測試的身份驗證和訪問控制等。

控制 Web 應用程序的樣本數據或來自 Web 的測試數據有一個很大的次要價值:在展示應用程序或進行探索性測試時,您可以通過針對已知(或可猜測)的 url 發出一些獲取來創建所需的數據場景在 test_support 區域。在這裡真正努力堅持寧靜的路線和資源導向會真正得到回報。

這種功能自動化(包括測試、部署、展示等)還有很多其他功能,因此這些資源設計得越好,您在長長的大廳中維護它們的時間就越多,您會發現更多的機會以不可預見但有益的方式利用它們。

例如,在網頁的語義模型上編寫域模型程式碼將有助於創建更易於理解的測試程式碼並降低脆弱性。如果你做得好,你可以將這些相同的模型與各種不同的驅動程序一起使用,這樣你就可以在壓力測試和負載測試以及功能測試中利用它們,也可以從命令行將它們用作探索性工具。順便說一句,當您不像使用靜態語言時那樣綁定到驅動程序類型時,這種事情更容易做到。許多領先的測試思想家和實干家使用 Ruby 工作,以及為什麼 Watir 是用 Ruby 編寫的,這是有原因的。與 C# 測試程式碼相比,在 Ruby 中實現重用、組合和表現力要容易得多。但那是另一回事了。

讓我們找個時間再聊聊其他 90% 的東西 :)

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