0

我正在嘗試爲我的應用程序實現自動化集成測試。這是一個非常複雜的怪物。你可以說它的數據庫和文件系統的一部分是其狀態的一部分,因爲它將圖像文件保存在硬盤驅動器中,並且引用了數據庫中的圖像文件。軟件需要所有那些處於一致狀態的人才能正常工作。持續集成環境中的集成測試:數據庫和文件系統狀態

返回寫作測試:要運行任何相關的測試,我需要文件系統中的一些圖像文件,並在數據庫中填寫某些記錄。我想將所有這些放在一個名爲TestEnvironmentData的單獨文件夾中,並從Continuous Integration Server(Team City)中檢索它們,但一位同事說這個回購是相當完整的,而且我應該設置一個特殊目錄和數據庫,只能在Continuous Integration服務器中使用。我不喜歡那樣,因爲測試成功取決於我手動維護服務器中的東西,並在每次測試變得麻煩之前恢復初始狀態。

當你需要爲這樣的應用編寫集成測試時,你們會做什麼?主要目標是通過自動化測試工具來進行大規模的重構。有很多意大利麪條代碼,應用程序的當前體系結構幾乎不是單元可測試的,這就是爲什麼我首先決定進行集成測試的原因。

歡迎任何替代方法。

回答

1

開發人員重複性是設置連續集成服務器的關鍵。我爲最後三名僱主設定了一個,我發現成功的關鍵是開發人員能夠從他們的開發系統運行相同的測試,以獲得與CI服務器相同的結果。

要做到這一點,最簡單的方法是將測試工件檢入到源代碼管理中,但您也可以使用Dropbox或網絡共享,在其中一個生成步驟中將其複製。

對於.Net解決方案,我一直使用MsBuild,因爲您可以最輕鬆地複製Visual Studio的構建過程並獲得相同的二進制文件/可部署文件。至於保持數據庫同步,以便過去可以重複測試,我使用了MbUnit測試框架和[Rollback]屬性,因爲它會回滾測試中發生的對Sql Server的任何更改。我相信Nunit現在也有這個屬性。

CI服務器非常適合查找破壞現有功能的代碼,但除非開發人員能夠在其計算機上重現錯誤,否則他們將不會信任CI服務器一段時間。

+0

+1:如果NUnit真的可以做到這一點,它是一種真正的生活保護。我會檢查出來的。很高興能從另一個.NET人員那裏讀到! – 2012-04-12 19:21:26

1

首先,我們使用Maven構建我們的代碼。這就像螞蟻,但它依賴於約定,而不是許多事情的配置,比如Ruby On Rails。其中一個約定的是一個標準化的目錄結構:

(project)----src----main----(language) 
      |  |  \--resources 
      |  \--test----(language) 
      |    \--resources 
      \--target---... 

使用目錄結構,這樣可以很容易地讓你的應用程序資源和測試資源接近對方,但仍然能夠建立測試或建立生產,或者只是建立兩者,但只是在運行測試後打包應用程序部分。

至於重置測試之間的數據庫,你如何做到這一點很大程度上取決於你正在使用的DBMS。例如,如果您使用的是MySQL,那麼以您想要的方式獲取測試數據非常簡單,然後對您在測試之前加載的文件執行mysqldump。對於其他DBMS,您可能必須刪除並重新創建表並重新加載數據,或者爲起點和use a CREATE/SELECT sql statement to duplicate it each time創建單獨的表。

確實沒有可靠的方法圍繞「重置測試之間的數據庫」步驟。

+0

我使用.NET + SQLExpress +團隊城市,所以我想我可以定義我自己的約定。這不是問題。無論如何,你似乎擁有在資源目錄下建立測試環境所需的一切,不是嗎?所以一切都在源代碼控制之中。我的同事反對,所以我認爲我要做的是編寫一個腳本(也許在Powershell中),它從參數接收測試數據位置並使用它來構建測試環境。這樣,一旦你有測試數據的地方,你就指出構建腳本就是這樣。 – 2012-04-12 18:21:39

+0

我應該提一下,我的同事們不是(100%)任意否認將測試數據置於源代碼控制之下的選項。原因是服務器空間不足(好吧,他們可以買更多的空間,便宜的混蛋:P),但大多數情況下,我們的測試數據很大。我們處理高分辨率的多幀圖像,而我們最基本的數據庫大約爲10MB。在源代碼控制下的幾個不同的環境很快就會吃掉所有的回購空間... – 2012-04-12 18:24:48

+1

尊重,這是做出如此重要的架構決定的一個非常糟糕的理由。我也認識到它超出了你的控制範圍。也許你可以建議存儲壓縮的.sql文件(它們會壓縮很多)。你將失去在工具中區分它們的能力,但至少它會用軟件進行版本管理,這是必不可少的。 – 2012-04-12 19:43:28