Nadomak objektno orijentiranom raju
by Željko Filipin
Ovih dana sam uspio srediti testove baš onako kako sam oduvijek želio. Jednostavno izgaram od želje prenijeti iskustvo mladim testerima.
Legenda:
kod
# komentar
Možda se ova konfiguracijska datoteka čini nepotrebna, ako iznimno je korisna kad broj objekata poraste.
# yaml čak dopušta komentare!
# naravno, ovo je adresa aplikacije
# koju testiram
http_host: https://filipin.eu/
# a ovo je korisnik koji će žariti
# i paliti po aplikaciji
user:
name: Željko
password: iskušivač
# ovdje je skupljeno sve što treba
# za rad sa Internet Explorerom (IE)
require 'watir'
# ova dva reda omogućavaju upotrebu one simpatične
# assert(izraz_koji_treba_biti_istinit) metode
# (bit će još o tome riječi)
require 'test/unit/assertions'
include Test::Unit::Assertions
# ovdje je podrška za divne yaml konfiguracijske datoteke
require 'yaml'
=begin
Ovo je isto komentar u Ruby-ju.
U ovoj klasi su samo dvije metode, ali iznimno korisne.
contains_text? mi štedi vrijeme koje bi provodio u tipkanju.
Item.open_ie je sasvim duga priča.
Trebalo mi je nekoliko mjeseci dok nije sazorila.
IE je utrpan u varijablu klase @@ie.
Znači, da bi neka klasa mogla raditi s IE-om,
dovoljno je da joj klasa Item bude roditelj.
=end
class Item
def contains_text?(text)
assert(@@ie.contains_text(text),
"could not find text '#{text}'")
end
def Item.open_ie
@@ie = Watir::IE.new
@@ie.set_fast_speed
end
end
# sve aplikacije koje sam testirao
# traže da se korisnik prvo prijavi
class User < Item
def initialize(user, http_host)
@name = user['name']
@password = user['password']
@http_host = http_host
end
def go_to_log_in_page
text = 'Please log in.'
unless @@ie.contains_text(text)
@@ie.goto("#{@http_host}login.aspx")
contains_text?(text)
end
end
def log_in
go_to_log_in_page
@@ie.textField(:id, 'name').set(@name)
@@ie.textField(:id, 'password').set(@password)
@@ie.button(:value, 'Login').click
contains_text?("Logged in as #{@name}.")
end
end
# zgrabi one podatke iz konfiguracijske datoteke
config = YAML::load(File.open('config.yml'))
# napravi novog korisnika
user= User.new(config['user'], config['http_host'])
# do sad smo samo nešto konfigurirali
# idemo testirati!
# otvori IE!
Item.open_ie
# prijavi korisnika u aplikaciju!
user.log_in
Što dalje? Bit će ovih dana. :)
tags: code - hrvatski - ruby