在Java項目中,JUnit測試執行安裝,測試和拆卸。即使在使用內存數據庫嘲笑真正的數據庫時,通常也會回滾事務或從內存中刪除數據庫,並在每次測試之間重新創建數據庫。由於一個測試不會在可能影響下一個測試的環境中留下工件,因此可以爲您提供測試隔離。每個測試都以已知的狀態開始,不能流入另一個測試。如何實現測試隔離測試Oracle PL/SQL?
現在我已經有了一個Oracle數據庫構建,可以創建1100個表和400K的代碼 - 很多pl/sql包。我想不僅測試數據庫安裝(完全 - 從頭開始創建,部分 - 從以前的數據庫升級等),並確保所有的表和其他對象處於安裝後我期望的狀態,但也是在pl/sql上運行測試(我不確定我會怎麼做前者 - 建議?)。
我想這一切都從詹金斯運行CI,以便通過迴歸測試捕捉開發錯誤。
首先,我必須使用企業版本而不是XE,因爲XE不支持Java SP和對Oracle Web Flow的依賴。即使我消除了這些依賴關係,構建通常需要1.5小時才能加載(完整構建)。
那麼如何在這種環境下實現測試隔離呢?爲每個測試使用交易並將其回滾?好的,那些提交它們的pl/sql程序呢?
我想過備份和恢復以在每次測試之後重置數據庫,或者在每次測試之間重新創建整個數據庫(過於劇烈)。兩者都不切實際,因爲它需要花費一個多小時才能安裝。這樣做每個測試是過度殺傷和瘋狂。
有沒有一種方法可以在數據庫模式中在沙中繪製一條線,然後將其滾回到該時間點? Sorta就像一個大的「撤消」功能。除了expdp/impdp或rman之外的東西。也許整個方法都關閉了。建議?其他人如何做到這一點?
對於CI或小型生產升級窗口,最終測試套件必須在合理的時間內運行(30分鐘將是理想的)。
是否有產品可能有助於實現這種「撤消」能力?
你可以捕捉的DB(道路的克隆速度比好處exp/imp或rman),然後在克隆上運行測試。 (詢問您的系統管理員) – tbone 2011-06-14 15:29:54