Michał Sierzputowski -...

17
Zautomatyzuj swoje testy automatyczne oparte o Selenium Michał Sierzputowski

Transcript of Michał Sierzputowski -...

Zautomatyzuj swoje testy automatyczne oparte o Selenium

Michał Sierzputowski

Automatyzacja Testów - wprowadzenie

2http://www.mpa-rm.pl/images/Industrial-Automation.jpg

Dostarczanie szybkiej informacji zwrotnej

Zapewnianie możliwości wprowadzaniabezpiecznych zmian

Automatyzacja testów to proces ciągły

Podstawy testówautomatycznych

3

http://loewy.com/wp-content/uploads/2012/09/mainfeature-waterlogic.jpg

Ustalenie standardów kodowania

Dbanie o czysty kod (clean code)

Stosowanie wzorców projektowych

Inspekcje kodu (code review)

Wersjonowanie kodu

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

6

typeUsername(Strin

g)

typePassword(Strin

g)

clickLogin()

LoginPageC

f

m

HomePage

SEARCH_BOX

SEARCH_BUTTO

N

LOGIN_BUTTON

USER_LINK

typeSearch(String)

clickSearch(String)

clickLogin()

getUser()

USER_NAME

PASSWORD

LOGIN_BUTTON

By LOGIN_BUTTON= By.id(”login");

public void clickLogin(){driver.findElement(LOGIN_BUTTON).click();

}

Skrypt z Page Object’ami

LoginTest

homePage.clickLoginLink();

loginPage.typeUsername("Jan_Kowalski");

loginPage.typePassword("TajneHaslo1");

loginPage.clickLogin();

assertThat(homePage.getUser(),is("JanKowalski”));

7

homePage.clickLoginLink();

loginPage.typeUsername("Jan_Kowalski”)

.typePassword("TajneHaslo1”)

.clickLogin();

Delegaty

LoginDelegate

loginAs(username, password)

8

typeUsername(user)typePassword(password)clickLogin()

Zależności

9

LogingDelegate

HomePage SearchResultsPage

WebDriver

LoginPage

SearchDelegate

TestClass

Wstrzykiwanie zależności

Dependecy Injection

10

https://elearning.industriallogic.com/gh/albums/wrappersAndWalkers/injector/images/big-tomatoes.gif

private LoginPage loginPage;

private WebDriver driver;

private DriverFactory driverFactory;

this.driverFactory = new DriverFactory();

this.driver = driverFactory.getDriver();

this.loginPage = new LoginPage(driver);

@Inject

LoginPage loginPage

Generator kodu

11

http://static.comicvine.com/uploads/original/14/149681/3464500-

maxresdefault.jpg

Zarządzanie testami

Biblioteka dla testów jednostkowych

• Zarządzanie strukturą zestawu testów

• Definicja grupy testów

• Zależności między testami

• Priorytety

• Data Driven Testing

• Dodatkowe opisy testów

• Uruchamianie testów równolegle

• ...

12

http://www.robotshop.com/media/files/images/fischertechnik-super-cranes-large.jpg

@BeforeClass

@BeforeMethod

@Test

@AfterMethod

@AfterClass(alwaysRun=true)@Test(groups = {QUARANTINE, READ_ONLY,

DISABLED_ON_IE8} )

@Test(dependsOnMethods= “testCreateNewShoppingBasket”)

public void testDeleteItemFromBasket()

@Test(dataProvider = "provideNumbers”)

DataProvider(name = "provideNumbers")

{ 2, 5 },

{ 10, 110 },

{ -200, 210 }

<suite name="main" parallel="classes" thread-count="30" …>

@Test(priority=2)

@Test(description="Navigates to the admin page")

Przygotowanie środowiska

• Niezależne testy• Elastyczne i skalowalne rozwiązanie

• Wykorzystanie wewnętrznych serwisów testowanejaplikacji (SOAP, REST, ….)

• Baza danych

13

http://i.wp.pl/a/f/jpeg/30250/07-sprezyna-zabawka-600x513.jpeg

@BeforeClass

public void

prepareEnvironment(){

createTestOrganisation();

createTestWorker();

assignPermissionsToWorker(

);

}

@AfterClass

public void tearDown(){

deactivateOrganization();

}

Logowanie informacji

Logowanie w testach

14

Test

Test

TestLogowanie

Logowanie informacji

Programowanie aspektowe - AOP

15

Page Object

Page Object

Page Object

Page Object

Page Object

Page Object

Logowanie

Tracing Aspect

Podsumowanie

16

• Traktowanie projektu testowego jako projektu aplikacji

• Page Objects

• Delegaty

• Wstrzykiwanie zależności

• Generator kodu

• Zarządzanie testami

• Przygotowanie środowiska

• Logowanie

http://bigbackground.com/wp-content/uploads/2013/07/summer-nature-images1-1024x640.jpg

17

Pytania ?Dziękuję!

[email protected]

kainos.pl

michalsierzputowski