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