Automatyczne testowanie aplikacji Android



Podobne dokumenty
Testowanie aplikacji mobilnych z ukierunkowaniem na system Android

n+1 sposobów na automatyczne testy aplikacji mobilnych WrotQA, webinar Łukasz Siudakiewicz Damian Szczurek Automation Test Engineer

Laboratorium Systemów Mobilnych. Wykład 1

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Automatyzacja Testowania w WEB 2.0

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Wstęp do testowania : Szymon Ramczykowski

METODY PROGRAMOWANIA

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Program szkolenia: Test Driven Development (TDD) using Spock or JUnit 5

Fragmenty są wspierane od Androida 1.6

Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Ty też jesteś testerem aplikacji mobilnych. Ewa Bielska, WrotQA, 8 czerwca 2016

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Słowa kluczowe jak góry lodowe

Testowanie aplikacji Java Servlets

Testy automatyczne. Korzystające z junit

Podstawowe elementy GUI - zadania

Techniki efektywnego testowania kodu dla programistów Java (Spock

TESTOWANIE OPROGRAMOWANIA

Programowanie poprzez testy z wykorzystaniem JUnit

[Android] Podstawy programowania

Michał Olejnik. 22 grudnia 2009

Ciągłe dostarczanie oprogramowania : kompletny przewodnik / Eberhard Wolff. Gliwice, cop Spis treści

Microsoft Test Manager

Google Web Toolkit Michał Węgorek ZPO 2009

Testowanie oprogramowania cz. 1

akademia androida Pierwsze kroki w Androidzie część I

Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)

Przegląd narzędzi do automatycznego testowania aplikacji internetowych. Jan Płoszczyca SKISR 2006

ZAPOZNANIE SIĘ Z TWORZENIEM

Platformy Technologiczne

Systemy operacyjne na platformach mobilnych

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Testowanie. Ryszard Beczek & Piotr Miłkowski 1 04/11/07

- dodaj obiekt tekstowy: /** Maciej */ Stage { title : "First JavaFX App" scene: Scene { width: 300 height: 300 content: [ ] } }

Programowanie aplikacji mobilnych

Android - wprowadzenie. Łukasz Przywarty

Fuzzing OWASP The OWASP Foundation Piotr Łaskawiec J2EE Developer/Pentester

Programowanie zespołowe

AUREA BPM HP Software. TECNA Sp. z o.o. Strona 1 z 7

WebAii Automation Framework

Wprowadzenie do testów jednostkowych. Marcin Dziedzic, Wiktor Żołnowski

Testowanie I. Celem zajęć jest zapoznanie studentów z podstawami testowania ze szczególnym uwzględnieniem testowania jednostkowego.

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

Mobilne aplikacje multimedialne

Technologie internetowe w programowaniu.

Politechnika Wrocławska

Google Testing. Radosław Smilgin, , TestWarez

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Android, wprowadzenie do SDK

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Programowanie warstwy klienta w aplikacji JavaEE

ZAUTOMATYZOWANE TESTY AKCEPTACYJNE DLA APLIKACJI INTERNETOWYCH W PROGRAMOWANIU STEROWANYM TESTAMI. Marian JURECZKO 1,2, Michał MŁYNARSKI 34

Architektura rozproszonych magazynów danych

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Programowanie obiektowe

Michał Sierzputowski. Zautomatyzuj swoje testy automatyczne oparte o Selenium

Automatyzacja testów aplikacji webowych w Selenium podstawy. Natalia Krawczyk

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Aplikacje RMI Lab4

Czym jest Android Architektura systemu Cechy platformy Android

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Program szkolenia: JavaScript Craftsmanship

Obsługa SMS i telefonii

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP002017_ Laboratorium 11 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Programowanie kontraktowe w Javie

Programowanie obiektowe

Systemy operacyjne na platformach mobilnych

akademia androida Intencje oraz URI część III

Sexy unit testy. czyli o kilku praktykach w testach jednostkowych

Mechanizm powiadomień

Instalujemy środowisko. Hello World! Odczyt/zapis informacji do komponentów na formie. onclick()

Tworzenie cross-platformowych aplikacji w Xamarin.Forms

Android pierwsza aplikacja

Podstawowe elementy GUI - zadania

Testowanie jednostkowe. Jacek Starzyński, ZETiIS PW

Warsztat: "Automatyzacja testów (JAVA) - od podstaw"

Testowanie II. Cel zajęć. Pokrycie kodu

Narzędzia podnoszące jakość procesu wytwarzania i wdrażania

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Wprowadzenie do systemu Android

Testowanie mutacyjne

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Akademia ADB Wykład I Praca w grupie i jakość kodu

Pytania i wyjaśnienia treści Specyfikacji Istotnych Warunków Zamówienia

Behavior Driven Development (BDD)

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Web frameworks do budowy aplikacji zgodnych z J2EE. Jacek Panachida

Transkrypt:

Automatyczne testowanie aplikacji Android Arkadiusz Konior! 4developers!! Warszawa 7 kwietnia 2014

Agenda Testowanie Android Testing Framework Robotium Espresso monkey monkeyrunner UIAutomator Robolectric Porówanie

Android Testing Framework monkeyrunner monkey uiautomator Espresso Robotium Robolectric Spoon Mockito FEST Android android-mock Selenium NativeDriver Appium MonkeyTalk Selendroid Scirocco Bot-Bot Switchboard Calabash BoundBox RoboSpock

Android Testing Framework monkeyrunner monkey uiautomator Espresso Robotium Robolectric Spoon Mockito FEST Android android-mock Selenium NativeDriver Appium MonkeyTalk Selendroid Scirocco Bot-Bot Switchboard Calabash BoundBox RoboSpock

Cel i koszty Zysk lepsza jakość aplikacji bezpieczeństwo zmian Koszty napisanie utrzymanie nauka narzędzi

ZYSK > KOSZT

Testowanie manualne czy automatyczne kiedy wdrożyć? prototyp? wersja beta? Testy proste, przejrzyste niezawodne, deterministyczne @FlakyTest(tolerance=3)! trwałe - odporne na drobne refaktoryzacje

Testy black-box vs white-box źródła vs. apk JVM vs. device czas wykonania kto pisze? developer? tester? jedna aplikacja czy wiele? recorder

TESTY URZĄDZENIE JVM

TESTY URZĄDZENIE JVM INSTRUMENTACJA Android testing framework Espresso Robolectric Robotium monkey monkeyrunner UIAutomator

Instrumentacja natywny mechanizm testowy systemu Android dostępne od API 1 jeden proces, różne wątki dwa projekty, dwa apk gradle plugin JUnit 3 zarządzamy cyklem życia testowanej aplikacji wymaga instalacji na urządzeniu/ emulatorze jednostkowe i funkcjonalne symulacja eventów z systemu i od użytkownika

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {! private MainActivity activity;! public MainActivityTest() { super(mainactivity.class); }! @Override protected void setup() throws Exception { super.setup(); setactivityinitialtouchmode(false); activity = getactivity(); }! public void testclick() { TextView viewbyid = (TextView) activity.findviewbyid(r.id.text); assertequals("hello world!", viewbyid.gettext());! Button button = (Button) activity.findviewbyid(r.id.button); TouchUtils.clickView(this, button); assertequals("clicked", viewbyid.gettext()); } }

Developer machine application.apk application-test.apk

Android device/emulator Developer machine process application.apk app.apk application-test.apk certyfikat zarządza app-test.apk am istrument

Budowanie projektu testowego

Uruchamianie testów

adb

Robotium testy funkcjonalne (black-box) rozszerzenie testów instrumentacyjnych brak źródeł aplikacji możliwość nagrywania testów - Robotium Recorder tekstowe znajdowanie elementów UI synchronizacja poprzez sleep/retry interakcja z UI ale nie z kodem aplikacji click +30 metod

Solo solo = new Solo(getInstrumentation(), getactivity()); solo.sendkey(solo.menu); solo.clickontext("more"); solo.clickontext("preferences"); solo.clickontext("edit File Extensions"); Assert.assertTrue(solo.searchText("rtf"));

Espresso http://gotgelato.com/espresso/ powstał w Google cienka warstwa nad instrumentacją (600 linii) wspiera wersje Android od 2.2 szybki, przejrzysty, łatwo rozszerzalny ręczna integracja Leave your waits, syncs, sleeps, and polls behind Hamcrest matchers

Espresso tylko to co może użytkownik - brak getview, getcurrentactivity contentdescription pokrycie testami 95% on view do stuff check result

public void testsayhello() { onview(withid(r.id.name_field)).perform(typetext("steve"));!! } onview(withid(r.id.greet_button)).perform(click()); onview(withtext("hello Steve!")).check(matches(isDisplayed()));

monkey command-line tool losowy strumień eventów adb shell monkey -p com.package -v 2000

monkey

monkeyrunner nie mylić z monkey natywny mechanizm testy funkcjonalne zapisane w skrypcie python monkeyrunner API: MonkeyRunner - połącznie z urządzeniem MonkeyDevice - instalacja, startowanie activity, keyboard, touch events MonkeyImage - screenshot

monkeyrunner asercje - porównanie zrzutów ekranu sameas click x,y jednocześnie wiele urządzeń testy regresyjne sterowane z komputera nie przez adb wrażliwe na zmianę wyglądu

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice device = MonkeyRunner.waitForConnection() device.installpackage('myproject/bin/myapplication.apk') package = 'com.example.android.myapplication' activity = 'com.example.android.myapplication.mainactivity' runcomponent = package + '/' + activity device.startactivity(component=runcomponent) device.press('keycode_menu', MonkeyDevice.DOWN_AND_UP) result = device.takesnapshot() result.writetofile('myproject/shot1.png','png')

UIAutomator DEVICE App1 App2 UIAutomator test Android framework InputManager AccessibilityService

UIAutomator dostępne w Android SDK od API 16 testy funkcjonalne (black-box) oparte na JUnit 3 test jako java jar działa jako niezależny program Accessibility Manager, Input Manager testowanie wielu aplikacji uiautomatorviewer - lepiej niż monkeyrunner android:contentdescription integracja z instrumentacją

public class LaunchSettings extends UiAutomatorTestCase {! public void testdemo() throws UiObjectNotFoundException { getuidevice().presshome(); UiObject allappsbutton = new UiObject(new UiSelector().description("Apps")); allappsbutton.clickandwaitfornewwindow(); UiObject appstab = new UiObject(new UiSelector().text("Apps")); appstab.click(); UiScrollable appviews = new UiScrollable(new UiSelector().scrollable(true)); appviews.setashorizontallist(); UiObject settingsapp = appviews.getchildbytext(new UiSelector().className(android.widget.TextView.class.getName()), "Settings"); settingsapp.clickandwaitfornewwindow(); UiObject settingsvalidation = new UiObject(new UiSelector().packageName("com.android.settings")); asserttrue("unable to detect Settings", settingsvalidation.exists()); } }

uiautomator

Robolectric emulator jest wolny dex, build, copy - to nie jest TDD biblioteka mock ująca Android framework - android.jar hierarchia shadow - ShadowViewGroup -> ShadowView - zgodne sygnatury metod możliwość uruchamiania testów na JVM bez emulatora/urządzenia - JUnit4, Spock szybkość prawdziwe testy jednostkowe

@RunWith(RobolectricTestRunner.class) public class MyActivityTest {! @Test public void clickingbutton_shouldchangeresultsviewtext() throws Exception { Activity activity = Robolectric.buildActivity(MyActivity.class).create().get();! Button pressmebutton = (Button) activity.findviewbyid(r.id.press_me_button); TextView results = (TextView) activity.findviewbyid(r.id.results_text_view);! pressmebutton.performclick(); String resultstext = results.gettext().tostring(); assertthat(resultstext, equalto("testing Android Rocks!")); } }

monkey UIAutomator Espresso Robotium Robolectric Porównanie Instrumentation monkeyrunner oficjalne wsparcie Google nie wymaga urządzenia/emulatora wspiera stare sdk możliwość nagrywania testu możliwość testowania bez źródeł aplikacji asercje wewnętrznego stanu

Które narzędzie wybrać? Jak duży projekt? Etap projektu Ilość logiki biznesowej, złożoność widoku Krytyczność błędów Uruchamiane w IDE czy w CI? Wspomaganie rozwoju czy zapobieganie regresji?

Q & A

Dziękuję za uwagę akonior@gmail.com http://www.linkedin.com/in/arkadiuszkonior