InfoQ

新闻

模仿Web Services

作者 Boris Lublinsky 译者 王锐 发布于 2008年5月20日 上午3时38分

社区
Architecture,
SOA
主题
Web服务
标签
最佳实践,
Mocks,
Apache Synapse,
测试,
developerWorks

InfoQ以前的一篇新闻已经涵盖了Web service的一些测试方法。最近,这些方法通过Web Service模仿(Web Services mocking)的使用得到了扩展。

对象模仿是一种非常流行和通用的单元测试方式。根据Wikipedia所说

模仿对象行为是指仿真对象以一种受控的方式效仿真实对象的行为……模仿对象可以模拟复杂、真实对象的行为,因此当真实对象难以甚至不可能包含到单元测试中时,模仿就非常有用。如果一个对象有任何如下特征,那么在它的位置使用模仿对象可能会很有用:
  • 非确定性结果(例如,当前的时间或者当前的温度);
  • 具有难以创建或者重现的状态(例如,一个网络故障);
  • 很慢(例如,一个完整的数据库,测试之前必须初始化它);
  • 尚不存在或者行为可能会被改变;
  • 包含一些测试专用的信息和方法(这些信息和方法对它的真正任务没有用)

Web Service引入了一些额外的场景,非常适于使用模仿方式:

  • 必须书写依赖某个或者某些远程Web service的程序,但是这些服务正运行在生产服务器上,在测试服务器上还没有准备好;亦或第三方服务运行在客户防火墙之后,无法测试;
  • 离线开发(例如在家里或者在路上)可能会需要一组完整的、能够工作的离线Web Service才可能测试一个实现;
  • 在远程Web Service可能无法访问或者无法始终保持运行的情况下进行离线演示。确保演示在以上各种情况下都能顺利进行是很有必要的。

Upul Godage写的一个新的教程描述了如何使用Apache Synapse来为开发和测试模仿web services。Apache Synapse是一个简单、轻量级、高性能的企业服务总线(ESB)。Apache Synapse可以用来过滤、转换、路由、操作和检测那些可以通过HTTP、HTTPS、Java™ 消息服务(JMS)、简单邮件传输协议(SMTP)、第3版邮局协议(POP3)、FTP、文件系统以及很多其它传输媒介传输的SOAP、二进制、XML以及普通文本格式的消息。

教程描述了如何使用Synapse来定义那些固定或受控的服务响应,步骤涉及使用简单的XML配置文件,定义转换,为一个(组)给定请求构建响应。它还描述了使用相同的基于配置的方式模仿仲裁(mediator)的方法。

另一个模仿Web Services的途径是使用Crosscheck Networks最新发布的SOAPSimulator。它的功能与Synapse提供的相似,但还包含如下的额外功能:

  • SOAP和XML模拟过程的图形化。
  • 详尽的WSDL和XSD模式支持。
  • 从模拟实例动态地检索WSDL和模式。
  • 实时仿真事务监测。
  • 根据企业最佳实践进行度量的WSDL和XSD报告卡片。
  • 可定制的运行时消息掌控分析规则。
  • 多并发服务模拟。
  • 包含运行时变量状态机的复杂业务逻辑模拟。
  • 支持WS-Security和WS-Identity可扩展性。
  • 支持数据库和API插件可扩展性。

Crosscheck Networks还提供了一个关于产品使用的详细教程

正如其白皮书——《使用服务仿真加速你的SOA项目》——中定义的那样:

在满足所提出的业务目标的过程中,构建和部署服务的紧密时间压力给SOA项目留下了很小的犯错空间。在IT预算面临持续压力,紧张的最后期限,以及在商业伙伴的内部及之间集成系统的驱动下,SOA项目需要在它们的环境中引入服务模拟。服务模拟解耦了消费者和生产者之间的依赖,使它们能够相互独立地实现。Web Service模仿解决方案为开发者提供了一个“盒装参考系统”,并消除了那些为了构建一个完整规模的生产系统的副本所需的开销,这能使开发者受益。
查看英文原文Mocking Web Services

深度内容

模块化Java:声明式模块化

本文是模块化Java系列文章的第4篇,介绍的是声明式模块化。文中描述了组件如何以声明的方式来定义并组织在一起,而无需让代码依赖于OSGI API。

Ian Robinson和Jim Webber谈论基于Web的整合

本采访是在伦敦举行的QCon2009上记录的,Ian Robinson和Jim Webber探讨了如何将Web作为整合平台以及REST在理论上和实践中的好处。

项目管理修炼之道(精选版)

项目管理对于项目成败至关重要,但实践中每个项目都有自己的独特性,没有现成的解决方案可以套用。书中从应对实际风险的角度出发,讲述了从项目启动、项目规划到项目结束的整个管理流程,展示了作者的思考过程。本迷你书从原书中精选出5个章节。

那是鸟,还是飞机?不,那是超人!

在这个演讲中,Fred将会揭示敏捷的一些外在因素,并会重点关注敏捷获得成功的内在原因。从案例研究和真实的项目经验来看,Fred认为:工具、管理体系都不能让你变得敏捷。敏捷的成功,植根于士气高涨、充分授权的工作者身上,他们能够以不同以往的方式思考问题。

访谈和书摘:Eben Hewitt的新书《Java SOA Cookbook》

Java SOA Cookbook

Eben Hewitt的新书《Java SOA Cookbook》从Java实现的角度讨论了面向服务架构。Eben在书中讨论了SOA基础、工具、最佳实践和SOA治理等主题。

Mark Richard的《Java消息服务》第二版

Mark Richards的新书《Java消息服务》第二版覆盖了JMS的许多主题, 包括发布和订阅模式以及点对点模式,消息过滤和事务等。InfoQ与Mark谈论了跟他的新作。

模块化Java:动态模块化

本文是“模块化Java”系列文章的第三篇,讨论动态模块化,内容涉及如何解析bundle类、bundle如何变化、以及bundle之间如何通信。

让测试也敏捷起来

对于测试组织来说,敏捷方法带来的快速迭代却让测试本身变得困难起来:缺乏“足够详细的文档”,缺乏“仔细设计用例的时间”等等。在本演讲中,段念将与大家探讨如何在敏捷过程中进行测试。