Автоматизированное тестирование приложения rails с реальным XML и JSON запросом / ответом, чтобы служить документацией API? - PullRequest
4 голосов
/ 22 ноября 2010

Я должен быть добрым к своим потребителям веб-сервисов и привести им несколько хороших примеров, даже несмотря на то, что не очень интересно поддерживать большой запрос xml.Есть ли лучшие способы быть хорошим провайдером WS?

У меня нет html.Приложение поддерживает как XML, так и JSON, поэтому для обеспечения достоверности примеров API (как xml, так и json) я хотел бы доказать их работоспособность в комплекте интеграции.

В вашем ответе я хотел бы увидеть несколько примеров, а не только "попробуйте cucumber / webrat / capybara".Трудно найти Howto без HTML.Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Поскольку вам не нужны причудливые функции webrat / capybara для выполнения javascript или работы с произвольным html, имеет смысл просто использовать базовую поддержку тестирования интеграции с rails .

Я бы сохранял примеры API в некоторой форме, которую можно легко преобразовать в XML или JSON, а затем использовал этот файл в интеграционном тесте, чтобы вы тестировали оба типа форматов, сохраняя при этом только одно представление тестовых запросов. Вы также можете написать задачу для генерации примеров API для документации из этого.

Полное тело ответа от любого вызова API в ваших тестах будет храниться в @ response.body, и вы можете анализировать / проверять, как вам угодно.

1 голос
/ 23 ноября 2010

У меня был этот автономный скрипт, который позволял мне отправлять xml-запрос, но мне требовался сервер:

require 'rubygems'
require 'net/http'
require 'json'
url = URI.parse('http://localhost:3030/myresource.xml')
request = Net::HTTP::Post.new(url.path)
request.content_type="text/xml"
request.basic_auth('user', 'secret')
request.body = "<?xml version='1.0' encoding='UTF-8'?><somedata><name>Test Name 1</name><description>Some data for testing</description></somedata>"
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}
puts response

наконец я смог сделать это без запуска сервера, используя rspec 2. Поместив это вфайл спецификации под spec/requests позволяет мне делать это в моем приложении без webrat или capybara.

для XML

post("/myresource.xml", 
     some_xml_string,
     {"CONTENT_TYPE" => "text/xml",
      "HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")})

и JSON

post("/myresource.json",
      some_json_string,
      {"CONTENT_TYPE" => "application/json",
       "HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")})

Теперь ядумаю, я могу собрать some_xml_string из удаленного ресурса, такого как мой документация xml или файл json (например, http: // resource) , например.Да, это больше для поддержания, и тест будет хрупким.Мне нужно больше об этом подумать ... Изменение API-интерфейсов, используемых внешними людьми, не является чем-то легким, всегда компромиссным.Лучшие предложения приветствуются!

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