2009-06-25 31 views
9

我必須模擬相當複雜的java web服務,並且正在尋找正確的解決方案。一種方法是使用Soap UI,但我需要能夠修改服務器狀態的東西,即。一個請求會影響未來的請求。模擬java web服務的最佳方式

在這種特殊情況下,它可以通過將序列化對象保存到磁盤並有時產生對始發客戶端Web服務的異步響應來快速完成。

這兩個要求阻止我使用SoapUI - 常規邏輯將變得相當複雜並且可能很難維護。

我的問題:

1)是否有其他優點了SoapUI在這種情況下(例如,輕鬆遷移到WSDL的新版本)在自定義的Java模擬實現?

2)什麼是最合適的方式來從wsdl生成Web服務,仍然能夠與一些自定義功能掛鉤,即。通過附加一些可在單獨文件中編輯的鉤子(以便從更新的wsdl進一步實現ws代碼的再生)?

+0

我還應該注意,該模擬不僅用於測試目的,它應該保持原樣的客戶端部分,即。必須有常規的http通信,只是端點的變化。所以我想嘲笑框架不會在這種情況下。 – aaimnr 2009-06-25 11:48:04

+0

如果您正在談論集成測試,那麼我會嘗試儘可能接近您的生產環境,並使用真正的Web服務來對抗UAT/QA數據庫。如果網絡服務不在您的控制之下,請查看您在測試過程中使用的「測試」數據。恕我直言,創建Web服務的「模擬」/存根會給您一種錯誤的安全感,因爲您的「模擬」/存根(stub)是基於您對網絡服務行爲方式的假設。這在單元測試中是可以的,但對於完整的集成測試,您必須使用真實的東西來確保它可以正常工作。 – 2009-06-25 16:26:13

回答

2

對於簡單的嘲笑,我使用soapUI,而當狀態必須在請求之間更改時更復雜我使用簡單的Python編寫的Web服務模擬器。這樣的模擬器使用從真實Web服務創建的回覆模板或在soapUI中創建的響應。這樣我可以控制所有的邏輯。

我最後一個項目的模擬器有300多行Python代碼,但對於以前的更簡單的代碼,它大約有150行Python代碼。

5

你應該看看EasyMock,它允許以編程方式構建模擬。可以爲你的模擬指定非常複雜的行爲。

3

大概你在客戶端使用某種生成的存根?你應該使用其中一個模擬API(JMock或EasyMock)來模擬存根,並將模擬注入被測類。

在服務器端測試處理該調用的類,注入它可能用於執行其任務的任何對象的模擬。

順便說一句,你應該努力保持本地單元測試(進程中)的所有調用。它可以很容易地控制被測試類依賴的任何對象的返回值,以及何時測試套件的增長將有助於防止單元測試成爲構建過程中的瓶頸。

關於從WSDL生成Java類Apache Axis有一些名爲WSDL2Java的東西,它生成我前面提到的客戶端存根。這種實用工具在Web服務框架中很常見,但自從EJB3 Web服務引入javax.xml.rpc.ServiceFactory存在以來可能已被替換。

這裏有一個關於EJB3 Web服務和客戶端的教程(http://www.theregister.co.uk/2007/01/23/ejb_web_services/)。

相關問題