【问题标题】:How to use Cucumber to test non-Ruby, non-Rack API's如何使用 Cucumber 测试非 Ruby、非 Rack API
【发布时间】:2011-10-28 19:38:46
【问题描述】:

我用黄瓜做很多事情。我真的很喜欢它作为 BDD 环境。

所以我想将它用作测试 API 的外部工具。我想做这样的事情:

  Scenario: Hit api /info path and get info back
    When I visit the API path '/info'
    Then I should see the following text "Here's info on the API"

或类似的东西。我主要想把 API 当作一个黑匣子,只测试输入和输出。我不打算检查 API 中的任何内容。

我看过的大多数与 Cucumber 一起工作的库(例如 Capybara)似乎都是围绕基于 Rack 的应用程序设计的。我想要类似的东西,但不依赖于 Rack。

存在哪些不依赖机架的 gem(如果有)。或者有没有办法使用 Capybara 来测试远程服务器上的 API?

【问题讨论】:

    标签: ruby-on-rails tdd cucumber bdd capybara


    【解决方案1】:

    我不会使用 Capybara 来测试远程 API,因为 Capybara 是为测试应用程序而设计的,用于测试具有 HTML UI 的应用程序(正如 Aslak 在 cmets 中指出的那样)。

    相反,我会将 Cucumber* 与 HTTParty 之类的工具结合使用,后者是用于发出 HTTP 请求并巧妙地解析它们的工具。这是一个想法:

    When /^I visit the API path '(.*?)'/ do |path|
      @result = HTTParty.get("http://theapi.com/#{path}")
    end
    
    Then /^I should see the following result:$/ do |result|
      @result.should == result
    end
    

    这里的最后一步是这样使用的:

    Then I should see the following result:
       """
         { success: true }
       """
    

    * 我个人会实际使用 RSpec,我觉得语法不那么笨拙。

    【讨论】:

    • 谢谢 Ryan -- 你对使用 minitest -v- rspec 有什么想法?
    • 使用您提供的步骤 def 重写了一些东西,我已经开始运行了。正是我的想法。
    • Capybara 并非用于测试 本地 应用程序。它是为测试带有 HTML UI 的 webapps 而设计的。 Capybara 也适用于 remote Web 应用程序(使用它支持的众多驱动程序之一 - 例如 selenium)。它不适合非 HTML(即 RESTful JSON/XML API)。我推荐 Cucumber 与 RackTest (如果它是一个 Rack 应用程序)或 HTTParty 如果不是。 Cucumber 书中有一整章介绍了这两种方法。
    • 我一直在用它来测试一个 PHP 应用程序。它工作得很好!
    【解决方案2】:

    一段时间以来,我一直在针对 Drupal 应用程序使用 cucumber。它运作良好。

    这帮助我用硒设置了水豚

    https://github.com/thuss/standalone-cucumber

    如果你想使用机械化,那就有点麻烦了。我不得不使用 0.3.0-rc3,因为在重定向等之后存在一些问题。提交字段名称包含“[]”字符的表单仍然存在一些问题。我不太记得我团队中的另一个人发现了这个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2014-01-29
      相关资源
      最近更新 更多