Android Testautomatisierung
mit dem Framework
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 (XING Suche, XING Empfehlungen) war 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 aller Mobilen
Apps der XING AG, dazu gehören iPhone, Android, touch.xing.com, Windows Phone 7 und die Blackberry App.
Neben dem Testmanagement betreut Daniel die Testautomatisierung der iPhone und Android App. Zusätzlich zu
seiner Tätigkeit bei der XING AG ist Daniel ein Sprecher auf agilen Konferenzen.
Sein XING Profil https://www.xing.com/profile/Daniel_Knott.
Sein Blog http://www.adventuresinqa.com
1.  XING AG
2.  Warum Testautomatisierung?
3.  Robotium
4.  Code / Live Demo
5.  Vor -und Nachteile
6.  Best Practices
Inhaltsverzeichnis
3Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
4Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
XING AG
 Gegründet 2003 als OpenBC
 Seit 2006 XING AG
 > 11.7 Mio. Mitglieder
 ~25% Mobiler Traffic
XING AG
5Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
6Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Releases im Jahr
50
XING AG
7Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
XING AG
8Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Warum
Testautomatisierung?
Warum Testautomatisierung?
9Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Warum Testautomatisierung?
10Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
App	
  lässt	
  sich	
  nicht	
  installieren	
  
Layout-­‐Probleme	
  
Probleme	
  mit	
  Landscape	
  /	
  Portrait	
  Mode	
  
Falsche	
  Übersetzung	
  
Fehlende	
  Ressourcen	
  
Keine	
  Verbindung	
  zum	
  Backend	
  
11Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Warum Testautomatisierung?
12Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Warum Testautomatisierung?
13Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Robotium
Robotium – Allgemeines
14Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Black	
  Box	
  Test	
  Tool	
  
Basiert	
  auf	
  Java	
  und	
  JUnit	
  3	
  
Support	
  von	
  Android	
  1.6	
  –	
  4.x	
  
Simuliert	
  User-­‐InterakQonen	
  
Einfacher	
  AuSau	
  
Device	
  &	
  Simulator	
  
Testet	
  APK	
  Files	
  
Robotium – Methoden
15Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
It‘s likeSelenium,
but for
AndroidTM
clickOnButton(text)
clickOnText(text)
clickOnImage(id)
clickInList(line)
searchText(text)
enterText(id, text)
waitForActivity(name, timeout)
waitForView(view)
16Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Code-Beispiele
Code – Login
17Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
	
  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));	
  
	
  }	
  
Code – Login
18Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
	
  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));	
  
	
  }	
  
Code – Login
19Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
	
  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));	
  
	
  }	
  
Code – Login
20Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
	
  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));	
  
	
  }	
  
Code – Login
21Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Code – Status Update
22Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
	
  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”));	
  
	
  }	
  
23Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
	
  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”));	
  
	
  }	
  
Code – Status Update
24Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
	
  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”));	
  
	
  }	
  
Code – Status Update
25Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Code – Status Update
26Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Vor -und Nachteile
Vorteile
27Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Testen auf echter Hardware
Verschiedene Versionen testen
Einfacher Aufbau
App Source Code nicht notwendig
Integration in CI Server (Jenkins)
Open Source
Starke Community
Nachteile
28Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
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
29Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Best
Practices
Best Practices
30Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Gerootete Geräte meiden
Testcode und Entwicklungscode in gleicher Sprache
Sicherung aller Tests in einer Versionskontrolle
Tools kombinieren
Continuous Integration Server nutzen
Android Simulator meiden
In allen Netzen Testen
Die Kunden kennen!
Das professionelle Netzwerk
www.xing.com
Vielen Dank
für Ihre
Aufmerksamkeit
31Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
Daniel Knott
Manager Quality Assurance
daniel.knott@xing.com
@dnlkntt
http://www.adventuresinqa.com/
Links & Referenzen
32Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
•  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-holding-a-blank-
sign-isolated.php
•  Letters, by davide vizzini limbtehttp://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
•  HTC Logo http://fs02.androidpit.info/userfiles/44704/image/Bilder/HTC/HTC_Logo.jpg
33Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
•  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-logo-motorola.jpg]
•  Huawei Logo
http://www.android.com/media/wallpaper/gif/android_logo.gif
•  Iqnite Logo
http://www.bredex.de/web/tl_files/BredexDateien/pictures/events/
iqnite_Logo_Deutschland2012_rgb.jpg
•  Google Play Logo
http://www.android.com/images/brand/android_app_on_play_logo_small.png
•  Apple App Store Logo http://www.inext.me/wp-content/uploads/2011/09/
app-store_logo.png
•  Windows Market Place Logo http://modmyi.com/attachments/forums/iphone-4-
new-skins-themes-launches/483774d1290368882-release-windows-phone-7-hd-market-
place-2x.png
Links & Referenzen

Mobile Testautomatisierung mit Robotium

  • 1.
    Android Testautomatisierung mit demFramework Robotium Daniel Knott XING AG @dnlkntt http://www.adventuresinqa.com
  • 2.
    Daniel Knott Manager QualityAssurance @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 (XING Suche, XING Empfehlungen) war 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 aller Mobilen Apps der XING AG, dazu gehören iPhone, Android, touch.xing.com, Windows Phone 7 und die Blackberry App. Neben dem Testmanagement betreut Daniel die Testautomatisierung der iPhone und Android App. Zusätzlich zu seiner Tätigkeit bei der XING AG ist Daniel ein Sprecher auf agilen Konferenzen. Sein XING Profil https://www.xing.com/profile/Daniel_Knott. Sein Blog http://www.adventuresinqa.com
  • 3.
    1.  XING AG 2. Warum Testautomatisierung? 3.  Robotium 4.  Code / Live Demo 5.  Vor -und Nachteile 6.  Best Practices Inhaltsverzeichnis 3Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
  • 4.
    4Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 XING AG  Gegründet 2003 als OpenBC  Seit 2006 XING AG  > 11.7 Mio. Mitglieder  ~25% Mobiler Traffic
  • 5.
    XING AG 5Android Testautomatisierungmit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
  • 6.
    6Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Releases im Jahr 50 XING AG
  • 7.
    7Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 XING AG
  • 8.
    8Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Warum Testautomatisierung?
  • 9.
    Warum Testautomatisierung? 9Android Testautomatisierungmit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
  • 10.
    Warum Testautomatisierung? 10Android Testautomatisierungmit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 App  lässt  sich  nicht  installieren   Layout-­‐Probleme   Probleme  mit  Landscape  /  Portrait  Mode   Falsche  Übersetzung   Fehlende  Ressourcen   Keine  Verbindung  zum  Backend  
  • 11.
    11Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Warum Testautomatisierung?
  • 12.
    12Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Warum Testautomatisierung?
  • 13.
    13Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Robotium
  • 14.
    Robotium – Allgemeines 14AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Black  Box  Test  Tool   Basiert  auf  Java  und  JUnit  3   Support  von  Android  1.6  –  4.x   Simuliert  User-­‐InterakQonen   Einfacher  AuSau   Device  &  Simulator   Testet  APK  Files  
  • 15.
    Robotium – Methoden 15AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 It‘s likeSelenium, but for AndroidTM clickOnButton(text) clickOnText(text) clickOnImage(id) clickInList(line) searchText(text) enterText(id, text) waitForActivity(name, timeout) waitForView(view)
  • 16.
    16Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Code-Beispiele
  • 17.
    Code – Login 17AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012  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 18AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012  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 19AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012  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 20AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012  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));    }  
  • 21.
    Code – Login 21AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012
  • 22.
    Code – StatusUpdate 22Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012  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.
    23Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012  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”));    }   Code – Status Update
  • 24.
    24Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012  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”));    }   Code – Status Update
  • 25.
    25Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Code – Status Update
  • 26.
    26Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Vor -und Nachteile
  • 27.
    Vorteile 27Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Testen auf echter Hardware Verschiedene Versionen testen Einfacher Aufbau App Source Code nicht notwendig Integration in CI Server (Jenkins) Open Source Starke Community
  • 28.
    Nachteile 28Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 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
  • 29.
    29Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Best Practices
  • 30.
    Best Practices 30Android Testautomatisierungmit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Gerootete Geräte meiden Testcode und Entwicklungscode in gleicher Sprache Sicherung aller Tests in einer Versionskontrolle Tools kombinieren Continuous Integration Server nutzen Android Simulator meiden In allen Netzen Testen Die Kunden kennen!
  • 31.
    Das professionelle Netzwerk www.xing.com VielenDank für Ihre Aufmerksamkeit 31Android Testautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 Daniel Knott Manager Quality Assurance daniel.knott@xing.com @dnlkntt http://www.adventuresinqa.com/
  • 32.
    Links & Referenzen 32AndroidTestautomatisierung mit dem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 •  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-holding-a-blank- sign-isolated.php •  Letters, by davide vizzini limbtehttp://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 •  HTC Logo http://fs02.androidpit.info/userfiles/44704/image/Bilder/HTC/HTC_Logo.jpg
  • 33.
    33Android Testautomatisierung mitdem Framework Robotium | Daniel Knott | @dnlkntt | Iqnite 2012 | Düsseldorf, 24.04.2012 •  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-logo-motorola.jpg] •  Huawei Logo http://www.android.com/media/wallpaper/gif/android_logo.gif •  Iqnite Logo http://www.bredex.de/web/tl_files/BredexDateien/pictures/events/ iqnite_Logo_Deutschland2012_rgb.jpg •  Google Play Logo http://www.android.com/images/brand/android_app_on_play_logo_small.png •  Apple App Store Logo http://www.inext.me/wp-content/uploads/2011/09/ app-store_logo.png •  Windows Market Place Logo http://modmyi.com/attachments/forums/iphone-4- new-skins-themes-launches/483774d1290368882-release-windows-phone-7-hd-market- place-2x.png Links & Referenzen