Написание юнит-тестов на Ruby для REST API - PullRequest
13 голосов
/ 27 января 2011

Я написал базовый REST API с использованием sinatra.

Кто-нибудь знает лучший способ написания тестов для него?Я хотел бы сделать это, используя Ruby.

Я провел первоначальное тестирование с использованием curl.Но я хотел бы сделать что-то более надежное.Это мой первый API - есть что-то конкретное, что я должен тестировать?

Ответы [ 4 ]

6 голосов
/ 03 ноября 2012

Лучший способ - это вопрос мнения :) Лично мне нравится просто и чисто. С такими инструментами, как minitest, Watir и rest-client , вы можете собрать очень простой тест как для вашего интерфейса REST, так и для тестирования вашего веб-сервиса через настоящие браузеры (все основные браузеры поддерживаются).

#!/usr/bin/ruby
#
# Requires that you have installed the following gem packages: 
# json, minitest, watir, watir-webdrive, rest-client
# To use Chrome, you need to install chromedriver on your path

require 'rubygems'
require 'rest-client'  
require 'json'
require 'pp'
require 'minitest/autorun'
require 'watir'
require 'watir-webdriver'

class TestReportSystem < MiniTest::Unit::TestCase
   def setup
      @browser = Watir::Browser.new :chrome # Defaults to firefox. Can do Safari and IE too.
      # Log in here.....
   end

   def teardown
      @browser.close
   end

   def test_report_lists   # For minitest, the method names need to start with test
      response = RestClient.get 'http://localhost:8080/reporter/reports/getReportList'
      assert_equal response.code,200
      parsed = JSON.parse response.to_str
      assert_equal parsed.length, 3 # There are 3 reports available on the test server
   end

   def test_on_browser
      @browser.goto 'http://localhost:8080/reporter/exampleReport/simple/genReport?month=Aug&year=2012'
      assert(@browser.text.include?('Report for Aug 2012'))
   end
end

Запустите тестовые случаи, просто выполнив скрипт. Существует много других систем тестирования и REST-клиентов для Ruby, которые можно настроить аналогичным образом.

4 голосов
/ 11 февраля 2011

Вы могли бы взглянуть на этот подход http://anthonyeden.com/2013/07/10/testing-rest-apis-with-cucumber-and-rack.html

, хотя многие могут сказать, что использование Cucumber - это больше тестирование приложений или приемочное тестирование, а не модульное тестирование, оно содержит подход к созданию заголовков HTTP и формированию HTTP-запроса, который, как я догадываюсь, может оказаться там, где вы застряли?

Лично у меня нет проблем с этим, поскольку, если вы действительно собираетесь проводить модульное тестирование API, вам, вероятно, придется смоделировать любые единицы кода, с которыми может работать API (например, если вы сохраняете данные )

Видя, что я парень по контролю качества, а не разработчик, я был бы очень рад использовать огурец и тестировать его на этом уровне, но я также очень ценю это при модульном тестировании разработчиков, так что пока вы можете использовать rSpec вместо Cuke, возможно, совет к «стойке тест» будет полезен для того, что вы пытаетесь достичь.

3 голосов
/ 21 октября 2014

Вы можете попробовать использовать airborne, который является фреймворком, написанным именно для этой цели:

https://github.com/brooklynDev/airborne

Вы можете протестировать либо с живым API, либо с Sinatra, Grape, Rails приложение.

0 голосов
/ 27 января 2011

Я бы использовал fakeweb gem для юнит-тестирования с веб-сервисами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...