Написание единичных тестов в Ruby для REST API

Я написал базовый API REST с помощью синатра.

Кто-нибудь знает, как лучше написать тесты? Я хотел бы сделать это с помощью Ruby.

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

Ответы

Ответ 1

Возможно, вы посмотрите на этот подход http://anthonyeden.com/2013/07/10/testing-rest-apis-with-cucumber-and-rack.html

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

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

Увидев, что я парень QA, а не разработчик, я был бы очень доволен использованием огурца и тестирования его на этом уровне, но я также очень благодарен ему, когда devs unit test, поэтому, хотя вы можете использовать rSpec вместо из Кьюка, возможно, подсказка в отношении "теста стойки" будет полезна тому, что вы пытаетесь выполнить.

Ответ 2

Лучший способ - вопрос мнения:) Лично мне нравится просто и чисто. С такими инструментами, как 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

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

Ответ 3

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

https://github.com/brooklynDev/airborne

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

Ответ 4

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