Android-Testautomatisierung mit Robotium Daniel Knott XING AG @dnlkntt http://www.adventuresinqa.com
Daniel Knott Manager Quality Assurance @dnlkntt daniel.knott@xing.com Daniel Knott hat einen technischen Hintergrund in verschiedenen Programmiersprachen und Quality Assurance Tools. Nach seiner Ausbildung bei der IBM Deutschland GmbH studierte er an der Fachhochschule Wiesbaden Informatik mit dem Schwerpunkt Softwarequalitätssicherung. Seit 2010 arbeitet Daniel Knott als Manager Quality Assurance bei der XING AG. In verschiedenen Projekten ist er verantwortlich für das Testmanagement, für die Ausführung der Testfälle sowie für die Testautomatisierung. Zur Zeit arbeitet Daniel Knott im XING mobile Team. Dort ist er verantwortlich für das Testmanagement und die Testautomatisierung der Android und iphone App. Sein XING Profil https://www.xing.com/profile/daniel_knott. Sein Blog http://www.adventuresinqa.com
Inhaltsverzeichnis 1. XING AG 2. Warum Testautomatisierung? 3. Robotium 4. Code / Live Demo 5. Vor -und Nachteile 6. Best Practices 3
XING AG Gegründet 2003 als OpenBC Seit 2006 XING AG > 11.4 Mio. Mitglieder > 5,1 Mio. Mitglieder DACH > 779.000 Premium-Mitglieder 4
XING AG 5
XING AG >80 Entwickler Ruby on Rails Perl Java Objective-C HTML/CSS/JavaScript 6
XING AG +400 7
XING AG 50 Releases im Jahr 8
Warum Testautomatisierung? 9
Warum Testautomatisierung? - Typische Fehler Falsche Übersetzung App lässt sich nicht installieren App crash während der Ausführung App friert bei Nutzung ein Keine Verbindung zum Backend Fehlende Ressourcen Layout- Probleme Probleme mit Landscape / Portrait Mode 10
Warum Testautomatisierung? 11
Warum Testautomatisierung? 12
Robotium Allgemeines Black Box Test Tool Basiert auf Java und JUnit 3 Support von Android 1.6 4.x Simuliert User- InterakTonen Device & Simulator Einfacher AuVau Testet APK Files 13
Robotium Wichtige Methoden clickonbutton(text) clickontext(text) clickonimage(id) clickinlist(line) searchtext(text) entertext(id, text) waitforactivity(name, timeout) waitforview(view) It s like Selenium, but for Android TM 14
Robotium Was wird benötigt? Android APK/ Source Code IDE zum Bauen des Projektes Android Development Tools als Plugin Android SDK Java Development Kit RoboTum Version 3.1 15
Code-Beispiele 16
Code Login public void testloginfailed() throws Exception { } solo.entertext(0, wrongusername ); solo.entertext(1, wrongpassword ); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_login)); solo.waitforactivity("com.xing.android.activities.spinnerloginactivity", 2000); asserttrue("error: Error message is not shown", verifytextispresent(solo.getstring( com.xing.android.r.string.dialog_error_body))); solo.clickonbutton(solo.getstring(com.xing.android.r.string.dialog_button)); 17
Code Login public void testloginfailed() throws Exception { } solo.entertext(0, wrongusername ); solo.entertext(1, wrongpassword ); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_login)); solo.waitforactivity("com.xing.android.activities.spinnerloginactivity", 2000); asserttrue("error: Error message is not shown", verifytextispresent(solo.getstring( com.xing.android.r.string.dialog_error_body))); solo.clickonbutton(solo.getstring(com.xing.android.r.string.dialog_button)); 18
Code Login public void testloginfailed() throws Exception { } solo.entertext(0, wrongusername ); solo.entertext(1, wrongpassword ); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_login)); solo.waitforactivity("com.xing.android.activities.spinnerloginactivity", 2000); asserttrue("error: Error message is not shown", verifytextispresent(solo.getstring( com.xing.android.r.string.dialog_error_body))); solo.clickonbutton(solo.getstring(com.xing.android.r.string.dialog_button)); 19
Code Login public void testloginfailed() throws Exception { } solo.entertext(0, wrongusername ); solo.entertext(1, wrongpassword ); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_login)); solo.waitforactivity("com.xing.android.activities.spinnerloginactivity", 2000); asserttrue("error: Error message is not shown", verifytextispresent(solo.getstring( com.xing.android.r.string.dialog_error_body))); solo.clickonbutton(solo.getstring(com.xing.android.r.string.dialog_button)); 20
Code Login 21
Code Status Update public void teststatusupdate() throws Exception { solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_news)); solo.entertext(0, bin auf der Mobile Developer Conference ); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_send)); solo.clickonmenuitem(solo.getstring(com.xing.android.r.string.menu_refresh)); asserttrue("error: Update is not shown", searchtext( bin auf der Mobile Developer Conference )); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_delete)); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_yes)); assertfalse("error: Update is still shown", searchtext( bin auf der Mobile Developer Conference )); } 22
Code Status Update public void teststatusupdate() throws Exception { solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_news)); solo.entertext(0, bin auf der Mobile Developer Conference ); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_send)); solo.clickonmenuitem(solo.getstring(com.xing.android.r.string.menu_refresh)); asserttrue("error: Update is not shown", searchtext( bin auf der Mobile Developer Conference )); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_delete)); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_yes)); assertfalse("error: Update is still shown", searchtext( bin auf der Mobile Developer Conference )); } 23
Code Status Update public void teststatusupdate() throws Exception { solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_news)); solo.entertext(0, bin auf der Mobile Developer Conference ); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_send)); solo.clickonmenuitem(solo.getstring(com.xing.android.r.string.menu_refresh)); asserttrue("error: Update is not shown", searchtext( bin auf der Mobile Developer Conference )); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_delete)); solo.clickonbutton(solo.getstring(com.xing.android.r.string.button_yes)); assertfalse("error: Update is still shown", searchtext( bin auf der Mobile Developer Conference )); } 24
Code Status Update 25
Vor -und Nachteile 26
Vorteile Testen auf echter Hardware Verschiedene Versionen testen Einfacher Aufbau App Source Code nicht notwendig Integration in CI Server (Jenkins) Open Source Starke Community 27
Nachteile Ausführungszeit sehr langsam Kein Web-View- oder Flash-Support Keine Screenshotfunktion Kein Multi Device Support Kein Zugriff auf andere APKs Reaktion auf Anrufe, SMS, Tweets Kamera, Sensoren, Bluetooth 28
Best Practices 29
Best Practices Testcode und Entwicklungscode in gleicher Sprache Sicherung aller Tests in einer Versionskontrolle Tools kombinieren Continuous Integration Server nutzen Android Simulator meiden Gerootete Geräte meiden In allen Netzen Testen Die Kunden kennen! 30
Vielen Dank für Ihre Aufmerksamkeit Daniel Knott Manager Quality Assurance daniel.knott@xing.com @dnlkntt http://www.adventuresinqa.com/ XING Android App: https://market.android.com/details?id=com.xing.android Das professionelle Netzwerk www.xing.com 31
Links & Referenzen Robotium http://code.google.com/p/robotium/ Android Logo http://www.android.com/media/wallpaper/gif/android_logo.gif Twitter Logo https://si0.twimg.com/a/1318896278/images/logos/twitter_newbird_white.png Businesswoman http://www.istockphoto.com/stock-photo-16742115-businesswoman-holdinga-blank-sign-isolated.php Letters, by davide vizzini limbte http://www.flickr.com/photos/limbte/4007115435/ Robotium Logo http://f.hatena.ne.jp/images/fotolife/r/re_shikajiro/ 20110601/20110601224550.jpg Samsung Logo http://samsung.de/webdownloads/pressedownloads/ samsung_standard_brandline_c.jpg 32
Links & Referenzen HTC Logo http://fs02.androidpit.info/userfiles/44704/image/bilder/htc/htc_logo.jpg LG Logo http://upload.wikimedia.org/wikipedia/de/f/f1/lg-logo.svg Sony Ericsson Logo http://www.xginsider.com/wp-content/uploads/2010/09/sony-ericsson- Logo.jpg Motorola Logo http://www.android-hilfe.de/attachments/android-news/42706d1310665896- motorola-atrix-ab-sofort-deutschland-erhaeltlich-ohne-lapdock-logomotorola.jpg] Huawei Logo http://www.android.com/media/wallpaper/gif/android_logo.gif Mobile Developer Conference Logo http://www.mobile-developer-conference.de/content/download/6794/45545/file/ Logo_MDC.gif 33