testy akceptacyjne w pigułce

48
T esty Akceptacyjne w Pigułce Automatyzacja testów akceptacyjnych dla aplikacji web i mobile

Upload: future-processing

Post on 25-Jan-2015

626 views

Category:

Technology


0 download

DESCRIPTION

Prezentacja Bartosza Szulca z II edycji konferencji Quality Excites.

TRANSCRIPT

Page 1: Testy akceptacyjne w pigułce

Testy Akceptacyjne w PigułceAutomatyzacja testów akceptacyjnych dla aplikacji web i mobile

Page 2: Testy akceptacyjne w pigułce

Klient

0Korporacja specjalizująca się w tworzeniu oprogramowania dla użytkowników transportu publicznego i prywatnego

0Bogaty portfel projektów, od aplikacji internetowych po aplikacje na urządzenia mobilne, webowe i natywne

Page 3: Testy akceptacyjne w pigułce

Problem

0Częste release jak poradzić sobie z zapewnieniem jakości dla kolejnych wersji oprogramowania ułatwiającego korzystanie z komunikacji miejskiej w Wielkiej Brytanii?

0Wiele klientów dedykowane rozwiązania pod wybrane obszary Wielkiej Brytanii o zbliżonej funkcjonalności

0Wiele aplikacji wachlarz implementacji... od aplikacji internetowych po aplikacje internetowe mobilne oraz natywne mobilne

Page 4: Testy akceptacyjne w pigułce

Rozwiązanie

0Automatyzacja testowania bo przecież warto zlecić maszynie mało rozwijające, nużące i powtarzalne zadania i skupić się na ciekawszych problemach

Page 5: Testy akceptacyjne w pigułce

Poziomy testów

Page 6: Testy akceptacyjne w pigułce

Warstwy problemu

Implementacja

Środowisko

Zarządzanie

Page 7: Testy akceptacyjne w pigułce

Implementacja

Architektura

Techniki i dobre

praktyki

Narzędzia

Page 8: Testy akceptacyjne w pigułce

Narzędzia

Web & Web Mobile• WebDriver

Native Mobile• Robotium

Page 9: Testy akceptacyjne w pigułce

Architektura

Opis przypadku

Warstwa pośrednia

Wywołania API

Page 10: Testy akceptacyjne w pigułce

Opis Przypadku

Page 11: Testy akceptacyjne w pigułce

Warstwa Pośrednia

Page 12: Testy akceptacyjne w pigułce

Wywołania API

Page 13: Testy akceptacyjne w pigułce

Ograniczenia

0Co z osobami, które nie mają doświadczenia w programowaniu... Czy oni mogą tworzyć automatyczne skrypty?

0Przy dobrej architekturze mogą tworzyć automatyczne przypadki testowe, skorzystać ze stworzonych kroków testowych

Page 14: Testy akceptacyjne w pigułce

Techniki i Dobre Praktyki

Wstrzykiwania

Page 15: Testy akceptacyjne w pigułce

Page Objects

0Niech nasza strona bedzie zbudowana z komponentów, obiektów, specjalizujących się w wybranych funkcjach

HomePage*SearchPane

- (void) search(String term)*ResultsPane

- (Collection<SearchResult>) getResults()

Page 16: Testy akceptacyjne w pigułce

Page Factory

0 Zamiast ręcznie wyszukiwać elementy użyj czytelnych anotacji

@FindBy(how = How.NAME, using = "q")private WebElement searchBox;

0 Skorzystaj z opóźnionego wyszukiwania przy AJAX

ElementLocatorFactory finder = new AjaxElementLocatorFactory(

this.driver, TIMEOUT);PageFactory.initElements(finder, this);

Page 17: Testy akceptacyjne w pigułce

Loadable Components0 Niech twoje narzędzie samo zarządza wczytywaniem odpowiednich PageObjects i

sprawdzaniem ich poprawności

@Overrideprotected void load() {

driver.get("http://code.google.com/p/selenium/issues/entry");}

@Overrideprotected void isLoaded() throws Error {

String url = driver.getCurrentUrl();assertTrue("Not on the issue entry page: " + url,

url.endsWith("/entry"));}

Page 18: Testy akceptacyjne w pigułce

Data Driven Testing

0Generuj nowe dane testowe z różnych podzbiorów, testuj swoje oprogramowanie zbiorami rozmytymi, nie popadaj w rutynę! Staraj sie tworzyć unikalne zbiory testowe, by jeszcze bardziej uniezależnić swoje testy.

Page 19: Testy akceptacyjne w pigułce

Wstrzykiwanie kontekstu

0Korzystaj z narzędzi umożliwiających zarządzanie kontekstem poprzez wstrzykiwanie. Wstrzykuj inormacje o środowisku testowym, wstrzykuj informacje o testowanym serwisie, dane testowe, reguły tworzenia obiektów, etc.

Page 20: Testy akceptacyjne w pigułce

Set up & Tear down

0Korzystaj z Set up i Tear down do generacji unikalnych danych testowych i tworzenia odpowiedniej konfiguracji bazy danych i innych zależności, dzięki czemu będziesz w stanie tworzyć testy niezależne, które będziesz w stanie uruchomić jednocześnie na wielu maszynach.

Page 21: Testy akceptacyjne w pigułce

Środowisko

Kompletne

Zróżnicowane

Stabilne

Rozproszone

Page 22: Testy akceptacyjne w pigułce

Środowisko Rozproszone

Master

Slave

Slave

Slave

Slave

Slave

Page 23: Testy akceptacyjne w pigułce

Rozproszony Web

WebDriver Master

WebDriver Slave

WebDriver Slave

WebDriver Slave

WebDriver Slave

WebDriver Slave

Page 24: Testy akceptacyjne w pigułce

Rozproszony Web

0WebDriver Grid2

Konfiguracja masterajava -jar selenium-server-standalone-2.14.0.jar -role hub

Konfiguracja slavejava -jar selenium-server-standalone-2.14.0.jar -role node  -hub http://localhost:4444/grid/register

Nawiązanie połączeniaWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

Page 25: Testy akceptacyjne w pigułce

Rozproszony Mobile Web

Jenkins

WebDriver

WebDriver

WebDriver

WebDriver

WebDriver

Page 26: Testy akceptacyjne w pigułce

Rozproszony Mobile Web

0 WebDriver Android

Instalacja i inicjalizacjaadb -s <serialId> -e install -r  android-server.apk

adb -s <serialId> shell am start -a android.intent.action.MAIN -n org.openqa.selenium.android.app/.MainActivity

adb -s <serialId> forward tcp:8080 tcp:8080

Page 27: Testy akceptacyjne w pigułce

Rozproszony Native Mobile

Jenkins Master

Jenkins Slave

Jenkins Slave

Jenkins Slave

Jenkins Slave

Jenkins Slave

Page 28: Testy akceptacyjne w pigułce

Rozproszony Native Mobile

0 Jenkins Master-Slave

1. Przyłączanie Slave2. Konfiguracja Środowiska Developerskiego3. Stworzenie Joba na Jenkinsie wywoływanego na

konkretnym Slave4. Oskryptowanie Joba o tworzenie instancji emulatora

i zbieranie wyników testów z emulatora

Page 29: Testy akceptacyjne w pigułce

Środowisko Zróżnicowane

Konfiguracje testowe

Przeglądarki

Urządzenia

Rozdzielczości

Systemy operacyjn

e

Page 30: Testy akceptacyjne w pigułce

Zróżnicowany Web

PrzeglądarkiFirefox

Chrome

Opera

Internet Explorer 9

Internet Explorer 8

Page 31: Testy akceptacyjne w pigułce

Zróżnicowany Web

0 Popularność przeglądarek...

Chrome44.06%

Internet Explorer22.08%

Firefox18.17%

Page 32: Testy akceptacyjne w pigułce

Zróżnicowany Web

Systemy operacyjne

Windows 7

Windows Vista

Windows XP

Ubuntu 12.04

Mac OS X Lion

Page 33: Testy akceptacyjne w pigułce

Zróżnicowany Web

0Popularność systemów operacyjnych...

Windows 744.72%

Windows XP38.31%

Page 34: Testy akceptacyjne w pigułce

Zróżnicowany Mobile Web

UrządzeniaAndroid

iPhone

Black Berry

Rzeczywiste

Emulatory

Page 35: Testy akceptacyjne w pigułce

Zróżnicowany Mobile Web

Wersje Oprogramowania

Android 2.2

Android 2.3.X

Android 4.0.X

Android 3.X

iPhone 5.X

Page 36: Testy akceptacyjne w pigułce

Zróżnicowany Native Mobile

Android

Emulatory

Rootowane Urządzenia

Page 37: Testy akceptacyjne w pigułce

Zróżnicowany Native Mobile

Wersje

Oprogramowania

Android 2.2

Android 2.3.X

Android 4.0.X

Android 3.X

Page 38: Testy akceptacyjne w pigułce

Zróżnicowany Native Mobile

0 Popularność wersji systemu Android...

4.2.x Jelly Bean1.6%

4.1.x Jelly Bean14.9%

4.0.x Ice Cream Sandwich28.6%

Page 39: Testy akceptacyjne w pigułce

Środowisko Stabilne

Test Run

Test Run

Test Run

Page 40: Testy akceptacyjne w pigułce

Stabilne Środowisko

0 Przydatne narzędzia0 PsExec – zdalna kontrola nad maszynami z systemem

Windows z poziomu linii poleceń 0 Ssh – zdalna kontrola nad maszynami z systemem Linux z

poziomu linii poleceń0 CCleaner – czyszczenie cache i historii aplikacji, przeglądarek,

systemu operacyjnego0 VMRun – zdalna kontrola nad maszynami VMWare,

restartowanie, przywracanie obrazów, z poziomu linii poleceń

0 Adb – kontrola nad emulatorami Androida z poziomu linii poleceń

Page 41: Testy akceptacyjne w pigułce

Zarządzanie

Konfiguracje testowe

Page 42: Testy akceptacyjne w pigułce

Zarządzanie Przypadkami Testowymi

0 Scenariusze w BDD - Cucumber

Feature: As a user I want to find places and nearby stops

@web @mobileScenario Outline: As a user I want to places matching my choice

Given I navigated to the home pageWhen I search for <place> from the home pageThen the following list of matched places is returned| name | postcode || <first-name> | <first-postcode> || <second-name> | <second-postcode>|| <third-name> | <third-postcode> || <fourth-name> | <fourth-postcode>|

Page 43: Testy akceptacyjne w pigułce

Zarządzanie Przypadkami Testowymi

0TestLink

Page 44: Testy akceptacyjne w pigułce

Zarządzanie Przypadkami Testowymi

0Behave for JIRA

Page 45: Testy akceptacyjne w pigułce

Zarządzanie Konfiguracjami Testowymi

0 Narzędzia0 Maven0 PicoContainer0 Jenkins

0 Technika0 Parametryzowanie0 Wstrzykiwanie

0 Rezultat0 Możliwość definiowania konfiguracji testowej w pliku XML0 Możliwość uruchamiania testów dla odpowiedniej konfiguracji z

poziomu lini poleceń0 Rozszerzalność konfiguracji0 Definicje uruchomień dla różnych konfiguracji

Page 46: Testy akceptacyjne w pigułce

Zarządzanie Harmonogramem Testów

0Narzędzia0 Jenkins

0Technika0 Nasłuchiwanie na wykonanie projektu nadrzędnego0 Wykonywanie z zadaną częstotliwością

0Rezultat0 Okresowa kontrola jakości projektu

Page 47: Testy akceptacyjne w pigułce

Zarządzanie Rezultatami Testów

0Raporty

Page 48: Testy akceptacyjne w pigułce

Zarządzanie Rezultatami Testów

0 Zrzuty ekranów

@Afterpublic void closeDriver(ScenarioResult scenario) {

if (scenario.isFailed()) {captureScreenshot();

}

if (!takenScreenshots.isEmpty()) {for (byte[] screenshot : takenScreenshots) {

try {scenario.embed(screenshot, IMAGE_PNG);

} catch (WebDriverException somePlatformsDontSupportScreenshots) {System.err.println(somePlatformsDontSupportScreenshots.getMessage());

}}

}}