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
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?
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