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 http://loewy.com/wp-content/uploads/2012/09/mainfeature-waterlogic.jpg 3
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 f LoginPage USER_NAME PASSWORD By LOGIN_BUTTON= By.id( login"); public void clicklogin(){ } HomePage SEARCH_BOX driver.findelement(login_button).click(); SEARCH_BUTTO LOGIN_BUTTON N m typeusername(strin g) typepassword(strin g) LOGIN_BUTTON USER_LINK typesearch(string) clicksearch(string) clicklogin() clicklogin() 6
Skrypt z Page Object ami LoginTest homepage.clickloginlink(); loginpage.typeusername("jan_kowalski"); loginpage.typeusername("jan_kowalski ) loginpage.typepassword("tajnehaslo1");.typepassword("tajnehaslo1 ) loginpage.clicklogin(); assertthat(homepage.getuser(),is("jankowalski )); 7
Delegaty LoginDelegate loginas(username, password) typeusername(user) typepassword(password) clicklogin() 8
Zależności TestClass LogingDelegate SearchDelegate LoginPage 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); https://elearning.industriallogic.com/gh/albums/wrappersandwalkers/injector/images/big-tomatoes.gif 10
Generator kodu http://static.comicvine.com/uploads/original/14/149681/3464500-11
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... @BeforeClass @BeforeMethod @Test(dependsOnMethods= testcreatenewshoppingbasket public void @Test(priority=2) @AfterMethod testdeleteitemfrombasket() @Test(groups = {QUARANTINE, READ_ONLY, @Test(dataProvider @AfterClass(alwaysRun=true) = "providenumbers ) DISABLED_ON_IE8} ) DataProvider(name = "providenumbers") @Test(description="Navigates to the admin page") { 2, 5 }, <suite name="main" parallel="classes" thread-count="30" > { 10, 110 }, { -200, 210 } http://www.robotshop.com/media/files/images/fischertechnik-super-cranes-large.jpg 12
Przygotowanie środowiska Niezależne testy Elastyczne i skalowalne rozwiązanie @BeforeClass public void prepareenvironment(){ createtestorganisation(); @AfterClass public void teardown(){ deactivateorganization(); } createtestworker(); assignpermissionstoworker( ); } Wykorzystanie wewnętrznych serwisów testowanej aplikacji (SOAP, REST,.) Baza danych http://i.wp.pl/a/f/jpeg/30250/07-sprezyna-zabawka-600x513.jpeg 13
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 http://bigbackground.com/wp-content/uploads/2013/07/summer-nature-images1-1024x640.jpg 16
Pytania Dziękuję!? michalsierzputowski m.sierzputowski@kainos.com kainos.pl 17