2013-02-12 78 views
0

我正試圖將基於API的服務的測試環境放在一起。理想情況下,我希望每個測試都有一個默認數據庫。恢復默認的MySQL狀態,如事務,但全局。

讓我感興趣的是我想通過API來觸發寫入,讀取和更新,這將會像任何其他正常的日子一樣觸發數據庫。我只是試圖確定回滾這些更改的最佳方式。我知道事務,但這些似乎是依賴於連接的,並且我不能保證每個操作都會使用相同的連接,這是由於Web應用程序的性質。

我的第一次嘗試可能會涉及每次導入整個數據庫。我知道這會起作用,但它可能會很慢。

交易看起來像他們可以工作,但我是相對較新的以這種方式使用它們。

回答

0

如果您確實需要驗證測試數據是否已寫入數據庫,則事務不是您正在查找的內容。您將永遠不可見訪問尚未提交的事務。

如果您正在對代碼進行單元測試並且實際上不需要驗證數據庫中寫入的數據,那麼您應該創建一個數據庫模擬來代替真實數據庫。如果您需要實際驗證數據庫寫入,並且如果您知道每個測試只會更改數據庫中的幾個表,那麼您可能想要做的一件事就是讓SQL可用於刪除/創建/填充關注的表,以便您可以在每次測試執行之前執行此操作,而不必處理完全導入mysqldump。

其中一個測試我合作過採取了類似的做法,有他的測試數據庫模板表並提出各自適用的表的複印件(用CREATE TABLE test_table LIKE template_tableINSERT INTO test_table SELECT * FROM template_table)每次測試運行前,然後就下降的撕裂測試表下來每個測試階段。

+0

不幸的是,我試圖讓實際代碼儘可能輕鬆,所以對錶名等的更改將會是不可取的。 您激勵我嘗試複製每個表的數據* out *,然後在測試完成時恢復它。也許我甚至可以簡單地擁有多個模式並以這種方式放棄它。我希望它會比完整的重新加載要快。 – omgz0r 2013-02-12 18:21:22

+0

@ omgz0r在任何情況下,您都需要在測試設置和拆除時執行一組SQL命令。就我個人而言,我喜歡有一個完整的表格刪除,表格創建,表格插入SQL命令在測試本身內執行,因爲那樣您就可以將實際的測試表格結構檢入到您的代碼庫中,並且開發人員可以根據需要修改SQL中的測試當他們對測試表進行任何模式更改時。我不喜歡複製模板表並使用INSERT ... SELECT *查詢的想法,因爲如果數據庫中的數據發生更改,測試可能會中斷。 – 2013-02-12 18:33:55