Asercje w Selenium

W załączonych fragmentach kodu z poprzednich lekcji, na pewno zauważyłeś instrukcje o nazwie Assert. Właśnie o szeroko pojętych asercjach będzie traktowała dzisiejsza lekcja. Rozłożymy sobie Asercje na czynniki pierwsze. Omówimy przykłady użycia, a na końcu sami napiszemy kilka instrukcji z wykorzystaniem zdobytej dzisiaj wiedzy.

Co to jest Asercja?

Asercja – jest to konstrukcja programistyczna, która umożliwia weryfikację poprawności dowolnej wartości. Mechanizm weryfikacji w najprostszej formie działa bardzo prosto: bierze dwie wartości – rzeczywisty wynik oraz spodziewany wynik i porównuje te wartości ze sobą, zwracając odpowiedni wynik.

Dlaczego Asercje są tak ważne w automatyzacji testów?

Przeprowadzanie testów bez możliwości weryfikacji wyników jest bezcelowe. Tylko mechanizmy weryfikacyjne mogą dać nam odpowiedz, czy dany przypadek testowy został zaliczony bądź nie.

Oczywiście wszelkie porównania czy weryfikacje, możemy również wykonywać ręcznie.. ale przecież uczymy się automatyzować:)

 

 

 

To właśnie na podstawie Asercji możemy dać ostateczny feedback, czy testowane oprogramowanie działa zgodnie z założeniami, czy też nie.

 

 

 

Asercje w Selenium WebDriver dzielą się na dwa rodzaje

• Asercje twarde (Hard Assertions)

• Asercje miękkie (Soft Assertions)

Przedstawię teraz oba rodzaje asercji, a na końcu wyciągniemy wnioski dotyczące ich głównej różnicy.

Asercja Twarda (Hard Assert)

Kiedy warunek weryfikacyjny twardej asercji nie zostanie spełniony, wówczas asercja bezwzględnie zakończy działanie całego skryptu, zwróci nam wyjątek, oraz oznaczy test jako nieudany (status FAILED).

Asercja twarda to asercja, która zgłasza wyjątek AssertException – w przypadku niepowodzenia weryfikacji. W takim przypadku można obsłużyć błąd, używając bloku try-catch.

Asercje twarde warto więc stosować wszędzie tam, gdzie aplikacja nie może pozwolić sobie na żadne kompromisy w kontekście rezultatu działania testowanej funkcjonalności.

Przykład:

Wyobraźmy sobie, że realizujemy scenariusz testowy, który weryfikuje cały proces zakupowy (od kliknięcia w przycisku 'KUP TERAZ’, po przejście na stronę zakupową, wypełnienie formularza zakupowego i zrobienie przelewu).

Po kliknięciu przycisku 'KUP TERAZ’, aplikacja powinna nas bezwzględnie przenosić do podstrony, na której możemy dokonać zakupu wybranego produktu. Jeśli biznes ma się kręcić, to z pewnością oczekujemy , że ten przycisk zawsze i bezproblemowo będzie nas przenosił do strony zakupowej.

I właśnie np. dla takiego testu przycisku 'KUP TERAZ’, powinniśmy zastosować weryfikację twardą, ponieważ, jeśli przycisk nie zadziała właściwie (nie przeniesie nas na stronę zakupową), wówczas cały dalszy test nie ma sensu i na pewno zakończy się niepowodzeniem. Asercja twarda zwróci nam od razu błąd i zakończy działanie testu z wynikiem FAILED.

Definicja:

Assert.assertEquals(AktualnaWartość, OczekiwanaWartość);

Przykład asercji twardej, której zadaniem jest weryfikacja czy tytuł strony, na której się znajdujemy, jest zgodny z oczekiwanym (zapewne kojarzycie tę konstrukcję z poprzednich lekcji).

@Test
public void verifyTitle()
{
driver.get(http://www.selenium-shop.pl/);
String ActualTitle = driver.getTitle();
String ExpectedTitle = “Selenium Shop Automatyzacja Testów”;
Assert.assertEquals(ActualTitle, ExpectedTitle);
System.out.println(“Weryfikacja POPRAWNA”);
}

Asercja miękka

Nawet w przypadku, gdy warunek weryfikacyjny miękkiej asercji nie zostanie spełniony , asercja  nie zatrzyma dalszego wykonywania programu.

Mechanizm miękkiej asercji nie zgłasza wyjątku, gdy warunek asercji nie zostanie spełniony.
Dlatego należy bardzo ostrożnie implementować do kodu tego typu asercję, gdyż może zdarzyć się sytuacja, w której „przepuścimy” jakieś niewłaściwie działanie aplikacji.

Asercje miękkie należy stosować np. wtedy kiedy  wykonujemy w obrębie jednego scenariusz testowego wiele testów, ale tylko niektóre wpływają bezpośrednio na ogólną decyzję o stanie przypadku testowego.

Definicja:

softassert.assertEquals(AktualnaWartość, OczekiwanaWartość);


Przykład asercji miękkiej, której zadaniem jest weryfikacja czy tytuł strony, na której się znajdujemy jest zgodny z oczekiwanym.

@Test
public void verifyTitle()
{
driver.get(http://www.selenium-shop.pl/);
String ActualTitle = driver.getTitle();
String ExpectedTitle = “Selenium Shop Automatyzacja Testów”;
softassert.assertEquals(ActualTitle, ExpectedTitle);

}


Twarda asercja vs miękka asercja

Oba rodzaje asercji służą do tego samego: ich głównym zadaniem jest zwrócenie informacji dotyczącej przebiegu testu (PASS lub FAIL).

Należy zwrócić jednak uwagę na kluczową różnicę:

Twarda asercja w przypadku negatywnej weryfikacji, od razu zatrzyma działanie aplikacji i oznaczy dany test statusem niepowodzenia (FAILED).

Asercja miękka w przypadku negatywnej weryfikacji zachowa się nieco inaczej, ponieważ nie zatrzyma działa programu. Pozwala skryptowi nadal kontynuować dalszą pracę.


Rodzaje Asercji

Selenium WebDriver udostępnia nam wiele gotowych wariantów asercji. Poniżej lista wraz z przykładami zastosowania.

Assert Equals

Podstawowa i chyba najczęściej stosowana asercja.

Asercja Equals skupia się na porównaniu wartości oczekiwanej z wartością rzeczywistą (sprawdzany jest typ i wartość przekazanego parametru).
Obie wartości przekazywane są do asercji jako parametry. Jeśli oba parametry są identyczne, wówczas asercja kończy się ze statusem PASS (powodzenie) , w przeciwnym wypadku przypadek testowy zostanie oznaczony jak FAILED (niepowodzenie).

 

Przykład:

public void weryfikacjaTytułuStrony() {
driver = new ChromeDriver();
driver.get("http://www.selenium-shop.pl/");
Assert.assertEquals(“Selenium Shop Automatyzacja Testów“, driver.getTitle());
}

Assert Not Equals

Jak łatwo można wydedukować Assert Not Equals jest niejako przeciwieństwem Assert Equals.
Również podajemy do porównania dwie wartości : wartość oczekiwaną oraz wartość rzeczywistą. (sprawdzany jest typ i wartość przekazanego parametru)

Tym razem jednak otrzymamy status PASS, jeśli wartości nie są sobie równe, a status FAILED w przypadku, gdy wartości są sobie równe.

Przykład:

public void testCaseVerifyDate () {
String ankietaMenu = driver.findElement(By.linkText("ANKIETA")).getText();
Assert.assertNotEquals(ankietaMenu , "Szkolenia");
}


Assert True

Sprawdzenie, czy wskazany warunek jest prawdą (TRUE). W przypadku, gdy warunek nie jest prawdą, asercja zakończy działanie całego skryptu.

Przykład: (checkbox o id= 'odbiorOsobisty’  jest zaznaczony’)

public void weryfikacjaPrzyciskZaloguj() {
WebElement odbiorOsobistyCheckbox = driver.findElement(By.id(“odbiorOsobisty”));
Assert.assertTrue(odbiorOsobistyCheckbox.isSelected());
System.out.print(“Asercja POPRAWNA“);
}

Assert False

Przeciwieństwo wcześniej omawianej instrukcji Assert True.
Teraz sprawdzamy czy warunek jest fałszywy (wartość FALSE)

Przykład: (checkbox o id= 'odbiorOsobisty’  nie jest zaznaczony’) 

public void weryfikacjaPrzyciskZaloguj() {
WebElement odbiorOsobistyCheckbox = driver.findElement(By.id(“odbiorOsobisty”));
Assert.assertFalse(odbiorOsobistyCheckbox.isSelected());
System.out.print(“Asercja POPRAWNA“);
}

Assert Null

Weryfikacja czy wskazany obiekt ma wartość NULL.

Jeśli  asercja zwróci  NULL , to wynik całej asercji będzie PASS. W przeciwnym wypadku wynik będzie FAILED.

Przykład:

Przyjmijmy, że: 'loginInput’ to pole w statusie włączony, czyli bez atrybutu disabled.

@Test
 public void test() {
 Assert.assertNull(loginInput.getAttribute("disabled"));  
 } 

 

Wynik asercji  = NULL , cała weryfikacja = PASS

Assert Not Null

Przeciwieństwo Assert Null. Zatem ta asercja sprawdza, czy testowany obiekt nie ma wartości NULL.

Jeśli asercja zwróci wynik inny od NULL, wówczas weryfikacja będzie w statusie PASS. W przeciwnym wypadku (gdy wynik będzie NULL) weryfikacja będzie miała status FAILED.

Przykład:

Przyjmijmy, że: 'passwordInput’ to pole w statusie wyłączony, czyli z atrybutem disabled.

@Test 
public void test() {
Assert.assertNotNull(passwordInput.getAttribute("disabled"));
 }

Wynik asercji  = NOT NULL , cała weryfikacja = PASS

 


ZAPAMIĘTAJ!

Asercja – jest to konstrukcja programistyczna, która umożliwia weryfikację poprawności dowolnej wartości. Mechanizm weryfikacji działa bardzo prosto: bierze dwie wartości – rzeczywisty wynik oraz spodziewany wynik i porównuje te wartości ze sobą zwracając odpowiedni wynik.

Asercje w Selenium WebDriver dzielą się na dwa rodzaje:

• Asercje twarde (Hard Assertions)

• Asercje miękkie (Soft Assertions)

Asercja twarda to asercja, która zgłasza wyjątek AssertException – w przypadku niepowodzenia weryfikacji. W takim przypadku można obsłużyć błąd, używając bloku try-catch.

Nawet w przypadku, gdy warunek weryfikacyjny miękkiej asercji nie zostanie spełniony , asercja  nie zatrzyma dalszego wykonywania programu.

Rodzaje Asercji:

  • Assert Equals
  • Assert Not Equals
  • Assert True
  • Assert False
  • Assert Null
  • Assert Not Null

Notatka o autorze:

Zajmuję się testowaniem, zabezpieczaniem i zapewnianiem jakości oprogramowania od ponad 13 lat. Rozpocząłem swoją karierę od testów manualnych i analizy biznesowo-technicznej. Obecnie prowadzę firmę Quality Island, która zajmuje się szeroko pojętym testowaniem oprogramowania oraz szkoleniami dla przyszłych i obecnych testerów oprogramowania. Moją specjalnością są testy automatyczne aplikacji webowych oraz budowa procesów automatyzacji i robotyzacji. Od 8 lat prowadzę aktywnie szkolenia oraz konsultacje z tych tematów i wykonuję zlecenia dla firm trzecich jako konsultant, ekspert oraz audytor. Współpracuję również z firmami jako osoba do rekrutacji i weryfikacji technicznych. Interesują mnie głównie tematy związane z architekturą IT oraz zagadnienia DevOps/TestOps, ponieważ ściśle wiążą się z zapewnianiem jakości oprogramowania.

 

Tomasz Stelmach

CEO&Founder

 

0 komentarzy

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *