5

我試圖決定如何爲Java-EE Web應用程序創建一組驗收測試。如何使用Maven進行部署後運行測試?

以下是設置:Maven用於生成WAR文件並將其部署到Glassfish中。在部署時,MySQL數據庫模式使用Hibernate從模型類自動更新(「hbm2ddl = auto」選項)。

驗收測試需要通過調用各種方法來測試已部署的代碼,並檢查結果是否符合預期(*)。我們編寫了一套額外的軟件包來掛接到現有的系統中,因此驗收測試應該顯示如何將這些軟件包集成到現有的代碼庫中。 (*)這聽起來更像單元/集成測試,但它們是驗收測試,它們應該證明我們所做的工作,並且需要在部署之後運行,以便有一個數據庫。

從上面,我目前的想法是使用JUnit來檢查期望值等。我正在努力的是如何在部署後調用這些測試。 「部署」是Maven的最後階段,所以不確定這是否可行?

+0

我不確定你真的需要在測試之前進行部署。對於集成測試,我們可以使用DBUnit,並且數據庫將可用。 –

+0

謝謝,但即使數據庫是從使用Hibernate的類生成的,這是真的嗎?我從來沒有使用過DBUnit(但是在試圖找到答案的時候在這裏遇到過幾次),所以需要研究一下。 –

+0

是的,這是真的;我目前使用它進行集成測試。 –

回答

5

僅僅因爲該階段被稱爲deploy並不意味着您必須使用它來部署您的應用程序進行測試。實際上,它只能用於將工件「部署」到Maven存儲庫。通讀Maven lifecycle phases的描述,你會看到有一些階段奉獻給你的使用情況:

pre-integration-test 
integration-test 
post-integration-test 

看一看的Cargo Maven plugin。它將WAR文件部署到各種容器進行測試。他們肯定會展示用例,例如您在網站上描述的用例。我期望最終,您可以使用Cargo部署到您的容器(從早期階段之一如預集成測試)

請注意,詹金斯也有一個插件,是一個圍繞Cargo插件的包裝。所以你可以通過Jenkins做你需要的。還要注意,你不需要像mvn clean deploy一樣運行你的Jenkins構建作業。您可以擁有一個只運行集成測試的構建作業,並且只有在成功時纔會觸發另一個「部署」作業。

+0

嗨,謝謝你的回覆 - 這個階段可以以特別的方式使用。但是這裏有一些非常基本的東西我不理解。我編寫Java代碼,將其打包成WAR文件,然後將其部署到Application Server(Glassfish)。它是數據庫駐留(並從Hibernate更新)的應用程序服務器,因此在部署之前如何能夠測試與數據庫等的通信?當然,數據庫不會存在?這是容器進來的地方嗎 - 它們是否以某種方式模擬了Application Server而不需要完全部署? –

+1

GlassFish是一個貨物支持的容器。它支持部署到一個現有的外部容器,或者一個專門的容器被啓動並拆除,僅用於測試目的。我想我所說的是Cargo是一種爲您的使用案例製作的高品質產品。我會檢查出來;) – chad

4

如果您確實需要在部署後執行某些操作,那麼您可以運行故障保護,也可以通過隱含JUnit)作爲部署階段的一部分。

我通常做什麼,如果有獨立的模塊。因此,您可以擁有一個maven項目,其中包含您的項目和一個單獨的「部署測試」項目。然後,構建父項目將構建並運行您的戰爭,然後運行部署測試。正常情況下,您可以使用junit。

第二個更適合詹金斯,因爲你仍然會有一個單獨的項目。

+0

感謝您的答覆!我傾向於這樣做。一個缺點是我希望能夠在Eclipse中輕鬆運行/調試測試。我想這可能是通過遠程調試而實現的,但是更多的是冗長的。 –