Я хочу проверить REST api на моем сайте Rails. Каков самый простой/лучший способ сделать это с помощью платформы тестирования рельсов? Я только делаю стандартные находчивые вещи, поэтому мне интересно, в частности, так как это настолько стандартное болото, если есть какой-либо автоматический способ проверить этот материал.
REST XML API - лучший способ тестирования Rails?
Ответ 1
Я бы рекомендовал использовать огурец. Огурец эмулирует браузер, и вы можете проверить полученные результаты. Это отлично подходит для запросов XML, а также JSON и обычного старого HTML.
Ответ 2
Я применил свое собственное решение и подумал, что это будет полезно. Я написал модуль, который использует json, curb и addressable gems для отправки запросов 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"})
Ответ 3
Это не автоматизировано, но отлично видно, что делает ваш API.
Ответ 4
Мы используем RESTClient надстройка Firefox для посещения и тестирования сервисов REST.
https://addons.mozilla.org/en-US/firefox/addon/9780
Мы используем это в моей команде пару месяцев, и я не думаю, что мы могли бы работать без него. Это очень легко встать и работать и дружелюбно использовать.
Если вы получаете последнюю версию от Sourceforge, есть даже поддержка Oauth для нее, чего-то я не нашел ни в одном другом клиенте REST.
http://sourceforge.net/projects/restclient/develop
Один из многих преимуществ использования дополнения Firefox заключается в том, что он пересекает plattform. Мы используем тот же инструмент (RESTclient) для всех членов нашей команды, хотя мы используем разные ОС (Mac, Linux, Windows).
Ответ 5
Вы можете попробовать 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¶m2=value2'
В контроллере вы получите params['book_key']=BOOK1234
и params["author"]="Gandhi"
использовать -F "[email protected];type=application/msword;"
(2)
curl -F "[email protected]_experiments_with_truth.pdf;type=application/pdf;" --form-string "author=Gandhi" --form-string "[email protected]" -X PUT 'http://localhost:3000/api/submit_a_pdf_book?params1=value1¶m2=value2'
В контроллере вы получите params['email]="[email protected]"
и params["author"]="Gandhi"
и params["document"] = "File(object)"
. Это работает, только если test.doc
находится в текущем каталоге. Не забывайте передавать mime-type
, так как сервер может принимать его как "application octet-stream"
и ему нужно написать код, чтобы обрабатывать это отдельно.
Ответ 6
Если вы ищете тестирование API-интерфейсов, которые вы создали вручную, вы можете попробовать это! Кажется, хорошо работает!
Клиент REST - просто тестируйте API REST
Вы не можете выполнять автоматическое тестирование с этим, хотя!