Mam pytanie odnośnie testowania aplikacji internetowych bo nie bardzo wiem czy dobrze zrozumiałem idee i metodykę.

Powiedzmy że mam prosty formularz rejestracji składający się z pól:
Email
Hasło
Powtórz hasło

Rozumiem, że teraz powinienem napisać testy sprawdzające:

  • podanie maila już istniejącego w bazie
  • podanie w polu z mailem czegoś w złym formacie np. "asdaf123"
  • pozostawienia obu pól pustych
  • złego powtórzenia hasła
  • poprawnego wypełnienia formularza

Do testowania wykorzystuję Selenium Webdriver - dokładnie API w Pythonie. Model przedstawiania strony Page Object. Całość wygląda tak, że stworzyłem 3 pliki:

  • testy.py - główny plik z klasą testującą
  • RegistrationPage.py - plik w której mapuję stronę z rejestracją na klasę i uzupełniam o przypadki testowe
  • Dictionary.py - plik ze słownikami, w których znajdują się "wartości" do testów jak też elementy strony

Główny plik:

 
import unittest, re, time
from selenium import webdriver
from selenium.webdriver import Firefox
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

# Import page object pattern
from registrationpage import RegistrationPage

testingPage = "http://www.example.com"

# Testowanie strony
class PageTest(unittest.TestCase):
    def setUp(self):
        # Utworzenie nowego profilu FireFoxa
        profile = FirefoxProfile()
        # Dodanie rozszerzenia umozliwiajacego obsluge bledow JS
        profile.add_extension("JSErrorCollector.xpi")
        # Utworzenie instancji FireFox na podstawie zdefiniowanego profilu
        self.driver = webdriver.Firefox(profile)
        self.driver.maximize_window()
        self.driver.get(testingPage)

		
    def test_unlogged_user_page(self):
       # Rejestracja
       Rejestracja = RegistrationPage(self.driver)
	   Rejestracja.DuplicateMail()
	   Rejestracja.WrongMailFormat()
	   Rejestracja.EmptyValues()
	   Rejestracja.WrongPasswordRepeat()
       Potwierdzenie = Rejestracja.RegistrationCorrect()
	   Potwierdzenie.Confirm()

    def tearDown(self):
        errors = self.driver.execute_script("return window.JSErrorCollector_errors.pump()")
        print "Liczba bledow JavaScript: %s" % errors.__len__()
        self.driver.close()

if __name__ == "__main__":
    try:
        suite = unittest.TestLoader().loadTestsFromTestCase(PageTest)
        unittest.TextTestRunner(verbosity=2).run(suite)
    except SystemExit: pass

Strona rejestracji:

 
from dictrionary import locators, values
from confirmpage import ConfirmPage

class RegistrationPage:

    def __init__(self, driver):
        self.driver = driver
        self.driver.get("http://www.example.com/rejestruj")

	#
	# Tutaj były inny przypadki związane z nieudaną rejestracją
	#
		
    def RegistrationCorrect(self):
        self.driver.find_element_by_id(locators["reg.mail"]).clear()
        self.driver.find_element_by_id(locators["reg.mail"]).send_keys(values["reg.mail"])
        self.driver.find_element_by_id(locators["reg.pass"]).clear()
        self.driver.find_element_by_id(locators["reg.pass"]).send_keys(values["reg.pass"])
        self.driver.find_element_by_id(locators["reg.pass2"]).clear()
        self.driver.find_element_by_id(locators["reg.pass2"]).send_keys(values["reg.passRepeat"])
	self.driver.find_element_by_id(locators["reg.pass2"]).submit()
        # Poprawna rejestracja
        return ConfirmPage(self.driver)

Moje pytania

  1. Czy to co napisałem jest w jakiś sposób poprawne (nie chodzi stricte o kod ale ideę testów)?
  2. Czy funkcja test_unlogged_user_page może tak wyglądać czy każdy przypadek nieudanej rejestracji powinien być wydzielony osobno?
  3. Czy dobrze zrozumiałem metodę Page Object w odniesieniu do testowania za pomocą pakietu Selenium?

Niestety nigdzie nie znalazłem przykładu z kodem pełnego testu dla jakiejś funkcjonalności. Będę również wdzięczy za wszelkie uwagi i sugestie od osób zajmujących się testowaniem.