Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testowanie w systemie Android - MobileTrendsConf

Testowanie w systemie Android - MobileTrendsConf

Presentation giving overview of testing techiques in Android.
Delivered at Mobiletrendsconf 2012.

Marek Defeciński

January 29, 2012
Tweet

More Decks by Marek Defeciński

Other Decks in Technology

Transcript

  1. Wst¦p Testujmy! Android i testowanie Continuous integration Testowanie w systemie

    Android Marek Defeci«ski Mobica oddziaª w Šodzi Mobile Trends Conference, 2012 Marek Defeci«ski Testowanie w systemie Android
  2. Wst¦p Testujmy! Android i testowanie Continuous integration Agenda 1 Wst¦p

    2 Testujmy! 3 Android i testowanie Mo»liwo±ci Narz¦dzia 4 Continuous integration Marek Defeci«ski Testowanie w systemie Android
  3. Wst¦p Testujmy! Android i testowanie Continuous integration O mnie Organizator

    konferencji Mobilization.pl w Šodzi Programista aplikacji mobilnych w rmie Mobica Prawie 3 lata do±wiadczenia w j2me Ponad 1 w Androidzie Animator JUG Šód¹ http://info.lodz.jug.pl Chciaªby pisa¢ bloga: Blog programisty Android http://blogprogramistyandroid.blogspot.com Marek Defeci«ski Testowanie w systemie Android
  4. Wst¦p Testujmy! Android i testowanie Continuous integration Agenda 1 Wst¦p

    2 Testujmy! 3 Android i testowanie Mo»liwo±ci Narz¦dzia 4 Continuous integration Marek Defeci«ski Testowanie w systemie Android
  5. Wst¦p Testujmy! Android i testowanie Continuous integration Testowa¢ czy nie

    testowa¢, o to jest pytanie? Nie wa»ne jak, ale wa»ne »eby testowa¢ Jednostkowo / Funkcjonalnie / Integracyjne Manualnie / Automatycznie Wydajno±ciowo Marek Defeci«ski Testowanie w systemie Android
  6. Wst¦p Testujmy! Android i testowanie Continuous integration (Potencjalne) zalety Szcz¦±liwi

    programi±ci testy to pewno±¢, »e dziaªa spokój o zmiany Marek Defeci«ski Testowanie w systemie Android
  7. Wst¦p Testujmy! Android i testowanie Continuous integration (Potencjalne) zalety Sprawdzamy

    poprawno±¢ kodu Czy robi to co chcemy? Wykrywamy bª¦dy Zwi¦kszaj¡ jako±¢ kodu czy kod jest u»ywalny (ªatwo go testowa¢)? czy jest moduªowy? ªatwo si¦ integruje Testowanie skutkuje lepszym designem Marek Defeci«ski Testowanie w systemie Android
  8. Wst¦p Testujmy! Android i testowanie Continuous integration (Potencjalne) zalety Testy

    to kontrakt na pi±mie rodzaj dokumentacji (samodokumentuj¡cy si¦ kod) lista przykªadów istniej¡ce testy pozwalaj¡ na wykrycie bª¦dów regresji Marek Defeci«ski Testowanie w systemie Android
  9. Wst¦p Testujmy! Android i testowanie Continuous integration Wady (do wytrenowania)

    Wymagaj¡ czasu na napisanie na utrzymanie Wymagaj¡ wi¦cej od programisty umiej¦tno±ci dyscypliny Marek Defeci«ski Testowanie w systemie Android
  10. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Agenda

    1 Wst¦p 2 Testujmy! 3 Android i testowanie Mo»liwo±ci Narz¦dzia 4 Continuous integration Marek Defeci«ski Testowanie w systemie Android
  11. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Android

    - Testowanie Ksi¡»ka na dobry pocz¡tek Marek Defeci«ski Testowanie w systemie Android
  12. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Mo»liwo±ci

    RoboSpecs https://github.com/jbrechtel/robospecs Specs2 http://etorreborre.github.com/specs2/ Calculon https://github.com/kaeppler/calculon Android Junit Report https://github.com/jsankey/android-junit-report EasyMock http://easymock.org/ Marek Defeci«ski Testowanie w systemie Android
  13. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Mo»liwo±ci

    Borachio http://borachio.com/ Andject https://github.com/ko5tik/andject Android Maven Plugin http://code.google.com/p/maven-android-plugin/ Vogar http://code.google.com/p/vogar Caliper http://code.google.com/p/caliper ™ródªó: Manfred Moser - Testing Android Apps Going from Zero to Hero - http://www.simpligility.com Marek Defeci«ski Testowanie w systemie Android
  14. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Instrumentacja

    Anatomia testowania Aplikacje w androidzie zorganizowane s¡ w paczki (Android PacKage) Test w Androidzie to te» paczka (apk) Paczki w Androidzie nie maj¡ dost¦pu do swojego kodu (security) Testowanie u»ywa instrumentacji dzi¦ki której test i aplikacja testowana pracuj¡ w tym samym procesie warunek: podpisane s¡ tym samym kluczem Uwazamy na biblioteki w te±cie i aplikacji testowanej - nie mog¡ si¦ powtarza¢ (Conversion to Dalvik format failed lub bª¦dy w czasie wykonania) Uprawnienia (permissions) s¡ takie jak dla aplikacji testowanej Marek Defeci«ski Testowanie w systemie Android
  15. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Instrumentacja

    Uruchamianie AndroidManifest.xml <manifest ... package= "pl.mobiletrendsconf.tests"> ... <uses-library android:name= "android.test.runner" /> ... <instrumentation android:targetPackage= "pl.mobiletrendsconf" android:name= "android.test.InstrumentationTestRunner" /> Uruchamianie adb shell am instrument pl.mobiletrendsconf.tests/android.test.InstrumentationTestRunner Marek Defeci«ski Testowanie w systemie Android
  16. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Instrumentacja

    Zastosowanie Testy jednostkowe - wolne (kompilacja, dex, aapt, adb install) jeszcze wolniej (emulator) po co w ogóle testowa¢ to na urz¡dzeniu/emulatorze? Testy funkcjonalne tak samo wolno trudno napisa¢ / przeczyta¢ / utrzyma¢ Marek Defeci«ski Testowanie w systemie Android
  17. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia AndroidInside

    android.test.* android.test.InstrumentationTestCase umo»liwia korzystanie z instrumentacji symulowanie wci±ni¦cia klawiszy testowanie metod »ycia activity (onStart, onCreate) android.test.ActivityInstrumentationTestCase2 najcz¦±ciej u»ywana klasa getActivity() - zaªatwia za nas startowanie android.test.ServiceTestCase przetestowa¢ cykl »ycia serwisu (onBind...) Marek Defeci«ski Testowanie w systemie Android
  18. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia android.test.mock.*

    To nie jest mocking framework typu mockito lub easymock Bardziej zbli»one do denicji stubów (M. Fowler) To klasy których: metody rzucaj¡ wyj¡tkami nadpisujemy metody które chcemy u»y¢ Sªu»¡ izolacji od ±rodowiska MockContext MockContentProvider (baza danych) MockContentResolver (j.w.) Šatwiej co± wstrzykn¡¢ Niespecjalnie przydatne Marek Defeci«ski Testowanie w systemie Android
  19. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Monkey

    i Monkeyrunner Monkey wysyªanie losowych eventów (klawiatura, mysz, rotacja) tryb serwera (oczekiwanie na polecenia tekstowe) tryb skryptów dokumentacja w kodzie ¹ródªowym SDK Monkeyrunner python/jython umo»liwia startowanie activity wysyªanie eventów (klawiatura, mysz) screenshoty mo»na nagra¢ test u»ywaj¡c recorder-a (w kodzie sdk) szukaj help.py w kodzie ¹ródªowym SDK Marek Defeci«ski Testowanie w systemie Android
  20. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Robotium

    Jak Selenium, ale dla Android Testy typu black box nie wymagaj¡ kodu aplikacji testowanej (ale mog¡) Testy przyjazne w dotyku - pro±ciej ni» instrumentacja zgrabne API ªatwo si¦ pisz¦ ªatwo si¦ czyta Du»e i aktywne community i regularne release-y (3.0 w listopadzie, 3.1 w styczniu) Marek Defeci«ski Testowanie w systemie Android
  21. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Robotium

    Jak Selenium, ale dla Android Testy typu black box nie wymagaj¡ kodu aplikacji testowanej (ale mog¡) Testy przyjazne w dotyku - pro±ciej ni» instrumentacja zgrabne API ªatwo si¦ pisz¦ ªatwo si¦ czyta Du»e i aktywne community i regularne release-y (3.0 w listopadzie, 3.1 w styczniu) Wady limit 1 aplikacji na test, przej±cie do innej aplikacji (np. sms) ko«czy test (limit instrumentacji) mo»e i ªadniej, ale wcale nie szybciej zmiany UI = zmiany testów Marek Defeci«ski Testowanie w systemie Android
  22. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia TestDroid

    recorder BitBar - http://testdroid.com/ Plugin do eclipse Nagrywanie testów, wynikiem s¡ testy robotium testy monkeyrunner Pªatny Marek Defeci«ski Testowanie w systemie Android
  23. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Robolectric

    java.lang.RuntimeException: Stub! android.jar - fasada potrzebna do kompilacji Testy uruchamiane w zwykªej Javie Szybkie! Typu black-box Šatwo zrefaktorowa¢ Šatwo osi¡gn¡¢ du»e pokrycie testami bo szybko si¦ pisze i szybko uruchamia Maven (out of the box) Šatwe mockowanie http Robolectric.addPendingHttpResponse(...) Marek Defeci«ski Testowanie w systemie Android
  24. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia Robolectric

    Czy to nadal Android? Brakuje jeszcze du»o implementacji Doª¡cz si¦! https://robolectric.org Marek Defeci«ski Testowanie w systemie Android
  25. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia AndroidDriver/AndroidWebDriver

    Prawdziwe Selenium Testujemy stron¦ internetow¡, ale w Androidzie Dwa tryby u»ycia Zdalny serwer WebDriver Testy na ho±cie Dowolny j¦zyk programowania Ten sam test u»ywasz do innych przegl¡darek Testy androidowe (instrumentacja) - SDK Extras Testy na androidzie Dziaªa szybciej Marek Defeci«ski Testowanie w systemie Android
  26. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia NativeDriver

    http://code.google.com/p/nativedriver/ Reusability Robimy to samo co Selenium: klikamy, wpisujemy tekst, zmieniamy okna (activity) Wszyscy znaj¡ Selenium to u»yjmy to API jeszcze raz Obsªuguje wiele platform (iPhone/Windows) Test po stronie hosta Serwer po stronie aplikacji Marek Defeci«ski Testowanie w systemie Android
  27. Wst¦p Testujmy! Android i testowanie Continuous integration Mo»liwo±ci Narz¦dzia NativeDriver

    http://code.google.com/p/nativedriver/ Reusability Robimy to samo co Selenium: klikamy, wpisujemy tekst, zmieniamy okna (activity) Wszyscy znaj¡ Selenium to u»yjmy to API jeszcze raz Obsªuguje wiele platform (iPhone/Windows) Test po stronie hosta Serwer po stronie aplikacji Wymaga doª¡czenia jar-a do aplikacji I zmiany kilku permissions Marek Defeci«ski Testowanie w systemie Android
  28. Wst¦p Testujmy! Android i testowanie Continuous integration Agenda 1 Wst¦p

    2 Testujmy! 3 Android i testowanie Mo»liwo±ci Narz¦dzia 4 Continuous integration Marek Defeci«ski Testowanie w systemie Android
  29. Wst¦p Testujmy! Android i testowanie Continuous integration Continuous integration Budowanie

    ant maven Integracja z Hudson/Jenkins https://wiki.jenkins- ci.org/display/JENKINS/Android+Emulator+Plugin Emulator w trybie headless (-no-window) Snapshots http://tools.android.com/recent/emulatorsnapshots Monkey Marek Defeci«ski Testowanie w systemie Android
  30. Wst¦p Testujmy! Android i testowanie Continuous integration Continuous integration Statyczna

    analiza kodu Sonar Marek Defeci«ski Testowanie w systemie Android
  31. Wst¦p Testujmy! Android i testowanie Continuous integration Continuous Integration Code

    Coverage Emma Testwell CTC for java (pªatne) I tak b¦dziemy musieli co± napisa¢ samemu python? Marek Defeci«ski Testowanie w systemie Android