Zautomatyzuj swoje testy automatyczne oparte o Selenium

Transkrypt

Zautomatyzuj swoje testy automatyczne oparte o Selenium
Michał Sierzputowski
Zautomatyzuj swoje testy
automatyczne oparte o Selenium
Automatyzacja Testów - wprowadzenie
Dostarczanie szybkiej informacji zwrotnej
Zapewnianie możliwości wprowadzania
bezpiecznych zmian
Automatyzacja testów to proces ciągły
2
http://www.mpa-rm.pl/images/Industrial-Automation.jpg
Podstawy testów
automatycznych
Ustalenie standardów kodowania
Dbanie o czysty kod (clean code)
Stosowanie wzorców projektowych
Inspekcje kodu (code review)
Wersjonowanie kodu
3
http://loewy.com/wp-content/uploads/2012/09/mainfeature-waterlogic.jpg
Selenium
4
Prosty skrypt testowy
WebDriver driver = new FirefoxDriver();
driver.get("http://www.aukcje.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();
5
Oddzielenie biznesu od techniki
Page Objects
C LoginPage
By LOGIN_BUTTON= By.id(”login");
HomePage
public void clickLogin(){
SEARCH_BOX
driver.findElement(LOGIN_BUTTON).click();
SEARCH_BUTTO
}
f USER_NAME
PASSWORD
LOGIN_BUTTON
m typeUsername(Strin
g)
typePassword(Strin
g)
clickLogin()
N
LOGIN_BUTTON
USER_LINK
typeSearch(String)
clickSearch(String)
clickLogin()
6
Skrypt z Page Object’ami
LoginTest
homePage.clickLoginLink();
loginPage.typeUsername("Jan_Kowalski”)
loginPage.typeUsername("Jan_Kowalski");
.typePassword("TajneHaslo1”)
loginPage.typePassword("TajneHaslo1");
.clickLogin();
loginPage.clickLogin();
assertThat(homePage.getUser(),is("JanKowalski”));
7
Delegaty
LoginDelegate
loginAs(username, password)
typeUsername(user)
typePassword(password)
clickLogin()
8
Zależności
TestClass
LogingDelegate
LoginPage
SearchDelegate
HomePage
SearchResultsPage
WebDriver
9
Wstrzykiwanie zależności
Dependecy Injection
private LoginPage loginPage;
private WebDriver driver;
private DriverFactory driverFactory;
@Inject
LoginPage loginPage
this.driverFactory = new DriverFactory();
this.driver = driverFactory.getDriver();
this.loginPage = new LoginPage(driver);
10
https://elearning.industriallogic.com/gh/albums/wrappersAndWalkers/injector/images/big-tomatoes.gif
Generator kodu
11
http://static.comicvine.com/uploads/original/14/149681/3464500-
Zarządzanie testami
Biblioteka dla testów jednostkowych
• Zarządzanie strukturą zestawu testów
• Definicja grupy testów
@BeforeClass
• Zależności między
testami
@BeforeMethod
• Priorytety
@Test
@Test(dependsOnMethods=
“testCreateNewShoppingBasket”
• Data Driven Testing
@AfterMethod
public void@Test(priority=2)
testDeleteItemFromBasket()
@Test(groups
=
{QUARANTINE,
READ_ONLY,
@AfterClass(alwaysRun=true)
• Dodatkowe
opisy
testów
@Test(dataProvider
= "provideNumbers”)
DISABLED_ON_IE8} )
• Uruchamianie testów równolegle
• ...
<suite
DataProvider(name = "provideNumbers")
…
@Test(description="Navigates
to the admin page")
{ 2, 5 },
name="main"
{ 10, 110 }, parallel="classes" thread-count="30" …>
12
{ -200, 210 }
http://www.robotshop.com/media/files/images/fischertechnik-super-cranes-large.jpg
Przygotowanie środowiska
• Niezależne testy
• Elastyczne i skalowalne rozwiązanie
@BeforeClass
@AfterClass
public void
public void tearDown(){
prepareEnvironment(){
deactivateOrganization();
createTestOrganisation();
}
createTestWorker();
assignPermissionsToWorker(
);
}• Wykorzystanie wewnętrznych serwisów testowanej
aplikacji (SOAP, REST, ….)
• Baza danych
13
http://i.wp.pl/a/f/jpeg/30250/07-sprezyna-zabawka-600x513.jpeg
Logowanie informacji
Logowanie w testach
Test
Test
Test
Logowanie
14
Logowanie informacji
Programowanie aspektowe - AOP
Page Object
Page Object
Page Object
Page Object
Page Object
Page Object
Tracing
Aspect
Logowanie
15
Podsumowanie
• Traktowanie projektu testowego jako projektu aplikacji
• Page Objects
• Delegaty
• Wstrzykiwanie zależności
• Generator kodu
• Zarządzanie testami
• Przygotowanie środowiska
• Logowanie
16
http://bigbackground.com/wp-content/uploads/2013/07/summer-nature-images1-1024x640.jpg
Pytania
?
Dziękuję!
michalsierzputowski
[email protected]
kainos.pl
17

Podobne dokumenty