Rockstar Android Testing (Mobile TechCon Munich 2014)
-
Upload
danny-preussler -
Category
Technology
-
view
1.503 -
download
4
description
Transcript of Rockstar Android Testing (Mobile TechCon Munich 2014)
Danny Preussler | Groupon
Rockstar Android Testing
about me
• Android Engineer @ Groupon • Lead Engineer Android @ ebay Kleinanzeigen • Team Lead Mobile @ Cortado • C++ Developer @ PSI AG • Started career as developer @ Alcatel
• Articles in: android360, mobile Technology, Java Magazin • Speaker: DroidCon.de/nl, CONFESS, Blackberry DevCon
Believer in Testing
3 Sources: Internal Data; iTunes ranking for US stores available here - https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewFeature?id=500873243&mt=8&v0=www-itunes25Bcountdown-appstore
Nearly 70 million people worldwide have downloaded our mobile app to date; 9 million in Q4 2013.
One of the 25 most downloaded free apps of all time
Nearly 50% of our global transactions completed on a mobile device in December 2013
a mobile company
Our mobile app is available in 43 countries
Android Testing?
Android Firewall by Uncalno, CC BY 2.0 flickr.com/photos/uncalno/8538679708
Robotium
Appium
Calabash
Robolectric
Espresso
Cloud
Crowd
Real Device?
uiautomator
monkeyrunner
Emulator
Selenium?
InstrumentationTest
Rockstar Testing? • Fast! Faster! • Reliable! • Scalable!
Acrassicau 6 by Bruce Martin, CC BY 2.0, https://www.flickr.com/photos/shotbydarko/4692892946/
InstrumentationTests vs uiautomator
• Base for most frameworks
• Understand the differences!
Android Activity Tests
• JUnit3 Tests
• Android Project (android application)
• Tight coupling to app under test (project needed)
• Direct access to activities (find element by id)
Android Activity Tests
public class MyActivityTest extends ActivityInstrumentationTestCase2<MyActivity> { ... public void testButtons() { MyActivity activity = getActivity(); Button view = (Button)
activity.findViewById(R.id.button1); assertEquals("My Button", view.getText()); }
Robotium
• Based on Intrumentation Tests
• Removes complexity
• Very popular (used to be the standard)
Robotium
public class SimpleActivityTest extends ActivityInstrumentationTestCase2<MyActivity> { ... public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); } public void testPressButton() throws Exception { solo.clickOnButton("press me"); assertTrue(solo.waitForText("New Window"));
UIAutomator
• JUnit3 Tests
• Java Project
• Simple API
• Can access everything on device a user can
• Loose coupling to app under test
UIAutomator public class LaunchSettings extends UiAutomatorTestCase { public void testPressButton() throws UiObjectNotFoundException {
getUiDevice().pressHome(); ... find and start app
UiObject button = new UiObject( new UiSelector().text(“clickMe"); button.clickAndWaitForNewWindow();
UIAutomator
• Blackbox Testing
• Can only access what is visible
• API 16+
InstrumentationTests vs uiautomator
• Understand the differences
Device
Application Under Test
uiatuomator
Device
Instrumentaion Application Under Test
apps apps
apps
Other Basics...
• Calabash: BDD Given I am a valid user And I press "Login" Then I see "Welcome to coolest app ever”
• Robolectric: unit testing
• Monkey Runner
That‘s not rock star testing!
Guitar Hero!!! By JoshBerglund19, CC BY 2.0 https://www.flickr.com/photos/tyrian123/131634756
What about Selenium?
• Any language
• Any test framework
• Selenium Client API (Json Wire Protocol)
• Scale and parallize via Selenium Grid
In Theory:
• Used by eBay, Facebook source: https://github.com/selendroid/selendroid/blob/master/AUTHORS
• Open Source
Appium • Used by
Expedia, LinkedIn, Brands4friends • Rising Star • Open Source • Cross platform • Based on ui automator
Rock without
Selenium?
• Used by: Groupon
• Open Sourced recently
• Remote Control your tests
RoboRemote
RoboRemote Architecture
Page 23
Computer/Build Server Device/Emulator
Application Under Test
RoboRemoteServer
Robotium
UIAutomatorClient
Legend Tests Groupon Test Engineering Tests Application Developer/Tester Tests Open Source
RoboRemoteClient
UIAutomatorServer
UIAutomator
Tests
RoboRemote Sample
• RoboRemote: UIAutomator UiObject myLabel = new UiObject( new UiSelector() .call(“className”, ”android.widget.TextView”) .call(“text”, “My Text”)); myLabel.call(“click”);
UiObject myLabel = new UiObject( new UiSelector() .className(”android.widget.TextView”) .text(“My Text”)); myLabel.click();
• UIAutomator
• Man in the Middle HTTP Proxy
with REST API
• Single war-file
• Open Sourcing planned
RoboRemote + Odo
Response Override
• Custom (stub) response • Modify response contents
• Change HTTP response code
• Add Delay
Odo-ed
(…“soldOut”:“false”,…) (“soldOut”:“true”,…)
RoboRemote • RoboRemote Github:
https://github.com/groupon/robo-remote • Maven:
http://search.maven.org/ - search|ga|1|roboremote
This was QA view. What about developers?
• Used by: Google, XING, mobile.de, eBay Kleinanzeigen
• Open Sourced October 2013 • Based on Instrumentation
Simple! Reliable! Fast!
ViewMatcher ->ViewAction ->ViewAssert
Simple
onView(withId(R.id.myview)) .perform(click()) .check(matches(isDisplayed()));
Simple
Use Power of Hamcrest Matcher
Simple
Waiting is the root of all evil!
Evil face in Ninnaji Temple, Kyoto by MrHicks46, CC BY 2.0, http://www.flickr.com/photos/teosaurio/10138704345/
• No „wait()“ in Espresso API!
Speed
• Instead: – Operation on UIThread – Wait until idle – Action on UI Thread – Wait until idle – Check Result
Speed
• What is idle? – UI Thread – AsyncTask – ???? via IdleResource
Speed
• Removed flakyness of sleeping • Improved Testrunner
Reliable
Broken Blackberry by Matthew Hurst, CC BY 2.0, http://www.flickr.com/photos/skewgee/3160670483
• Used by: Google, Paypal, facebook, Cisco, LinkedIn, eBay, BMW, Intel, Evernote (source http://testdroid.com/products/success-stories)
• Real devices in the cloud • Works with:
Espresso, uiautomator, Calabash, Appium, Robotium + x
• Example via Gradle: ... apply plugin: 'testdroid‘ testdroid { ... deviceGroup "10_inch_tablets" deviceLanguageCode "de-DE" fullRunConfig { instrumentationRunner = “... GoogleInstrumentationTestRunner" } }
Source: http://help.testdroid.com
http://testdroid.com/testautomatisierung Try it and get a free shirt:
So what is the ultimate
rock star test tool now?
Fazit? Check your needs and your Resources!
Rock Concert! By Richard Elzey, CC BY 2.0,https://www.flickr.com/photos/elzey/5728003919
Thanks!
Let’s rock test!
46
mobile rockstars
• Michael Burton Creator of Roboguice Author of „Android Application Development for Dummies“
• Carlos Sessa Author of „50 Android Hacks“
https://engineering.groupon.com/
https://github.com/groupon
More Links • http://developer.android.com/tools/testing/testing_ui.html • https://code.google.com/p/robotium/ • https://github.com/calabash/calabash-android • http://selendroid.io/ • https://github.com/appium/appium • https://plus.google.com/+StephanLinzner/posts/HhXutBz7tcV- • https://code.google.com/p/android-test-kit/wiki/Espresso • https://code.google.com/p/hamcrest/ • https://cloud.testdroid.com