Sveti Đžogljavko, zaštitnik testera.

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: http://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. :)