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

Posted

技术标签:

【中文标题】测试 WCF 服务的最佳方法是啥?【英文标题】:What's the best way to test WCF services?测试 WCF 服务的最佳方法是什么? 【发布时间】:2010-10-11 20:15:06 【问题描述】:

我使用了微软随 Visual Studio 提供的这个工具,因为它又快又脏

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

但它有点笨重且难以使用。是否还有其他有用的测试客户端可供您使用并且不需要创建新的 Visual Studio 项目和编译代码?

编辑:我正在寻找更多的图形测试工具,我可以使用它在我们不同的环境中对系统进行快速的临时测试,而无需编写一堆不同的测试。

【问题讨论】:

【参考方案1】:

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

【讨论】:

我在寻找的不仅仅是 Web 服务,我们在 WCF 中使用了很多 net.tcp 绑定 只需向您的服务添加一个额外的 basicHttpBinding 端点并将其提供给 SoapUI。 这不会测试我们拥有的 netTcpBindings,这是整个目的 使用 WCFStorm (wcfstorm.com) 它是为测试 WCF 服务而设计的,可以轻松处理 netTcpBindings。 http绑定不提供与TCP绑定相同的数据和接口吗?如果是这样,为什么需要单独测试 TCP 绑定?【参考方案2】:

您找不到比使用您最喜欢的单元测试框架和编写测试更好的工具来创建 WCF 服务的自动化测试。测试客户端和soapUI 都不会创建一个可以在持续集成场景中运行的测试。

【讨论】:

@John,我每天都在持续集成构建中使用 SoapUI:soapui.org/userguide/commandline/functional.html 感谢发布。如果您使用 jUnit 来测试 WCF 服务,那么您应该在某处写博客。大多数人不会使用 Java 来测试 .NET 代码。 我没有提到我使用 JUnit。使用 SoapUI,您可以编写 Web 测试并定义期望。这些测试可以在命令行上运行,结果将写入标准文本文件,可以在构建期间进行解释。 我按照您发布的 URL 进行操作,看起来它创建了 jUnit 测试。同样,我很想看到关于此的文章或博客文章。我推荐soapUI来“玩弄”服务;如果我看到如何做到这一点,我很乐意推荐它进行测试。 我必须同意 Darin 的观点——SoapUI 有一个命令行运行器,绝对没有什么可以阻止它在 CI 环境中的使用。【参考方案3】:

WCFStorm 可用于测试您描述的方式。

【讨论】:

【参考方案4】:

http://blogs.msdn.com/b/wcftoolsteamblog/archive/2010/01/04/tips-for-launching-wcf-test-client.aspx

以下是测试不同 wcf 场景的一些技巧。

【讨论】:

添加了更多关于调试的细节【参考方案5】:

我最终在 MS 测试中编写单元测试。在每次测试之前,该服务由测试程序集托管,然后被拆除。当然这不是单元测试,所以纯粹主义者会不寒而栗,但这确实意味着我可以随心所欲地运行测试。

【讨论】:

与直接调用服务接口、模拟域层的传统“服务单元测试”一起,我们还有在单元测试框架中托管服务的“服务自托管测试”,但还模拟了域层。这些是集成测试和单元测试的混合体——但它们证明我们的编组和序列化工作正常,否则很难实现。【参考方案6】:

我并不是要暗示soapUI 不适用于使用basicHttpBinding 公开的WCF 服务。使用 basicHttpBinding 会起作用,因为该服务将作为旧版 ASMX Web 服务运行。但是,例如,如果要将绑定(或使用多个绑定)切换到 netTcpBinding,我认为仍然无法使用soapUI 调用该服务的方法。我描述的场景很常见,其中您使用 basicHttpBinding 端点在 Web 上公开 WCF 服务以实现最大互操作性,而另一个端点作为 netTcpBinding(以获得最大性能)仅在内部使用。

【讨论】:

【参考方案7】:

有一个名为 SOA Cleaner 的新测试客户端,我建议您尝试一下。它支持 WCF。可以在以下位置找到:http://xyrow.com。

【讨论】:

这是一个 .NET 应用程序。它非常简单明了;不需要任何安装。【参考方案8】:

我运行 WcfStorm 进行了 15 天的评估,我对它印象深刻。连接到服务并公开所有方法。单击一个方法,您可以构建多个测试用例。完成后,您可以保存这些测试(将我的作为解决方案文件保存在服务中),并且在您进行更改时,您可以运行所有满足连续测试的测试。它还有一个命令行,可以让您集成到您的构建机器中以进行真正的持续测试。

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

【讨论】:

【参考方案9】:

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

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

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

【讨论】:

TDD 环境有好处,您正在更改绑定 所以有测试客户端逻辑(代理)和测试服务本身,调用业务层方法的方法对吗?所以你真的需要 2 套和孩子的测试在这里服务。【参考方案10】:

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

正如达林所说,我也推荐soapUI。

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

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

WCF RESTful JSON automated testing

【讨论】:

您能否更具体地说明特殊情况是什么?

以上是关于测试 WCF 服务的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

下载 WCF 服务公开的所有 WSDL 文件的最佳方法是啥?

从 Excel 访问 WCF 服务的最佳方式是啥?

取消异步 WCF 请求的最佳方法是啥?

设计 SOA WCF Web 服务时的最佳实践是啥?

测试遍历反应组件的方法的最佳方法是啥

使用 GoogleTest 测试私有方法的最佳方法是啥? [关闭]