2015-06-16 65 views
0

運行我們的驗收測試套件時,我們希望對定義的數據庫狀態執行每一次測試。如果其中一個測試會寫入數據庫(比如創建用戶或其他東西),它當然不會影響以後的測試。快速複製大型MySQL數據庫進行測試

我們已經考慮過幾個選擇來實現這個目標,但是在每個單獨的測試之前複製整個數據庫似乎並不是最好的解決方案(考慮可能的性能問題)。

還有一個想法是使用MySQL事務,但是我們的一些測試會導致很多HTTP請求,因此會產生不同的PHP進程,並且在完成完整測試後,它們會過早丟失事務以進行乾淨回滾。

是否有更好的方法來保證每個驗收測試的定義數據庫狀態?我們希望保持簡單,比解決方案如aufsbtrfs在系統級解決它。

+2

關閉mysql,物理複製db文件,重啓mysql。稍後,沖洗,重複。 –

+0

技術上不是最有吸引力的解決方案,因爲我們必須在每個測試用例中的每種測試方法之後執行此操作,但也許這是必要的!?感謝您的輸入! – Johannes

回答

0

您可以使用PhpUnit來解決這個問題。

它用於PHP的自動化測試。不是唯一的圖書館,而是最廣泛的圖書館之一。

您也可以在數據庫測試中使用它(https://phpunit.de/manual/current/en/database.html)。基本上,它可以讓你完成你正在尋找的東西。最初導入整個數據庫,然後在每個測試套件中加載所需的數據,然後恢復到以前的狀態。例如,您可以暫時保存表A的當前狀態,並在完成套件的所有測試後,將其恢復。而不是重新加載整個數據庫。

順便說一句,擁有一個最小的數據庫只有測試所需的信息也會有很大的幫助。在這種情況下,您不必處理大的性能問題,您可以在每個測試套件之後簡單地恢復它。

+0

我明白你的觀點,我們實際上已經在使用PHPUnit進行單元測試。對於驗收測試,燈具和最小數據庫似乎沒有那麼有用。我們寧願對(幾乎)真實的數據採取行動,只需在測試時永久寫入數據庫來編輯它們即可。可複製性是我們在這裏的關鍵需求...... – Johannes

+0

然後,如果您不能使用最小數據庫(儘管您應該能夠重現表中所有可能的情況),那麼請查看我寫的關於將數據庫部分恢復到以前狀態的內容。 根據情況恢復一個或兩個表可能是可行的。顯然,如果你有一個巨大的桌子,你必須等待。我現在看不到另一個解決方案。 –

+0

如何最好地恢復MySQL中以前的DB狀態? – Johannes