测试基于RESTful Web服务构建的应用程序

时间:2010-10-20 20:27:30

标签: ruby-on-rails ruby web-services rest

让我们说;我正在开发一个Web应用程序,它针对某些事情与RESTful Web服务进行通信。

RESTful Web服务不是第三方,而是与主应用程序并行开发(一个很好的例子,电子商务应用程序和支付处理器;或社交网络和SSO系统)。

在这样的系统中,验收(黄瓜)或功能测试可以通过两种方式完成:

  1. 使用对象级模拟库模拟所有外部调用;例如MochaJMock
  2. 通过在http级别进行模拟,使用webmock
  3. 等库
  4. 实际让主应用程序进行实际通话。
  5. #1和#2的问题是,如果底层应用程序的API发生变化;我的测试将继续传递,代码将实际中断,从而首先击败测试的目的。

    #3的问题是,我无法像rollback那样执行teardown数据。我正在平行运行我的测试,因此如果我让实际的Web服务出现,我将收到诸如“用户名”或其他内容的错误。

    所以社区的问题是,最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

将主应用程序置于开发或登台环境中。在同一环境中启动Web服务。让一个人打电话给对方。控制两者的夹具数据。那不是嘲笑;你没有得到假的实现。

这不仅可以让您对实际稳定性更有信心,还可以让您在暂存环境中测试性能,还可以让您针对各种版本的Web服务测试主应用程序。重要的是,当您的Web服务发生变化时,您的测试不会做错事,但更重要的是您的主应用程序也不会这样做。在 组件在生产中升级之前,你真的想要自信地知道这一点。

答案 1 :(得分:0)

我看不出在将客户端与服务隔离并实际访问服务之间存在中间地带。您可能错误地通过了测试,因为服务已经改变了行为,但是您是否与开发团队签订了一份“合同”,让他们负责破坏?

您可以尝试使用fakeweb并每天获得预期结果的新副本,这样您的测试就不会针对过时的数据响应运行。