Testy akceptacyjne w pigułce.
-
Upload
future-processing -
Category
Technology
-
view
625 -
download
0
description
Transcript of Testy akceptacyjne w pigułce.
Testy Akceptacyjne w PigułceAutomatyzacja testów akceptacyjnych dla aplikacji web i mobile
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
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
Rozwiązanie
0Automatyzacja testowania bo przecież warto zlecić maszynie mało rozwijające, nużące i powtarzalne zadania i skupić się na ciekawszych problemach
Poziomy testów
Warstwy problemu
Implementacja
Środowisko
Zarządzanie
Implementacja
Architektura
Techniki i dobre
praktyki
Narzędzia
Narzędzia
Web & Web Mobile• WebDriver
Native Mobile• Robotium
Architektura
Opis przypadku
Warstwa pośrednia
Wywołania API
Opis Przypadku
Warstwa Pośrednia
Wywołania API
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
Techniki i Dobre Praktyki
Wstrzykiwania
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 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);
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"));}
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.
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.
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.
Środowisko
Kompletne
Zróżnicowane
Stabilne
Rozproszone
Środowisko Rozproszone
Master
Slave
Slave
Slave
Slave
Slave
Rozproszony Web
WebDriver Master
WebDriver Slave
WebDriver Slave
WebDriver Slave
WebDriver Slave
WebDriver Slave
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);
Rozproszony Mobile Web
Jenkins
WebDriver
WebDriver
WebDriver
WebDriver
WebDriver
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
Rozproszony Native Mobile
Jenkins Master
Jenkins Slave
Jenkins Slave
Jenkins Slave
Jenkins Slave
Jenkins Slave
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
Środowisko Zróżnicowane
Konfiguracje testowe
Przeglądarki
Urządzenia
Rozdzielczości
Systemy operacyjn
e
Zróżnicowany Web
PrzeglądarkiFirefox
Chrome
Opera
Internet Explorer 9
Internet Explorer 8
Zróżnicowany Web
0 Popularność przeglądarek...
Chrome44.06%
Internet Explorer22.08%
Firefox18.17%
Zróżnicowany Web
Systemy operacyjne
Windows 7
Windows Vista
Windows XP
Ubuntu 12.04
Mac OS X Lion
Zróżnicowany Web
0Popularność systemów operacyjnych...
Windows 744.72%
Windows XP38.31%
Zróżnicowany Mobile Web
UrządzeniaAndroid
iPhone
Black Berry
Rzeczywiste
Emulatory
Zróżnicowany Mobile Web
Wersje Oprogramowania
Android 2.2
Android 2.3.X
Android 4.0.X
Android 3.X
iPhone 5.X
Zróżnicowany Native Mobile
Android
Emulatory
Rootowane Urządzenia
Zróżnicowany Native Mobile
Wersje
Oprogramowania
Android 2.2
Android 2.3.X
Android 4.0.X
Android 3.X
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%
Środowisko Stabilne
Test Run
Test Run
Test Run
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ń
Zarządzanie
Konfiguracje testowe
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>|
Zarządzanie Przypadkami Testowymi
0TestLink
Zarządzanie Przypadkami Testowymi
0Behave for JIRA
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
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
Zarządzanie Rezultatami Testów
0Raporty
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());
}}
}}