我必须模拟相当复杂的java Web服务,我正在寻找合适的解决方案。一种方法是使用Soap UI,但我需要一些能够修改服务器状态的东西,即。一个请求会影响将来的请求。
在这种特殊情况下,可以通过将序列化对象保存到磁盘并有时产生对原始客户端Web服务的异步响应来快速完成。
这两个要求阻止我使用SoapUI - groovy逻辑会变得非常复杂并且可能难以保留。
我的问题:
1)在此上下文中是否还有其他SoapUI优势(例如,轻松迁移到新版本的wsdl)而不是自定义java模拟实现?
2)从wsdl生成web服务的最合适的方法是什么,并且仍然能够与某些自定义功能相结合,即。通过附加一些可以在单独的文件中编辑的钩子(以便从更新的wsdl中进一步更新代码)?
答案 0 :(得分:5)
你应该看看EasyMock,它允许以编程方式构建模拟。可以为您的模拟指定非常复杂的行为。
答案 1 :(得分:3)
大概你在客户端使用某种生成存根?您应该使用其中一个模拟API(JMock或EasyMock)模拟存根,并将模拟注入到被测试类中。
在服务器端测试处理该调用的类,注入可能用于完成其工作的任何对象的模拟。
另外,您应该努力将所有调用保持在本地(进程中)的单元测试中。它可以很容易地控制被测试类依赖的任何对象的返回值,以及测试套件何时增长将有助于防止单元测试成为构建过程中的瓶颈。
关于从WSDL生成Java类,Apache Axis有一个名为WSDL2Java的东西,它生成我前面提到的客户端存根。这种实用程序在Web服务框架中很常见,但现在可能已经被替换,因为存在引入的{3} Web服务。
这里有关于EJB3 Web服务和客户端的教程(http://www.theregister.co.uk/2007/01/23/ejb_web_services/)。
答案 2 :(得分:2)
对于简单的模拟我使用soapUI,而对于更复杂的状态必须在请求之间更改我使用Python编写的简单Web服务模拟器。这样的模拟器使用从真实Web服务创建的回复模板或我在soapUI中创建的响应。这样我就可以控制所有逻辑。
我上一个项目的模拟器有300多行Python代码,但对于以前的更简单,它是〜150行Python代码。