Más contenido relacionado
Similar a Introduction to Robotium (20)
Introduction to Robotium
- 2. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 2
Stop by Intertech’s
booth for a chance to
win FREE Training.
Or go to bit.ly.com/intertech-login
Slides & demo code available at intertech.com/blog
- 3. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 3
Session Agenda
• Robotium…
• What is it?
• Where to get it and how to set it up
• “Normal” Android unit testing background
• Why Robotium is needed
• Using Robotium
• Robotium Tips/Tricks/Issues
• Complimentary tools
• Further Resources
• Q&A
- 4. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 4
Purpose
• The main point/purpose to my talk…
• There are wonderful test/QA tools available for Android!
• There are no excuses for skipping unit testing in Android!
- 5. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 5
Jim White Intro
• Intertech Partner,
• Dir. of Training,
• Instructor,
• Consultant
• Co-author, J2ME, Java in Small
Things (Manning)
• Device developer since before
phones were “smart”
• Java developer when “spring”
and “struts” described your
stride
• Occasional beer drinker
- 6. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 6
Robotium – what is it?
• An open source test framework
• Used to write black or white box tests (emphasis is on black box)
• White box testing – testing software that knows and tests the internal
structures or workings of an application
• Black box testing – testing software functionality without knowledge of
an application (perhaps where the source code is not even available)
• Tests can be executed on an Android Virtual Device (AVD) or real
device
• Built on Java (and Android) and JUnit (the Android Test Framework)
• In fact, it may be more appropriate to call Robotium an extension to the
Android test framework
- 7. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 7
Robotium Project Setup
• Prerequisites
• Install and setup JDK
• Install and setup Eclipse (optional)
• Install and setup Android Standard Development Kit (SDK)
• Supports Android 1.6 (API level 4) and above
• Install and setup Android Development Tools (ADT) for Eclipse (optional)
• Create Android AVD or attach device by USB
• Create an Android Test Project
• Download Robotium JAR and add to project classpath
• robotium-solo-X.X.jar (version 3.6 the latest as of this writing)
• From code.google.com/p/robotium/downloads/list
- 8. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 8
Background - Android JUnit Testing
• Android testing is based on JUnit
• You create test suites, classes (test cases), methods
• Organize tests into a Android Test project
• Android API supports JUnit 3 code style – not JUnit 4!
• No annotations
• Old JUnit naming conventions
• Test case classes can extend good-old-fashion JUnit3 TestCase
• To call Android APIs, base class must extend AndroidTestCase
• Use JUnit Assert class to check/display test results
• Execute tests using an SDK provided InstrumentationTestRunner
• android.test.InstrumentationTestRunner
• Usually handled automatically via IDE
- 9. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 9
Android Test Architecture
• Architecturally, the unit testing project and app project run on the
same JVM (i.e. DVM).
Test case classes,
instrumentation, JUnit,
mock objects, etc.
- 10. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 10
Robotium Project Setup
• Add Robotium JAR to the Java
Build Path
• Put Robotium in the build path
order.
- 11. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 11
Android JUnit Project Setup
Demo
- 12. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 12
The “App” Used To Demo Today
• Want to make sure data is
entered.
• Want to make sure data is
valid.
• Age is less than 122
• Zip has 5 characters
• Make sure a role is clicked.
• Make sure clear does clear the
fields.
• Etc.
- 13. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 13
Example JUnit Test (Continued)
public class TestDataCollection extends ActivityInstrumentationTestCase2<DataCollectionActivity> {
DataCollectionActivity activity;
public TestDataCollection() {
super(DataCollectionActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
@Override
protected void tearDown() throws Exception {
activity.finish();
super.tearDown();
}
Extends AndroidTestCase –
provides functionality for testing a
single Activity. Need to associate it
to an Activity type (like
DataCollectionActivity)
Test case initialization method (just
like JUnit 3).
Test case tear down method (just
like JUnit 3).
- 14. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 14
Example JUnit Test (Continued)
public void testCheckNameClear() {
final EditText name = (EditText) activity.findViewById(R.id.nameEdit);
activity.runOnUiThread(new Runnable() {
public void run() {
name.requestFocus();
}
});
sendKeys("J I M");
Button button = (Button) activity.findViewById(R.id.clearButton);
TouchUtils.clickView(this, button);
assertTrue("First name field is not empty.", name.getText().toString().equals(""));
}
}
Grab widgets by
their Android ID.
Test methods must
begin with “test”.
UI adjustments/ work must
be done on UI thread
TestCase,
TouchUtils
provide limited UI
maneuvering, but
again requires
deep knowledge
of the UI details
Normal assert methods to
check results.
- 16. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 16
Why Android JUnit Isn’t Enough
• Requires deep knowledge of widgets
• Widget IDs
• Widget Properties
• What has focus
• Order of widgets
• Etc.
• Often requires deep knowledge of Android internals
• Especially around menus, dialogs, etc.
• Makes for brittle unit tests
• As the UI changes, the test often must change dramatically.
• Poor instrumentation
• Instrumentation is a feature in which specific monitoring of the interactions
between an application and the system are made possible.
• Use of runOnUIThread to execute UI work that isn’t covered by TouchUtils or
TestCase class.
- 17. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 17
Example Robotium
• Use Robotium tests in JUnit test class
• Same code as in TestDataCollectionActivity above…
• With a few additions/changes.
private Solo solo;
@Override
public void setUp() throws Exception {
super.setUp();
activity = getActivity();
solo= new Solo(getInstrumentation(), getActivity());
}
Add a Solo member
variable and initialize it
during setUp( ).
- 18. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 18
Example Robotium (Continued)
• The new test method – greatly simplified via Robotium!
public void testCheckNameClear() {
solo.enterText(0, "Jim"); // 0 is the index of the EditText field
solo.clickOnButton("Clear");
assertTrue("First name field is not empty.",solo.getEditText(0).
getText().toString().equals(""));
}
Solo methods allow
widgets to be selected
and interacted with.
- 20. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 20
Robotium Solo API
• Robotium is all baked into one class - Solo – with many methods:
• clickX methods: clickOnButton, clickOnImage, clickOnText,…
• clickLongX methods: clickLongInList, clickLongOnScreen,
clickLongOnText,…
• enterText
• drag
• getX methods: getButton, getCurrentActivity, getImage, getEditText, …
• goBack
• isX methods: isCheckBoxChecked, isRadioButtonChecked,
isSpinnerTextSelected, isTextChecked,…
• pressX methods: pressMenuItem, pressMenuItem, pressSpinnerItem, …
• scrollX methods: scrollToTop, scrollToBottom, …
• searchX methods: searchButton, searchEditText, searchText, …
• waitForX methods: waitForActivity, waitForText, …
- 22. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 22
Tips & Tricks
• Robotium (and all JUnit tests) operate in the same process (DVM) as
the original app
• Robotium only works with the activities and views within the defined app
• For example: Can’t use intent to launch another app and test activity
work from that app
• The popup keyboard is accomplished with a bitmap in Android
• Robotium (or any unit test software) doesn’t see the “keys” as buttons or
anything.
- 23. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 23
Tips & Tricks (Continued)
• Use waitFor methods liberally.
• Especially if new screen opens or changes to what is displayed are
occurring.
• The waitFor methods tell Robotium to wait for a condition to happen
before the execution continues.
public void testGoodLogin() {
solo.enterText(0, “username");
solo.enterText(1, “password");
String label = res.getString(R.string.login_button_label);
solo.clickOnButton(label);
String title = res.getString(R.string.title_activity_systemv);
solo.waitForText(title);
solo.assertCurrentActivity("systemv", SystemVActivity.class);
solo.getCurrentActivity().finish();
}
- 24. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 24
Tips & Tricks (Continued)
• RadioButtons are Buttons, EditText are Text, etc…
• Getting the proper widget by index can be more difficult
• Use of index also makes the test case more brittle due to potential layout
changes
• Consider clickOnButton(“Clear”) vs.
clickOnButton(6)
- 25. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 25
Tips & Tricks (Continued)
• Resources in Android are at a premium (especially when test cases
and App code are running in same DVM).
• Use solo.finishOpenedActivities() in your tearDown method.
• It closes all the opened activities.
• Frees resources for the next tests
• Robotium has some difficulty with animations
• Robotium doesn’t work with status bar notifications
- 26. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 26
Tips & Tricks – Black Box Testing
• Black Box Testing (when all you have is the APK file) is a little more
tricky.
• Recall in the demo, the test application wants the main activity name?
public TestDataCollectionActivity() {
super(DataCollectionActivity.class);
}
• You may not know this for a 3rd party/black box app.
• You can get the activity name by loading the APK to an AVD or device,
running it, and watching the logcat.
• The APK file has to have the same certificate signature as the test
project.
• Probably have to delete the signature and then resign the APK with the
Android debug key signature.
• It’s easier than it sounds. See referenced document for help.
- 27. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 27
Android Robotium Black Box Demo
Black Box
Demo
- 28. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 28
Robotium Additional Features
• Robotium can automatically take screenshots
• solo.takeScreenshot( )
• Robotium can be run from the command line (using adb shell)
• adb shell am instrument -w
com.android.foo/android.test.InstrumentationTestRunner
• Robotium can test with localized strings
• solo.getString(localized_resource_string_id)
• Code coverage is a bit lackluster at this time
• Can be done with special ant task and command line tools
• Robotium does not work on Flash or Web apps.
- 29. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 29
Complimentary Tools
• Robotium Testroid Recorder
• Record actions to generate Android JUnit/Robotium test cases
• Run tests on 180 devices “in the cloud”
• Testdroid.com
• Commercial product (50 runs free, $99/month or ¢99/run)
• Robotium Remote Control
• Allows Robotium test cases to be executed from the JVM (on a PC)
• This allows Robotium to work with JUnit 4.
• code.google.com/p/robotium/wiki/RemoteControl
- 30. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 30
Resources
• These slides and demo code: intertech.com/blog
• Google Robotium site
• code.google.com/p/robotium
• code.google.com/p/robotium/wiki/RobotiumTutorials
• Tutorial Articles/Blog Posts
• devblog.xing.com/qa/robotium-atxing/
• www.netmagazine.com/tutorials/automate-your-android-app-testing
• robotiumsolo.blogspot.com/2012/12/what-is-robotium.html
• www.vogella.com/articles/AndroidTesting/article.html
• robotium.googlecode.com/files/RobotiumForBeginners.pdf
• excellent article for black box testing when all you have is the APK
• Fundamentals of Android Unit Testing
• developer.android.com/tools/testing/testing_android.html
- 31. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 31
Q&A
• Questions – you got’em, I want’em
- 32. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 32
Award-Winning Training and Consulting.
Visit www.Intertech.com for complete details.
- 33. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 33
Intertech offers
Mobile Training On:
• Android
• HTML5
• iOS
• Java ME
• jQuery
• Windows Phone
Visit ww.Intertech.com for complete course schedule.
- 34. Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 34
Stop by Intertech’s
booth for a chance to
win FREE Training.
Or go to bit.ly.com/intertech-login