Лучший способ проверить Rails REST XML API? - PullRequest
12 голосов
/ 15 апреля 2009

Я хочу протестировать REST API на моем сайте Rails. Какой самый простой / лучший способ сделать это с помощью инфраструктуры тестирования рельсов? Я занимаюсь только стандартными находчивыми вещами, поэтому мне интересно, в частности, так как это слишком большой стандарт, если есть какой-нибудь автоматический способ проверить это.

Ответы [ 6 ]

5 голосов
/ 10 марта 2011

Я свернул свое собственное решение и подумал, что это будет полезно. Я написал модуль, который использует json , curb и адресуемые гемы для отправки запросов GET, PUT, POST и DELETE на localhost: 3000. Он может запросить либо XML (как задал исходный вопрос), либо json. Возвращает тело ответа в виде хэша. В основном это обертка вокруг драгоценного камня, который, я думаю, имеет ужасный синтаксис.

Обратите внимание, что я автоматически загружаю api_key. Это можно отключить, передав :api_key => false или сломав, используя api_key => "wrong". Возможно, вы захотите пропустить это или изменить его в соответствии со своей схемой аутентификации.

Вот модуль:

module ApiTesting
  # requres the json, curb, and addressable gems

  require "addressable/uri"

  def api_call(path, verb, query_hash={}, options={})
    options.reverse_merge! :api_key => "abc1234", :format => "xml"
    query_hash.reverse_merge!({:api_key => options["api_key"]}) if options[:api_key]
    query = to_query_string(query_hash)
    full_path = "http://localhost:3000/#{path}.#{options[:format]}?#{query}"
    response = case verb
      when :get
        Curl::Easy.perform(full_path)
      when :post
        Curl::Easy.http_post("http://localhost:3000/#{path}.#{options[:format]}", query)
      when :put
        Curl::Easy.http_put(full_path, nil)
      when :delete
        Curl::Easy.http_delete(full_path)
    end
    case options[:format]
      when "xml"
        Hash.from_xml(response.body_str)
      when "json"
        JSON.parse(response.body_str)
    end
  end

  private

  def to_query_string(val)
    uri = Addressable::URI.new
    uri.query_values = val
    uri.query
  end

end

А вот несколько простых примеров: Запрос атрибутов ресурса с помощью GET:

    api_call("calls/41", :get)

Создание ресурсов с помощью POST:

    api_call("people", :post, {:person => {:first => "Robert", :last => "Smith" } })

Обновление ресурсов с помощью PUT:

    api_call("people/21", :put, {:person => { :first => "Bob" } })

Удаление ресурсов с помощью DELETE:

    api_call("calls/41", :delete)

Отключение автоматической вставки api_key:

    api_call("calls/41", :get, {}, {:api_key => false})

Используйте неправильный ключ api_key:

    api_call("calls/41", :get, {}, {:api_key => "wrong"})

Использовать как json (по умолчанию xml):

    api_call("calls/41", :get, {}, {:format => "json"})
2 голосов
/ 13 сентября 2009

Это не автоматизировано, но действительно здорово посмотреть, что делает ваш API.

http://hurl.r09.railsrumble.com/

2 голосов
/ 07 сентября 2009

Я бы порекомендовал использовать огурец. Огурец эмулирует браузер, и вы можете проверить результаты, которые он получает. Это прекрасно работает для запросов XML, а также для JSON и простого старого HTML.

1 голос
/ 21 января 2011

Можно попробовать curl

используйте --form-string для передачи данных формы на сервер

(1)

curl --form-string "book_key=BOOK1234" --form-string "author=Gandhi"  -X PUT 'http://localhost:3000/api/show_all_books_of_a_particular_author?params1=value1&param2=value2'

В контроллере вы получите params['book_key']=BOOK1234 и params["author"]="Gandhi"

использовать -F "document=@test.doc;type=application/msword;"

(2)

curl -F "document=@my_experiments_with_truth.pdf;type=application/pdf;" --form-string "author=Gandhi" --form-string "email=joe@mymail.com"  -X PUT 'http://localhost:3000/api/submit_a_pdf_book?params1=value1&param2=value2'

В контроллере вы получите params['email]="joe@mymail.com" и params["author"]="Gandhi" и params["document"] = "File(object)". Это работает, только если test.doc находится в текущем каталоге. Не забудьте передать mime-type, так как сервер может принять его как "application octet-stream", и ему нужно писать в код для отдельной обработки.

1 голос
/ 16 февраля 2010

Мы используем RESTClient дополнение Firefox для посещения и тестирования сервисов REST.

https://addons.mozilla.org/en-US/firefox/addon/9780

Мы использовали это в моей команде в течение нескольких месяцев, и я не думаю, что мы могли бы сделать нашу работу без этого. Он очень прост в настройке и удобен в использовании.

Если вы получаете последнюю версию от Sourceforge, то есть даже поддержка Oauth, чего я не нашел ни в одном другом REST-клиенте.

http://sourceforge.net/projects/restclient/develop

Одним из многих преимуществ использования дополнения Firefox является его кроссплатформенность. Мы используем один и тот же инструмент (RESTclient) для всех членов нашей команды, хотя мы используем разные ОС (Mac, Linux, Windows).

0 голосов
/ 12 июня 2009

Если вы смотрите на тестирование API, которые вы создали вручную - вы можете попробовать это! Кажется, работает хорошо!

REST-клиент - просто протестируйте REST API

Вы не можете сделать автоматическое тестирование с этим, хотя!

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