Robotium
Easy Black-box Testing
for Android
Renas Reda / Hugo Josefson
Agenda
●
Vanilla vs Robotium
– Instrumentation testing
– Write readable tests, with 10x less code [DEMO]
– (Still) access ...
Black box testing?
• ...doesn't know how an application is designed
at the code level...
– bughuntress.com/analytics/gloss...
Instrumentation testing
Vanilla
vs
Robotium
Instrumentation Testing
(vanilla)
What's instrumentation testing?
• Investigate interaction with UI
• Pressing buttons, navigating menus
• Blackbox method(?...
Android built-in support
• Runs on device/emulator
• JUnit 3 compatible framework
• Allows direct control of user interfac...
Android built-in support
• Tapping a view:
TouchUtils.tapView(someView)
• Pressing key (physical button):
getInstrumentati...
Drawbacks and limitations
• Required to know implementation details
• You often have to manually add
Thread.sleep(500) to ...
Setting up instrumentation tests
• Runs in emulator/device using JUnit 3
• Separate test project as normal
Writing an instrumentation test
Testing a Calculator GUI
Writing an instrumentation test
// Find views
EditText num1 = (EditText)
getActivity().findViewById(com.calculator.R.id.nu...
Running instrumentation tests
• Started from Eclipse as “Android JUnit test”
• Can also be started from command line:
adb ...
Instrumentation testing
with
Robotium
Robotium
• Facts
– Instrumentation testing framework
– Add-on jar
– Open Source (Apache 2)
• Purpose
– Simplify making tes...
• Benefits
– Easy to write, shorter code
– Automatic timing and delays
– Automatically follows current Activity
– Automati...
Writing tests with Robotium
• You use only one class: Solo
• Test class like for normal instrumentation:
Remember the Calculator GUI?
Remember standard
instrumentation test?// Find views
EditText num1 = (EditText)
getActivity().findViewById(com.calculator....
Test Calculator with Robotium
public void testAdd() {
solo.enterText(0, "5");
solo.enterText(1,"3");
solo.clickOnButton("A...
Some Robotium commands
• clickOnButton(String regex)
• clickInList(int line)
• enterText(int index, String text)
• searchT...
Writing Tests with Robotium
+ still access standard Instrumentation
[DEMO]
Darker than Black Box
Black box testing?
• ...doesn't know how an application is designed
at the code level...
– bughuntress.com/analytics/gloss...
The usual “Black box” way
• Two projects in Eclipse
– App project
– Test project
• Write test without looking at app's int...
The Darker than Black box way
• Any application's apk file
• One project in Eclipse
– App project
– Test project
• No acce...
Darker than Black Box
Test any APK w/o its source code
[DEMO]
Robotium with Maven
Maven
• Project management + Build tool
• Based on sane defaults
– Can be overridden with configuration
– Only configure w...
Declare need for Robotium
in test project
<dependency>
<groupId>com.jayway.android.robotium</groupId>
<artifactId>robotium...
Perform build and Run all Tests
including Robotium tests
$ mvn install
Maven with Robotium
Automating test execution
[DEMO]
The future of Testing
on Android
Google's Roadmap
?
Google's Roadmap
http://source.android.com/roadmap/
– Last entry “Beyond Q1 2009”:
– Support for WVGA and QVGA...
– Not ke...
Google's Roadmap
http://source.android.com/roadmap/
– Last entry “Beyond Q1 2009”:
– Support for WVGA and QVGA...
– Page d...
Robotium's Roadmap
for Instrumentation Testing
• Features we want to implement next
– Remote control
– Similar to Selenium...
Robotium resources
Getting Started +
Robotium Developers discussion group:
www.robotium.org
Questions?
Robotium at Android Only 2010-09-29
Upcoming SlideShare
Loading in …5
×

Robotium at Android Only 2010-09-29

5,466 views

Published on

www.robotium.org presentation by Jayway at the Android Only conference in Stockholm, Sweden 2010-09-29.

Published in: Technology

Robotium at Android Only 2010-09-29

  1. 1. Robotium Easy Black-box Testing for Android Renas Reda / Hugo Josefson
  2. 2. Agenda ● Vanilla vs Robotium – Instrumentation testing – Write readable tests, with 10x less code [DEMO] – (Still) access all the powers of Instrumentation [DEMO] ● Darker than Black box [DEMO] ● Robotium with Maven [DEMO] ● The future of testing on Android
  3. 3. Black box testing? • ...doesn't know how an application is designed at the code level... – bughuntress.com/analytics/glossary.html • ...done without reference to the source code... – www.sqablogs.com/jstrazzere/46/A+Glossary+of+Testing+Terms .html
  4. 4. Instrumentation testing Vanilla vs Robotium
  5. 5. Instrumentation Testing (vanilla)
  6. 6. What's instrumentation testing? • Investigate interaction with UI • Pressing buttons, navigating menus • Blackbox method(?) • Takes time • Can use JUnit • Good for acceptance or system tests • Can be automated!
  7. 7. Android built-in support • Runs on device/emulator • JUnit 3 compatible framework • Allows direct control of user interface –Touches –Taps –Scrolling in lists • Can be started from Eclipse or shell
  8. 8. Android built-in support • Tapping a view: TouchUtils.tapView(someView) • Pressing key (physical button): getInstrumentation(). sendKeyDownUpSync(KeyEvent.KEYCODE_MENU) • Sending text: sendKeys(“some text”)
  9. 9. Drawbacks and limitations • Required to know implementation details • You often have to manually add Thread.sleep(500) to make tests work • Large apps can be very complex to test • Tests run slowly – Like if it would be done manually – Not suitable for TDD
  10. 10. Setting up instrumentation tests • Runs in emulator/device using JUnit 3 • Separate test project as normal
  11. 11. Writing an instrumentation test
  12. 12. Testing a Calculator GUI
  13. 13. Writing an instrumentation test // Find views EditText num1 = (EditText) getActivity().findViewById(com.calculator.R.id.num1); EditText num2 = (EditText) getActivity().findViewById(com.calculator.R.id.num2); Button addButton = (Button) getActivity().findViewById(com.calculator.R.id.add_button); // Perform instrumentation commands TouchUtils.tapView(this, num1); sendKeys(KeyEvent.KEYCODE_1,KeyEvent.KEYCODE_5); TouchUtils.tapView(this, num2); sendKeys(KeyEvent.KEYCODE_5); TouchUtils.tapView(this, addButton); // Fetch result and compare it against expected value String actual = num1.getText().toString(); String expected = "20.0"; assertEquals("Addition incorrect", expected,actual);
  14. 14. Running instrumentation tests • Started from Eclipse as “Android JUnit test” • Can also be started from command line: adb shell am instrument -w com.package/android.test.InstrumentationTestRunner
  15. 15. Instrumentation testing with Robotium
  16. 16. Robotium • Facts – Instrumentation testing framework – Add-on jar – Open Source (Apache 2) • Purpose – Simplify making tests
  17. 17. • Benefits – Easy to write, shorter code – Automatic timing and delays – Automatically follows current Activity – Automatically finds Views – Automatically makes own decisions – when to scroll etc. – No modification to Android platform – Test execution is fast • Current limitations – Tied to JUnit 3 Instrumentation on device – Tied to one app process – Needs initial Activity(?)
  18. 18. Writing tests with Robotium • You use only one class: Solo • Test class like for normal instrumentation:
  19. 19. Remember the Calculator GUI?
  20. 20. Remember standard instrumentation test?// Find views EditText num1 = (EditText) getActivity().findViewById(com.calculator.R.id.num1); EditText num2 = (EditText) getActivity().findViewById(com.calculator.R.id.num2); Button addButton = (Button) getActivity().findViewById(com.calculator.R.id.add_button); // Perform instrumentation commands TouchUtils.tapView(this, num1); sendKeys(KeyEvent.KEYCODE_1,KeyEvent.KEYCODE_5); TouchUtils.tapView(this, num2); sendKeys(KeyEvent.KEYCODE_5); TouchUtils.tapView(this, addButton); // Fetch result and compare it against expected value String actual = num1.getText().toString(); String expected = "20.0"; assertEquals("Addition incorrect", expected,actual);
  21. 21. Test Calculator with Robotium public void testAdd() { solo.enterText(0, "5"); solo.enterText(1,"3"); solo.clickOnButton("Add"); assertTrue(solo.searchEditText("8.0")); }
  22. 22. Some Robotium commands • clickOnButton(String regex) • clickInList(int line) • enterText(int index, String text) • searchText(String regex) • clickOnMenuItem(String regex) • getCurrentActivity() • goBack(), goBackToActivity(String name)
  23. 23. Writing Tests with Robotium + still access standard Instrumentation [DEMO]
  24. 24. Darker than Black Box
  25. 25. Black box testing? • ...doesn't know how an application is designed at the code level... – bughuntress.com/analytics/glossary.html • ...done without reference to the source code... – www.sqablogs.com/jstrazzere/46/A+Glossary+of+Testing+Terms .html
  26. 26. The usual “Black box” way • Two projects in Eclipse – App project – Test project • Write test without looking at app's internals
  27. 27. The Darker than Black box way • Any application's apk file • One project in Eclipse – App project – Test project • No access to original project • Write test without any access to app's internals
  28. 28. Darker than Black Box Test any APK w/o its source code [DEMO]
  29. 29. Robotium with Maven
  30. 30. Maven • Project management + Build tool • Based on sane defaults – Can be overridden with configuration – Only configure what's different • Plugins add functionality – maven-android-plugin: build Android projects + run Instrumentation tests • Dependencies downloaded automatically – Declare need for Robotium → Maven downloads jar
  31. 31. Declare need for Robotium in test project <dependency> <groupId>com.jayway.android.robotium</groupId> <artifactId>robotium-solo</artifactId> <version>1.8.0</version> </dependency>
  32. 32. Perform build and Run all Tests including Robotium tests $ mvn install
  33. 33. Maven with Robotium Automating test execution [DEMO]
  34. 34. The future of Testing on Android
  35. 35. Google's Roadmap ?
  36. 36. Google's Roadmap http://source.android.com/roadmap/ – Last entry “Beyond Q1 2009”: – Support for WVGA and QVGA... – Not keen on disclosing what they will / will not release.
  37. 37. Google's Roadmap http://source.android.com/roadmap/ – Last entry “Beyond Q1 2009”: – Support for WVGA and QVGA... – Page deleted – Not keen on disclosing what they will / will not release.
  38. 38. Robotium's Roadmap for Instrumentation Testing • Features we want to implement next – Remote control – Similar to Selenium RC – Cucumber integration – Generate screenshot on failure – UI test coverage • Features further down the line? – Multidevice support
  39. 39. Robotium resources Getting Started + Robotium Developers discussion group: www.robotium.org Questions?

×