为什么用 soapui 模拟 wcf 服务

Why mocking wcf services with soapui

我正在尝试了解使用 SOAPUI 模拟 wcf 服务。

引用自 smartbear's blog 这在

中会很方便

快速 Web 服务原型设计

Generate a complete static mock implementation from a WSDL in seconds and add dynamic functionality using Groovy. This allows you to implement and test clients much faster than if you had needed to wait for the actual solution to get build.

客户端测试或开发

Clients can be developed against the MockService and tested without access to the live services.

因此,从这个和我浏览的其他一些博客中,我了解到主要的事情(根据我阅读的内容)是在服务可用之前继续进行测试(我必须说我没有得到这个实际上。服务必须在您发送一些模拟请求和响应之前启动)。这是否意味着在我们设置此模拟时该服务应该可用,以便我们可以在它实际上不可用时使用它们?

我们还可以说,为给定服务保存多个测试用例和模拟服务之间没有区别 运行(毕竟它的服务应该是 运行).

我参与了一个大型项目,其中 3 个不同的系统都使用服务交换数据。它是同一个 WSDL(一个 "industry standard",非常复杂的野兽,不适合我们的任何一个系统),我们都有用于将数据发送到其他系统的服务器的客户端。每个 dev/test 团队都必须开发客户端和服务,而我们并不真正了解模拟。
如您所料,我们都在任何服务准备就绪之前就完成了客户的工作。几个月来测试什么也做不了。当他们最终可以测试时(开发人员能够让数据最终流动的第二天),事情变得一团糟。

所以我无法回到 2010 年拯救自己,但我可以拯救你。

这里是你还不明白的地方:

The service has to up before you sent up some mock requests and responses

您不需要启动、构建、编码、资助甚至批准服务。 SoapUI 模拟服务就是服务。相反,它是一个非常有能力的替身。因此,一旦您拥有 WSDL,就可以构建模拟服务,创建一些示例响应,并使用客户端(可能是 SoapUI 的其他实例)访问它。

那为什么要这样做呢?很多原因。

多个开发团队,在不同的时间线上。

测试可以进行,是。

避免意外(编码后)仅仅因为我们同意使用此 WSDL,并不意味着我的数据是您的系统所期望的,反之亦然。快来一探究竟吧!

示例:

  • 对于 Armor 字段,WSDL 只是说 "string" 但我们的系统允许 25 个字符,而您的系统允许 45 个。
  • 如果您更改 LifetimeAchievements,我们需要您发送 UserHighScore。否则它会被重置。
  • 我以为我们同意将 UserRank 放在 User Atributes 标签中,而不是 Power 标签中?
  • UserRank需要生效日期,否则会导致我方删除所有UserRank历史记录。
  • 这就是它过去的工作方式。
  • 停止向我们发送我们刚刚发送给您的相同数据。当您将刚刚收到的我们的数据大写时,这不是您需要告诉我们的更改。

理想情况下,系统将首先使用模拟服务和 SoapUI 进行开发。开发 WSDL 后,建立模拟服务,然后通过 SoapUI 发送提交示例请求。测试和开发都应该参与。查看从 SoapUI 客户端发送的数据和 build/script 响应。花几天时间开发测试用例。审核无效数据,return 现实响应,确保您 return 失败和成功,并尝试考虑(并记录)所有预期的失败场景,包括超时(可以编写脚本模拟服务中的 sleep() 函数)。超时场景可用于模拟负载,以便您可以看到对客户端和基础设施的影响(如果我们坚持下去,我们可以通过以高于服务处理能力的速率发送事务来突破 Layer7 网关30 分钟)。
因此,将模拟服务用作联合研讨会,敲定面向服务的解决方案的细节,然后对其进行编码。你会很高兴你做到了。