2009-07-25 2 views
6

Привет, У меня нет никакого интерфейса в моем приложении. Я готов выпустить только RESTful API, который может использоваться разными клиентами. Любые указатели, как мне перейти к тестированию огурца? Каждое действие в контроллере генерирует только XML-поток. Любые указатели или предложения?Тестирование RESTful API с огурцом в лицевой части менее прикладной

ответ

7

Я думаю, что Webrat больше, чем вам нужно. Для тестирования XML-каналов вам не нужен симулятор браузера, такой как Webrat, который будет загружать страницы и анализировать все разметки (ссылки, формы и т. Д.), Когда у вас действительно нет HTML-страниц.

Вам скорее нужно что-то вроде Curl (http://curl.haxx.se) или Curb (на rubyforge, которые являются рубиновыми связями для Curl), или Patron (на rubyforge).

Эти библиотеки могут создавать заголовок запроса по вашему вкусу (например, устанавливать Content-Type, выбирать между GET PUT POST DELETE HEAD и т. Д.) И получать ответ и, вероятно, после 302 перенаправления при необходимости.

Ответ, возвращенный, может быть затем преобразован в объект XML, а XML-парсеры, доступные для Ruby, могут использоваться для проверки вывода. Кроме того, вы можете писать классы XMLMapping (на rubyforge) для преобразования вывода XML в объекты Ruby и проверки их атрибутов и т. Д. Это намного чище, ИМХО.

+0

Хорошо Это было действительно полезно. Я использую Curb и XMLMapping для тестирования своего приложения. Он работает очень хорошо, за исключением некоторого базового грязного кода. Но я думаю, что у меня может быть какой-то грязный код в тестах. – Waseem

2

Как только вы установили маршруты RESTful, вы сможете использовать Webrat для посещения различных маршрутов. Затем вы можете проверить, что каждый маршрут возвращает XML, который соответствует вашим ожиданиям.

Вот блог, который описывает, как проверить вывод XML в RSpec: Testing XML output

Webrat является обезглавленным браузером, который просто означает, что вы можете имитировать браузер без необходимости открыть реальный браузер, как FireFox на вашем разработка машина. Это означает, что вы можете просто ввести что-то вроде «посещать» пользователей/»в свои определенные шаги и имитировать пользователя, обращающегося к вашему приложению.

И, наконец, Pragmatic book on RSpec (все еще находится в стадии бета-тестирования) - отличный ресурс о том, как использовать Cucumber, Webrat и RSpec вместе и управлять разработкой приложений с помощью BDD.

+0

Спасибо :) У меня нет какого-либо переднего конец моего приложения, которое означает, что если у меня нет кнопки «Удалить» доступна для уничтожения конкретного ресурса. Теперь AFAIK Webrat не позволяет вам запрашивать определенный URL-адрес с определенным HTTP-глаголом (GET, POST и т. Д.). Как мне перейти к этой проблеме? Я могу сделать это легко с Rspec, но он больше не поддерживает «Истории пользователей».Это другой вопрос в его собственном. :) – Waseem

+0

Вы можете имитировать метод GET, просто посетив определенный URL-адрес. Чтобы имитировать глаголы PUT или DELETE, вы должны иметь возможность использовать set_hidden_field «_method», «PUT» или set_hidden_field «_method», «DELETE» перед посещением ссылки. Я еще не пробовал это. –

+0

Документация set_hidden_field для webrat. Он говорит, что «он проверяет, что на текущей странице существует скрытое поле и задает значение для заданного параметра». Поскольку у меня нет какого-либо интерфейса для моего приложения, у меня нет никаких скрытых полей или форм_поля или кнопок для взаимодействия. Я думаю, мне нужен способ, с помощью которого я могу запросить разные URL-адреса для доступа с различными HTTP-глаголами. что-то вроде this, но которое может быть автоматизировано. – Waseem

9

Функция webrat принимает http_method как второй параметр. Вы также можете проверить свои API, как в следующем правиле огурца:

When /^I restfully delete (?:|the)user "([^\"]*)"$/ do |login| 
    visit(path_to("user \"#{login}\" page"), :delete) 
end 
0

Я пытался сделать это и застрял в одной из основных проблем с restful_authentication (с использованием AASM, один из внутренней модели restful_auth кажется) и получили к этому решению, чтобы войти:

Given /^I am logged in with a new account$/ do 
    login = "test" 
    @current_user = User.new(
    :login => login, 
    :password => 'generic', 
    :password_confirmation => 'generic', 
    :email => "#{login}@example.com", 
    :state => "active" 
    ) 
    @current_user.save 
    x = User.find_by_login(login) 
    x.state = "active" 
    x.save! 

    visit "/login" 
    fill_in("login", :with => login) 
    fill_in("password", :with => 'generic') 
    click_button 
    response.body.should =~ /Logged in successfully/m 
end 

его на модули чистого тестирования корпус, это демо концепции я нашел.

5

jayzes поделился своими примерами шагов по огурцам, используя Rack :: Test :: Methods, JSONpath, Nokogiri и т. Д., Чтобы написать тест для json/xml API, вы можете захотеть ссылаться и создавать больше для своих собственных шагов.

https://github.com/jayzes/cucumber-api-steps

Смежные вопросы