端到端测试RESTful Web服务(Rails)

|| 我正在尝试筛选众多的测试解决方案,但我不确定自己是否朝着正确的方向前进。故事是:我们正在运行一个实现为Rails应用程序的RESTful Web服务,该服务支持我们的移动客户端。我们正在对Web服务进行单元测试(当然),但这涉及到模拟应用程序的许多部分,例如搜索堆栈(Apache SOLR)。 此外,我们的测试不(即不能!)涵盖关键路线,例如移动登录/登录过程,因为这涉及API应用程序与移动网站之间的通信,用户可以在其中输入凭据,例如用于SSO(Janrain参与)。因此,不会进行标准的Rails集成测试。 我意识到,从理论上讲,如果测试套件设计得很好,那么模拟仅严格在开始进行下一层测试的那些连接点进行,然后通过单元或功能分别测试服务API和移动网站,可以获得相同的测试覆盖率。我发现在实践中,如果您有多个开发人员独立开发测试套件,这是一种幻想。我只是承认我们的单元测试根本设计得不好。尤其是在执行TDD时,我发现虽然测试可以驱动应用程序代码,但是测试代码设计仅针对被测单元量身定制,从而导致了相当庞大的测试套件。 我发现的另一件事是,有时我们并非仅使用单元测试来检测回归,例如由于连锁效应,错误的查询被发送到SOLR服务器。这就是为什么我认为确保整个堆栈沿关键路径工作的唯一真实方法是在每次部署之前在登台服务器上自动进行端到端测试,即将实际的HTTP请求发送到应用程序。 我的问题是: 您认为这是一件合理的事情吗?我发现很少有关于在Web上进行实时API端到端测试的信息,这使我想知道我是否有意义 您会建议哪些工具/设置?我们使用Watir来为我们的网站运行验收测试,但是对于Web服务(不需要浏览器环境,不需要JS或任何类似UI的东西)来说,这似乎是过头了。甚至像Ruby脚本一样简单? 您可以给我的所有常规最佳做法或建议设计这样的测试?     
已邀请:
        您可能对此很感兴趣:http://groups.google.com/group/ruby-capybara/browse_thread/thread/5c27bf866eb7fad3 您可能想尝试的是将Cucumber(或类似产品)与上面链接中提到的工具之一结合使用,因此您可以执行以下操作
Given I have 2 posts
When I send \"DELETE\" to post with id 1
Then I should have 1 post
这样,您可以测试API的完整堆栈并检查结果。     
        最近,我们遇到了类似的问题,例如仅在单元级别上进行测试很快,但不足以发现与集成相关的异常情况。 我真的很喜欢Cucumber的小黄瓜语法,对我而言,它的价值在于我们可以运行一次该练习,然后在使用单独的标题后做出一些期望,就像它们是单独的RSpec
it
块一样。 有一个名为Turnip的工具,可以使用小黄瓜语法编写RSpec测试。我们已经使用了一段时间了,对此我感到非常满意,我们甚至开始减少了集成级别的缺陷。 我在博客文章中收集了我的经验:https://blog.kalina.tech/2019/10/end-to-end-testing-for-api-only-rails-apps-with-cucumber-syntax.html     

要回复问题请先登录注册