Upload
infoshare
View
524
Download
5
Embed Size (px)
Citation preview
122.05.2014
Testy automatyczne aplikacji webowych oparte o Selenium -
- dobre praktyki
Michał Sierzputowski
Testowanie Aplikacji
http://www.shapia.com/images/software-testing.jpg
3
Automatyzacja Testów
http://www.mpa-rm.pl/images/Industrial-Automation.jpg
Dostarczenie szybkiej informacji zwrotnej
Zapewnienie możliwości wprowadzania bezpiecznych zmian
Automatyzacja testów to proces ciągły
4
Dobre testy automatyczne?
• Ustalenie stnadardów kodowania
• Dabanie o “czysty kod” – clean code
• Stosowanie wzorców projektowych
• Inspekcje kodu – code review
• Wersjonowanie kodu
http://loewy.com/wp-content/uploads/2012/09/mainfeature-waterlogic.jpg
5
Selenium
6
Prosty skrypt testowyWebDriver driver = new FirefoxDriver();
driver.get("http://www.allagro.pl");
WebElement login_link = driver.findElement(By.linkText("zaloguj"));
login_link.click();
WebElement user_name = driver.findElement(By.id("userForm_login"));
user_name.sendKeys("Jan_Kowalski");
WebElement password = driver.findElement(By.id("userForm_password"));
password.sendKeys("TajneHaslo1");
WebElement login_button = driver.findElement(By.id("login”]));
login_button.click();
WebElement user_link = driver.findElement(By.linkText("Jan Kowalski"));
assertThat(user_link.isDisplayed(),is(true));
driver.quit();
7
Oddzielenie biznesu od techniki
Page Objects
typeUsername(String) typePassword(String)clickLogin()
LoginPageC
f
m
HomePageSEARCH_BOXSEARCH_BUTTONLOGIN_BUTTONUSER_LINK typeSearch(String) tclickSearch(String)clickLogin()getUser()
USER_NAME PASSWORD LOGIN_BUTTON
8
Skrypt z Page Object’ami
LoginTest
homePage.clickLoginLink(); loginPage.typeUsername("Jan_Kowalski");loginPage.typePassword("TajneHaslo1");loginPage.clickLogin();
assertThat(homePage.getUser().equals("JanKowalski”),is(true));
homePage.clickLoginLink(); loginPage.typeUsername("Jan_Kowalski");
.typePassword("TajneHaslo1");
.clickLogin();
assertThat(homePage.getUser().equals("JanKowalski”),is(true));
9
Delegaty
LoginDelegate
loginAs(username, password)
typeUsername(user)typePassword(password)clickLogin()
10
Zależności
LogingDelegate
HomePage Search ResultsPage
WebDriver
LoginPage
SearchDelegate
TestClass
11
Wstrzykiwanie zależności
Dependecy Injection
• Bardziej czytelne testy
• Łatwiejsze do zarządzania
• Szybsze i prostsze do tworzenia
https://elearning.industriallogic.com/gh/albums/wrappersAndWalkers/injector/images/big-tomatoes.gif
12
Logowanie informacji
Logowanie w testach
Test
Test
Test Logowanie
13
Programowanie aspektowe - AOP
Page Object
Page Object
Page Object
Page Object
Page Object
Page Object
Logowanie
Tracing Aspect
Logowanie informacji