Postarajmy się jednak pójść o krok dalej.
Rozpoczynając od praktycznej strony tworzenie naszego projektu. Nie obędzie się bez przykładów podpartych kodem. Nauczymy się dobrych praktyk, no ale kto powiedział że nauka jest zła?
A więc zaczynajmy!
Poniższy tekst jest skrótowym przedstawieniem podstaw naszej pierwszej klasy testowej.
Zapraszamy jednak do zapoznania się z materiałem filmowym, w którym w ciągu kilku minut przedstawiamy skondensowaną wiedzę na temat klas zawierających testy, metod oraz podstawowych adnotacji potrzebnych na początku naszej drogi z projektem. W materiale filmowym znajdziecie również dodatkowy rozbudowany przykład pierwszych testów w naszym przykładowym środowisku z wykorzystaniem dobrych praktyk.
Jak już pamiętamy z pierwszej części naszego cyklu, aby rozpocząć pracę z naszym projektem musimy przeprowadzić prostą konfigurację naszego środowiska.
Jeśli nie pamiętacie jak przeprowadzić taką konfigurację, odsyłamy Was do naszego pierwszego materiału:
Rozpoczynając budowę naszego projektu będziemy na wstępie korzystać z elementów takich jak środowisko programistyczne InteliiJ, narzędzie Maven, biblioteka Selenium oraz biblioteka TestNG. Będzie to baza, która stopniowo powiększy się o dodatkowe elementy (biblioteki czy pluginy), które będą omawiane wraz z rozwojem frameworka testowego.
Materiały potrzebne do rozpoczęcia pracy możecie znaleźć tutaj:
- JDK - środowisko Java dla deweloperów
Wybieramy ostatnią stabilną wersję odpowiednią dla naszego systemu operacyjnego. W naszym przypadku będzie to nadal wersja 8.
- IntelliJ Community - środowisko programistyczne
https://www.jetbrains.com/idea/download/#section=windows
- Repozytorium MAVEN
- Biblioteka Selenium WebDriver:
https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java/3.8.1
- Chrome Driver - sterownik przeglądarki Chrome:
odnośnik do dependencji dla ostatniej stabilnej wersji - 2.33 [11.12.2017] https://chromedriver.storage.googleapis.com/index.html?path=2.33/
- TestNG:
https://mvnrepository.com/artifact/org.testng/testng/6.13.1
Testy, metody i adnotacje
Po przejściu do projektu udostępnionego w pierwszym materiale serii lub konfiguracji nowego projektu tworzymy nową klasę. Pamiętajmy, by po stworzeniu nowej klasy nie tworzyć metody main, gdyż będzie ona zbędna, jednak do tego tematu wrócimy przy okazji omawiania adnotacji @Test. Dla przykładu nazwijmy ją “LoginTests”, pamiętając o dobrych praktykach tworząc nazwę klasy zawsze rozpoczynamy od wielkiej litery, jeśli nazwa składa się z kilku fraz, każdą następną rozpoczynamy również z wielkiej litery, nie dodając odstępu pomiędzy nimi. Styl ten nazywany jest: “PascalCase”. Więcej na temat stylu możecie przeczytać tutaj >>
Następnie pomiędzy nawiasy zamknięcia i otwarcia naszej klasy wprowadzamy podstawowe adnotacje (@BeforeTest, @AfterTest, @Test) wraz z metodami.
Pamiętajmy, że tworząc metodę jej nazwę rozpoczynamy z małej litery, a każde następne słowo wchodzące w skład nazwy rozpoczynamy z wielkiej litery. Jest to różnica między tworzeniem nazwy klasy a metody, jednak dobrą praktyką jest znajomość i wykorzystanie konwencji nazewnictwa. Styl ten nazywany jest “CamelCase”. Więcej na temat stylu możecie przeczytać tutaj>> W naszym projekcie zastosujemy również tzw. styl wielbłądzi.
Pamiętajmy również o ważnej zasadzie - nazwa testu powinna przekazywać nam informację, jaki test będzie wykonywany, np. “LoginAsAdminTest”. Więcej o konwencjach nazewnictwa możecie przeczytać tutaj >>
Następnie pod adnotacją @BeforeTest wprowadzamy linię kodu odpowiedzialną za określenie ścieżki do naszego drivera (chromedriver.exe). Adnotacja @BeforeTest oznacza że metoda zostanie uruchomiona zanim zostanie uruchomiona jakakolwiek metoda testowa należąca do klas wewnątrz znacznika.
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class LoginTests { protected static WebDriver driver; @BeforeTest() public void beforeTest() { System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); } @AfterTest() public void afterTest() { driver.quit(); } @Test(priority = 0) public void successLoginAsAdminTest() { driver = new ChromeDriver(); driver.get("http://demo.testarena.pl/zaloguj"); driver.findElement(By.id("email")).sendKeys("administrator@testarena.pl"); driver.findElement(By.id("password")).sendKeys("sumXQQ72$L"); driver.findElement(By.id("login")).click(); assertEquals(driver.getTitle(),"Kokpit - TestArena Demo"); System.out.println("Poprawne logowanie"); } @Test(priority = 1) public void failLoginWithWrongPasswordTest() { driver = new ChromeDriver(); driver.get("http://demo.testarena.pl/zaloguj"); driver.findElement(By.id("email")).sendKeys("administrator@testarena.pl"); driver.findElement(By.id("password")).sendKeys("sum666"); driver.findElement(By.id("login")).click(); assertEquals(driver.getTitle(),"Logowanie - TestArena Demo"); System.out.println("Próba nieudana, błędne logowanie"); } }
Jak widzimy w powyższym przykładzie, wykorzystując omawiane praktyki, już od samego początku mogliśmy określić czytelną strukturę naszego projektu. Nieocenioną wartością jest również intuicyjność samej biblioteki TestNG. Na tym kończymy i zapraszamy tym samym do zapoznania się z materiałem filmowym, w którym przedstawiamy dodatkowy bardziej rozbudowany przykład naszej klasy testowej. Oczywiście z omówieniem dodatkowych dobrych praktyk przy rozbudowie naszej klasy testowej.
Już w następnej części rozbudujemy naszą klasę o kolejne adnotacje. Omówimy również, wykorzystując przykładowe asercje ściśle związane z naszymi testami. Zapraszamy do subskrypcji naszego kanału, by żaden materiał Was nie ominął >>
Trzymajcie się!
Autor: Krzysztof Kołodziejczyk
SPRAWDŹ TAKŻE |
---|
Akcja - automatyzacja! Część 1: Konfiguracja |
Akcja - automatyzacja! Część 2: JUnit / TestNG - porównanie |