testy akceptacyjne w pigułce

Post on 25-Jan-2015

628 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Prezentacja Bartosza Szulca z II edycji konferencji Quality Excites.

TRANSCRIPT

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());

}}

}}

top related