测试WCF服务的最佳方法是什么?

45

我使用了微软随Visual Studio一同提供的这个工具,因为它很快且简单直接。

http://msdn.microsoft.com/en-us/library/bb552364.aspx

但它有点笨重,难以使用。你们是否知道其他有用的测试客户端,不需要创建新的Visual Studio项目和编译代码?

编辑:我更希望找到一个图形化测试工具,可以在我们不同的环境中进行快速的临时测试,而不必编写大量不同的测试。

10个回答

18

SoapUI 是另一款Web服务测试工具。我强烈推荐它。


我正在寻找不仅仅是Web服务,我们在WCF中使用了很多net.tcp绑定。 - Nick
只需为您的服务添加一个additional basicHttpBinding端点,并将其提供给SoapUI即可。 - Darin Dimitrov
2
那样做并不会测试我们拥有的netTcpBindings,而这正是整个目的。 - Nick
3
请使用WCFStorm(http://www.wcfstorm.com)。它专为测试WCF服务而设计,轻松处理netTcpBindings。 - user20155
HTTP绑定提供与TCP绑定相同的数据和接口,为什么需要单独测试TCP绑定? - NickG
根据我的经验,SoapUI的设置和测试更新非常繁琐。我们最终编写了自己的C#“测试框架”。这样做的好处是当事情发生变化时,重构选项更好。不过,由于已经过去了几年,情况可能已经改变了。 - Gorgsenegger

8

如果你想创建WCF服务自动化测试的最佳工具,那么使用你喜欢的单元测试框架编写测试是最好的选择。测试客户端和soapUI都不能创建在持续集成场景下运行的测试。


7
@John,我每天都在持续集成构建中使用SoapUI:http://www.soapui.org/userguide/commandline/functional.html - Darin Dimitrov
1
谢谢您发布这个。如果您使用jUnit测试WCF服务,则应该在某个地方写博客。大多数人不会使用Java来测试.NET代码。 - John Saunders
2
我没有提到我使用JUnit。使用SoapUI,您可以编写Web测试并定义期望结果。这些测试可以在命令行上运行,并将结果写入标准文本文件,可以在构建过程中进行解释。 - Darin Dimitrov
请更加具体明确。我曾经看到有人使用单元测试框架,但仍然创建客户端代理进行测试,而不是使用模拟对象。 - PositiveGuy
你需要有一个用户界面,以便像QA这样的人可以进行示例请求,除了TDD测试或集成测试。 - PositiveGuy
显示剩余3条评论

5

WCFStorm 是一个有用的工具,可以用来测试您所描述的方式。


2
以下是一些测试不同wcf场景的技巧。 点击此处以获取更多信息。 enter image description here

2
增加了一些有关调试的细节。 - user1824408

1

有一个叫做 SOA Cleaner 的新测试客户端,我建议你试一试。它支持 WCF,可以在http://xyrow.com找到。


这是一个.NET应用程序。它非常简单和轻量级,不需要任何安装。 - Clangon

1

我使用WcfStorm的15天试用版,对它印象深刻。连接到服务后,所有方法都会被公开。点击一个方法,您可以构建多个测试用例。完成后,您可以保存这些测试(将我的保存为带有服务的解决方案文件),并在进行更改时运行所有测试,以满足持续测试的要求。它还具有命令行,应该允许您将其集成到构建机器中,以进行真正的持续测试。

它还支持IronPython,因此如果您熟悉该脚本语言,您可以编写脚本来删除测试添加的记录。


1

我并不是想暗示soapUI不能用于使用basicHttpBinding公开的WCF服务。因为使用basicHttpBinding会起到一个传统的ASMX web服务的作用,所以它可以工作。但是,如果要切换绑定(或使用多个绑定),例如使用netTcpBinding,我认为仍然无法使用soapUI调用该服务的方法。 我描述的场景非常普遍,您可能在Web上使用basicHttpBinding端点将WCF服务公开以实现最大互操作性,并且只在内部使用另一个端点作为netTcpBinding(以实现最佳性能)。


1

最终我使用MS测试编写了单元测试。在每个测试之前,服务都由测试程序集托管,并在之后关闭。当然这不是真正的单元测试,所以纯粹主义者可能会感到不安,但这意味着我可以随时运行测试。


1
除了传统的“服务单元测试”直接调用服务接口,模拟域层之外,我们还有“服务自托管测试”,它将服务托管在单元测试框架中,但也模拟了域层。这些测试是集成测试和单元测试的混合体,但它们证明了我们的编组和序列化正常工作,否则很难实现。 - Jeremy McGee

0

WCFStorm非常棒,但我认为对于独立开发者来说太贵了。

正如Darin所说,我也推荐使用soapUI。

但有一种特殊情况,当您在WCF中使用REST并将请求作为POST消息发送时,soapUI不支持JSON请求。

在这种情况下,您可以使用我在这里找到的工具:

WCF RESTful JSON自动化测试


你能具体说明一下这个特殊情况是什么吗? - Johnny Graber

0

如果您需要测试客户端逻辑: 您可以使用模拟/隔离框架来存根实际对服务器的调用,并使用单元测试框架编写适当的单元测试。

测试服务器逻辑甚至可以更容易 - 您所需的只是测试对业务逻辑的调用并存根对外部组件(即数据库)的调用。

在客户端到服务器之间进行完整交互的单元测试没有实际好处,因为您知道WCF有效,而应该在专用服务器/客户端上添加整个环境的集成测试。


在TDD环境中有好处,而且你正在改变你的绑定。 - David B Heise
所以,有测试客户端逻辑(代理)和测试服务本身,调用业务层方法的方法,对于一个服务,你真的需要两组不同类型的测试。 - PositiveGuy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接