Cucumber – obsługa kilku sesji
Andrzej Śliwa - 1 marca 2010
Większość standardowych zadań związanych z testowaniem aplikacji jest w prosty sposób do zrealizowania z użyciem domyślnych kroków Cucumbera. Z założenia Cucumber służy do testów funkcjonalnych, lecz można go również zastosować do realizacji „testów” integracyjnych. Chodzi mi o taką sytuację kiedy chcemy przetestować w jednym scenariuszu interakcje pomiędzy działaniami kilku użytkowników, szczególnie gdy z jakiś powodów nie możemy używać ponownego wylogowania i zalogowania, gdyż wpływa ono w jakiś sposób na stan aplikacji. Na ten problem zwrócił mi uwagę mój kolega Michał Papis
W przypadku standardowych wbudowanych mechanizmów testowania możemy skorzystać z bloku open_session:
def login(user)
open_session do |sess|
sess.extend(CustomDsl)
u = users(user)
sess.https!
sess.post "/login", :username => u.username, :password => u.password
assert_equal '/welcome', path
sess.https!(false)
end
end
Lecz w przypadku cucumbera, który opiera się o poszczególne definicje kroków konieczne jest znalezienie rozwiązania pasującego do formy w jakiej tworzone są scenariusze.
W tym celu przygotowałem taki oto plik kroków (mizzeria_steps.rb):
module ActionController
module Integration
class Session
def switch_session_by_name(name)
if @sessions_by_name.nil?
@sessions_by_name = { :default => @response.session.clone }
end
@sessions_by_name[name.to_sym] ||= @sessions_by_name[:default].clone
@response.session = @sessions_by_name[name.to_sym]
end
end
end
end
Given /^session name is "([^\"]*)"$/ do |name|
switch_session_by_name(name)
end
Użycie tego mechanizmu (multiple session) jest trywialnie proste, wykonujemy następujący krok:
Given session name is "new user"
W tym przypadku tworzona jest nazwana sesja która jest nie zależna od innych (również od domyślnej). Dostęp do domyślnej nazwanej sesji odbywa się poprzez użycie nazwy: default
Given session name is "default"
Jak to mówią małe proste i funkcjonalne rozwiązanie, a cieszy 🙂
Lektura obowiązkowa:
http://guides.rubyonrails.org/testing.html#integration-testing-examples
http://andrzejsliwa.com/2010/03/01/cucumber-obsluga-kilku-sesji/
Andrzej Śliwa
Programista, pasjonat, scrum master, konsultant IT.
Pasjonuje się językami dynamicznymi, metodami wytwarzania oprogramowania oraz metodologiami prowadzenia projektów, szczególnie dbający o jakość wytwarzanych rozwiązań. Obecnie koncentruje się na rozwoju w zakresie wykorzystywania frameworka Ruby on Rails, skalowanych rozwiązań, cloud computingu i języków funkcyjnych.
Comments