SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
A guide to automated
Android testing
by @darrillaga
Challenges
What to test
1. Utilities
2. Android components
3. UI
4. Expected user behavior
What to test
1. Utilities
2. Android components
3. UI
4. Expected user behavior
Utilities
Utilities are every piece of code, both pure java
and Android-dependant, that are used as tools
in the development process.
What to test
1. Utilities
2. Android components
3. UI
4. Expected user behavior
Android components
1. Activities
2. Fragments
3. Services
These are the most common components.
What to test
1. Utilities
2. Android components
3. UI
4. Expected user behavior
UI
UI specific behavior and custom views.
What to test
1. Utilities
2. Android components
3. UI
4. Expected user behavior
Expected user behavior
Functional testing on our activities, based on
expected behavior.
How to test
1. Using support libraries
2. Stub code we can’t control while testing
3. Decoupled code
4. Testing everything that could be error-prone
How to test
1. Using support libraries
2. Stub code we can’t control while testing
3. Decoupled code
4. Testing everything that could be error-prone
Using support libraries
1. Instrumentation
2. Android JUnit Runner
3. Espresso
4. UIAutomator
Using support libraries
1. Instrumentation
2. Android JUnit Runner
3. Espresso
4. UIAutomator
Instrumentation
This framework monitors all of the interaction
between the Android system and the
application.
Android testing libraries are built on top of the
Instrumentation framework.
Using support libraries
1. Instrumentation
2. Android JUnit Runner
3. Espresso
4. UIAutomator
AndroidJUnitRunner
JUnit test runner that lets you run JUnit 3 or JUnit 4-style
test classes on Android devices, including those using the
Espresso and UI Automator testing frameworks.
The test runner handles loading your test package and the
app under test to a device, running your tests, and
reporting test results.
Using support libraries
1. Instrumentation
2. Android JUnit Runner
3. Espresso
4. UIAutomator
Espresso
APIs for writing UI tests to simulate user interactions within
a single target app.
Provides automatic sync of test actions with the app’s UI.
Using support libraries
1. Instrumentation
2. Android JUnit Runner
3. Espresso
4. UIAutomator
UI Automator
This framework provides a set of APIs to build UI tests that
perform interactions on user apps and system apps.
The UI Automator APIs allows you to perform operations
such as opening the Settings menu or the app launcher in a
test device.
How to test
1. Using support libraries
2. Stub code we can’t control while testing
3. Decoupled code
4. Testing everything that could be error-prone
Stub code we can’t control with testing
1. Robospice
2. Card reader
3. Thermal printer SDK
4. Bluetooth
How to test
1. Using support libraries
2. Stub code we can’t control while testing
3. Decoupled code
4. Testing everything that could be error-prone
Decoupled code
1. Android components only in charge of
lifecycle
2. Layer for business logic
3. Layer modeling views
4. Create utilities for code that can be unit
tested
How to test
1. Using support libraries
2. Stub code we can’t control while testing
3. Decoupled code
4. Testing everything that could be error-prone
Testing everything that could be error-prone
1. Do not test getter/setters
2. Test code created by us
3. Do not test third-party code (stub it or let it
be)
Wrapping up
Android
Components
Utilities
Android system
UI
Stubs
Android
Components
Utilities
Android system
UI
Stubs
Android
Components
Utilities
Android system
UI
Stubs
Unit testing
● jUnit
● Instrumentation
jUnit
Unit test
private EmailValidator subject = new EmailValidator();
@Test
public void doesNotValidateWithInvalidEmail() {
String email = "invalidEmail";
assertThat(subject.isValid(email), is(false));
}
jUnit + Instrumentation
Unit test
// This component uses the Android framework out of our control so we need to use instrumentation to provide a context
private CurrentUserSessionService subject = new CurrentUserSessionService(InstrumentationRegistry.
getTargetContext());
@Test
public void isCurrentSessionPresentReturnsTrueWithCurrentUser() {
subject.saveUserSession(buildUserSession());
assertThat(subject.isCurrentSessionPresent(), is(true));
}
private UserSession buildUserSession() {
// creates stub user session instance
}
Android
Components
Utilities
Android system
UI
Stubs
Android
Components
Utilities
Android system
UI
Stubs
Using manual or library-assisted dependency injection to
switch dependencies for stubs when testing
Android
Components
Utilities
Android system
UI
Stubs
Android
Components
Utilities
Android system
UI
Stubs
Espresso to manipulate and unit-
test views in an isolated Activity
Android
Components
Utilities
Android system
UI
Stubs
Android
Components
Utilities
Android system
UI
Stubs
UI automator
Functional test of interactions
between the app and the Android
system
Android
Components
Utilities
Android system
UI
Stubs
Functional testing
● Espresso
● Espresso Intents
● Instrumentation
● Stubs
Functional test
@Test
public void unauthorizedUserLogin() {
registerInvalidCredentialsLoginRequest();
setUserAndPassword();
clickOnSignIn();
Context context = InstrumentationRegistry.getTargetContext();
String errorMessage = context.getString(R.string.InvalidCredentialsError);
onView(allOf(withText(errorMessage), withParent(withId(R.id.errors_wrapper)))).
check(matches(isDisplayed()));
}
LoginActivity - Android components + Stubs + Espresso + Instrumentation
Stub
LoginActivity
@Rule
public SpicedTestRule<LoginActivity> mTestRule = new SpicedTestRule<>(LoginActivity.class);
private void registerInvalidCredentialsLoginRequest() {
Charset utf8 = Charset.forName("utf-8");
mTestRule.registerResponseFor(
LoginRequest.class,
new HttpClientErrorException(
HttpStatus.BAD_REQUEST,
"error",
FixturesLoader.getFixtures().get("AuthenticatePasswordInvalidCredentialsErrorResponse"),
utf8
)
);
}
Stub
LoginActivity
@Rule
public SpicedTestRule<LoginActivity> mTestRule = new SpicedTestRule<>(LoginActivity.class);
private void registerInvalidCredentialsLoginRequest() {
Charset utf8 = Charset.forName("utf-8");
mTestRule.registerResponseFor(
LoginRequest.class,
new HttpClientErrorException(
HttpStatus.BAD_REQUEST,
"error",
FixturesLoader.getFixtures().get("AuthenticatePasswordInvalidCredentialsErrorResponse"),
utf8
)
);
}
Functional test
@Test
public void unauthorizedUserLogin() {
registerInvalidCredentialsLoginRequest();
setUserAndPassword();
clickOnSignIn();
Context context = InstrumentationRegistry.getTargetContext();
String errorMessage = context.getString(R.string.InvalidCredentialsError);
onView(allOf(withText(errorMessage), withParent(withId(R.id.errors_wrapper)))).
check(matches(isDisplayed()));
}
LoginActivity
Functional test
@Test
public void unauthorizedUserLogin() {
registerInvalidCredentialsLoginRequest();
setUserAndPassword();
clickOnSignIn();
Context context = InstrumentationRegistry.getTargetContext();
String errorMessage = context.getString(R.string.InvalidCredentialsError);
onView(allOf(withText(errorMessage), withParent(withId(R.id.errors_wrapper)))).
check(matches(isDisplayed()));
}
LoginActivity
Espresso Usage
private UserSession mUserSession = CurrentUserSessionTestHelper.buildUserSession();
private void setUserAndPassword() {
onView(ViewMatchers.withId(R.id.email)).perform(typeText(mUserSession.getEmail()));
onView(withId(R.id.password)).perform(typeText("password"));
}
private void clickOnSignIn() {
onView(withId(R.id.action_login)).perform(click());
}
LoginActivity
Instrumentation
@Test
public void unauthorizedUserLogin() {
registerInvalidCredentialsLoginRequest();
setUserAndPassword();
clickOnSignIn();
Context context = InstrumentationRegistry.getTargetContext();
String errorMessage = context.getString(R.string.InvalidCredentialsError);
onView(allOf(withText(errorMessage), withParent(withId(R.id.errors_wrapper)))).
check(matches(isDisplayed()));
}
LoginActivity
Instrumentation
@Test
public void unauthorizedUserLogin() {
registerInvalidCredentialsLoginRequest();
setUserAndPassword();
clickOnSignIn();
Context context = InstrumentationRegistry.getTargetContext();
String errorMessage = context.getString(R.string.InvalidCredentialsError);
onView(allOf(withText(errorMessage), withParent(withId(R.id.errors_wrapper)))).
check(matches(isDisplayed()));
}
LoginActivity
Espresso usage
@Test
public void unauthorizedUserLogin() {
registerInvalidCredentialsLoginRequest();
setUserAndPassword();
clickOnSignIn();
Context context = InstrumentationRegistry.getTargetContext();
String errorMessage = context.getString(R.string.InvalidCredentialsError);
onView(allOf(withText(errorMessage), withParent(withId(R.id.errors_wrapper)))).
check(matches(isDisplayed()));
}
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Espresso usage
onView(
allOf(
withText(errorMessage),
withParent(
withId(R.id.errors_wrapper)
)
)
).check(
matches(
isDisplayed()
)
);
LoginActivity
Intents
Functional test - Landing Activity
@Test
public void testOnEnterAction() {
Intent result = new Intent();
intending(hasComponent(hasClassName(equalTo(LoginActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_OK, result)
);
intending(hasComponent(hasClassName(equalTo(HomeActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, null)
);
clickOn(R.id.action_enter);
intended(hasComponent(hasClassName(equalTo(HomeActivity.class.getName()))));
}
Intents
Functional test - Landing Activity
@Test
public void testOnEnterAction() {
Intent result = new Intent();
intending(hasComponent(hasClassName(equalTo(LoginActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_OK, result)
);
intending(hasComponent(hasClassName(equalTo(HomeActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, null)
);
clickOn(R.id.action_enter);
intended(hasComponent(hasClassName(equalTo(HomeActivity.class.getName()))));
}
Intents
Functional test - Landing Activity
@Test
public void testOnEnterAction() {
Intent result = new Intent();
intending(hasComponent(hasClassName(equalTo(LoginActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_OK, result)
);
intending(hasComponent(hasClassName(equalTo(HomeActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, null)
);
clickOn(R.id.action_enter);
intended(hasComponent(hasClassName(equalTo(HomeActivity.class.getName()))));
}
Intents
Functional test - Landing Activity
@Test
public void testOnEnterAction() {
Intent result = new Intent();
intending(hasComponent(hasClassName(equalTo(LoginActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_OK, result)
);
intending(hasComponent(hasClassName(equalTo(HomeActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, null)
);
clickOn(R.id.action_enter);
intended(hasComponent(hasClassName(equalTo(HomeActivity.class.getName()))));
}
Intents
Functional test - Landing Activity
@Test
public void testOnEnterAction() {
Intent result = new Intent();
intending(hasComponent(hasClassName(equalTo(LoginActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_OK, result)
);
intending(hasComponent(hasClassName(equalTo(HomeActivity.class.getName())))).
respondWith(
new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, null)
);
clickOn(R.id.action_enter);
intended(hasComponent(hasClassName(equalTo(HomeActivity.class.getName()))));
}
Android
Components
Utilities
Android system
UI
Stubs
Android
Components
Utilities
Android system
UI
Stubs
Unit testing
● jUnit
● Instrumentation
Android
Components
Utilities
Android system
UI
Stubs
Using manual or library-assisted dependency injection to
switch dependencies for stubs when testing
Unit testing
● jUnit
● Instrumentation
Android
Components
Utilities
Android system
UI
Stubs
Espresso to manipulate and unit-
test views in an isolated Activity
Using manual or library-assisted dependency injection to
switch dependencies for stubs when testing
Unit testing
● jUnit
● Instrumentation
Android
Components
Utilities
Android system
UI
Stubs
Espresso to manipulate and unit-
test views in an isolated Activity
UI automator
Functional test of interactions
between the app and the Android
system
Using manual or library-assisted dependency injection to
switch dependencies for stubs when testing
Unit testing
● jUnit
● Instrumentation
Android
Components
Utilities
Android system
UI
Stubs
Espresso to manipulate and unit-
test views in an isolated Activity
Functional testing
● Espresso
● Espresso Intents
● Instrumentation
● Stubs
UI automator
Functional test of interactions
between the app and the Android
system
Using manual or library-assisted dependency injection to
switch dependencies for stubs when testing
Unit testing
● jUnit
● Instrumentation
...then 2 + 2 = 4 so...
We can test on Android!
References
https://developer.android.com/training/testing.html
http://developer.android.com/reference/android/app/Instrumentation.html
https://developer.android.com/tools/testing-support-library/index.html
Thanks to
Ariel, Gian, Juanma, Michel
@moove_it
Questions?

Contenu connexe

Tendances

Robotium at Android Only 2010-09-29
Robotium at Android Only 2010-09-29Robotium at Android Only 2010-09-29
Robotium at Android Only 2010-09-29Hugo Josefson
 
Android Automation Using Robotium
Android Automation Using RobotiumAndroid Automation Using Robotium
Android Automation Using RobotiumMindfire Solutions
 
Testing android apps with espresso
Testing android apps with espressoTesting android apps with espresso
Testing android apps with espressoÉdipo Souza
 
Unit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfUnit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfKaty Slemon
 
Lijie xia lx223809 monkeyrunner
Lijie xia lx223809 monkeyrunnerLijie xia lx223809 monkeyrunner
Lijie xia lx223809 monkeyrunnerLijie Xia
 
Testing Android
Testing AndroidTesting Android
Testing AndroidMarc Chung
 
Test Automation On Android Platform Using Robotium
Test Automation On Android Platform Using RobotiumTest Automation On Android Platform Using Robotium
Test Automation On Android Platform Using RobotiumIndicThreads
 
Advance UIAutomator : Documentaion
Advance UIAutomator : DocumentaionAdvance UIAutomator : Documentaion
Advance UIAutomator : DocumentaionRaman Gowda Hullur
 
Innovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best PracticesInnovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best PracticesSolstice Mobile Argentina
 
Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?Bitbar
 
Utilizando expresso uiautomator na automacao de testes em apps android
Utilizando expresso uiautomator na automacao de testes em apps androidUtilizando expresso uiautomator na automacao de testes em apps android
Utilizando expresso uiautomator na automacao de testes em apps androidtdc-globalcode
 
Android automation tools
Android automation toolsAndroid automation tools
Android automation toolsSSGMCE SHEGAON
 
100 effective software testing tools that boost your Testing
100 effective software testing tools that boost your Testing100 effective software testing tools that boost your Testing
100 effective software testing tools that boost your TestingBugRaptors
 
MonkeyTalk Documentation
MonkeyTalk DocumentationMonkeyTalk Documentation
MonkeyTalk DocumentationVivek Pansara
 
Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021Svetlin Nakov
 
Mobile App Testing ScanAgile 2012
Mobile App Testing ScanAgile 2012Mobile App Testing ScanAgile 2012
Mobile App Testing ScanAgile 2012Daniel Knott
 

Tendances (20)

Robotium at Android Only 2010-09-29
Robotium at Android Only 2010-09-29Robotium at Android Only 2010-09-29
Robotium at Android Only 2010-09-29
 
Android Automation Using Robotium
Android Automation Using RobotiumAndroid Automation Using Robotium
Android Automation Using Robotium
 
Dagger for android
Dagger for androidDagger for android
Dagger for android
 
Testing android apps with espresso
Testing android apps with espressoTesting android apps with espresso
Testing android apps with espresso
 
Robotium - sampath
Robotium - sampathRobotium - sampath
Robotium - sampath
 
Unit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfUnit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdf
 
Lijie xia lx223809 monkeyrunner
Lijie xia lx223809 monkeyrunnerLijie xia lx223809 monkeyrunner
Lijie xia lx223809 monkeyrunner
 
Testing Android
Testing AndroidTesting Android
Testing Android
 
Test Automation On Android Platform Using Robotium
Test Automation On Android Platform Using RobotiumTest Automation On Android Platform Using Robotium
Test Automation On Android Platform Using Robotium
 
UIAutomator
UIAutomatorUIAutomator
UIAutomator
 
Advance UIAutomator : Documentaion
Advance UIAutomator : DocumentaionAdvance UIAutomator : Documentaion
Advance UIAutomator : Documentaion
 
Innovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best PracticesInnovation Generation - The Mobile Meetup: Android Best Practices
Innovation Generation - The Mobile Meetup: Android Best Practices
 
Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?Different Android Test Automation Frameworks - What Works You the Best?
Different Android Test Automation Frameworks - What Works You the Best?
 
Utilizando expresso uiautomator na automacao de testes em apps android
Utilizando expresso uiautomator na automacao de testes em apps androidUtilizando expresso uiautomator na automacao de testes em apps android
Utilizando expresso uiautomator na automacao de testes em apps android
 
Android automation tools
Android automation toolsAndroid automation tools
Android automation tools
 
100 effective software testing tools that boost your Testing
100 effective software testing tools that boost your Testing100 effective software testing tools that boost your Testing
100 effective software testing tools that boost your Testing
 
MonkeyTalk Documentation
MonkeyTalk DocumentationMonkeyTalk Documentation
MonkeyTalk Documentation
 
Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021
 
Mobile App Testing ScanAgile 2012
Mobile App Testing ScanAgile 2012Mobile App Testing ScanAgile 2012
Mobile App Testing ScanAgile 2012
 
Espresso
EspressoEspresso
Espresso
 

En vedette

Product Testing and Refinement
Product Testing and RefinementProduct Testing and Refinement
Product Testing and RefinementChris Cera
 
Using GUI Ripping for Automated Testing of Android Apps
Using GUI Ripping for Automated Testing of Android AppsUsing GUI Ripping for Automated Testing of Android Apps
Using GUI Ripping for Automated Testing of Android AppsPorfirio Tramontana
 
Unit testing and Android
Unit testing and AndroidUnit testing and Android
Unit testing and AndroidTomáš Kypta
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsDominik Dary
 
Product Testing: Methodological Issues & Design Considerations
Product Testing: Methodological Issues & Design ConsiderationsProduct Testing: Methodological Issues & Design Considerations
Product Testing: Methodological Issues & Design ConsiderationsT.S. Lim
 
Mobile automation – should I use robotium or calabash or appium?
Mobile automation – should I use robotium or calabash or appium?Mobile automation – should I use robotium or calabash or appium?
Mobile automation – should I use robotium or calabash or appium?Zado Technologies
 
Android Building, Testing and reversing
Android Building, Testing and reversingAndroid Building, Testing and reversing
Android Building, Testing and reversingEnrique López Mañas
 
Applied Testing Heuristics in the Context of eBay
Applied Testing Heuristics in the Context of eBayApplied Testing Heuristics in the Context of eBay
Applied Testing Heuristics in the Context of eBayDominik Dary
 
Android Test Automation – one year later
Android Test Automation – one year laterAndroid Test Automation – one year later
Android Test Automation – one year laterDominik Dary
 
How ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second EditionHow ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second Editionpenanochizzo
 
Testing Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam editionTesting Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam editionJose Manuel Ortega Candel
 
Android & iPhone App Testing
 Android & iPhone App Testing Android & iPhone App Testing
Android & iPhone App TestingSWAAM Tech
 
Choosing the Best Open Source Test Automation Tool for You
Choosing the Best Open Source Test Automation Tool for YouChoosing the Best Open Source Test Automation Tool for You
Choosing the Best Open Source Test Automation Tool for YouPerfecto by Perforce
 
Boston meetup blaze_meter_feb2017
Boston meetup blaze_meter_feb2017Boston meetup blaze_meter_feb2017
Boston meetup blaze_meter_feb2017Perfecto Mobile
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in androidJay Kumarr
 
Appium Mobile Test Automation like WebDriver
Appium Mobile Test Automation like WebDriverAppium Mobile Test Automation like WebDriver
Appium Mobile Test Automation like WebDriverAndrii Dzynia
 

En vedette (20)

Product Testing and Refinement
Product Testing and RefinementProduct Testing and Refinement
Product Testing and Refinement
 
How To Improve Your Product Testing Program
How To Improve Your Product Testing ProgramHow To Improve Your Product Testing Program
How To Improve Your Product Testing Program
 
Product testing methodology & how to conduct a product test
Product testing methodology & how to conduct a product testProduct testing methodology & how to conduct a product test
Product testing methodology & how to conduct a product test
 
Using GUI Ripping for Automated Testing of Android Apps
Using GUI Ripping for Automated Testing of Android AppsUsing GUI Ripping for Automated Testing of Android Apps
Using GUI Ripping for Automated Testing of Android Apps
 
Testing Android Security
Testing Android SecurityTesting Android Security
Testing Android Security
 
Testing With Open Source
Testing With Open SourceTesting With Open Source
Testing With Open Source
 
Unit testing and Android
Unit testing and AndroidUnit testing and Android
Unit testing and Android
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
 
Product Testing: Methodological Issues & Design Considerations
Product Testing: Methodological Issues & Design ConsiderationsProduct Testing: Methodological Issues & Design Considerations
Product Testing: Methodological Issues & Design Considerations
 
Mobile automation – should I use robotium or calabash or appium?
Mobile automation – should I use robotium or calabash or appium?Mobile automation – should I use robotium or calabash or appium?
Mobile automation – should I use robotium or calabash or appium?
 
Android Building, Testing and reversing
Android Building, Testing and reversingAndroid Building, Testing and reversing
Android Building, Testing and reversing
 
Applied Testing Heuristics in the Context of eBay
Applied Testing Heuristics in the Context of eBayApplied Testing Heuristics in the Context of eBay
Applied Testing Heuristics in the Context of eBay
 
Android Test Automation – one year later
Android Test Automation – one year laterAndroid Test Automation – one year later
Android Test Automation – one year later
 
How ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second EditionHow ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second Edition
 
Testing Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam editionTesting Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam edition
 
Android & iPhone App Testing
 Android & iPhone App Testing Android & iPhone App Testing
Android & iPhone App Testing
 
Choosing the Best Open Source Test Automation Tool for You
Choosing the Best Open Source Test Automation Tool for YouChoosing the Best Open Source Test Automation Tool for You
Choosing the Best Open Source Test Automation Tool for You
 
Boston meetup blaze_meter_feb2017
Boston meetup blaze_meter_feb2017Boston meetup blaze_meter_feb2017
Boston meetup blaze_meter_feb2017
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in android
 
Appium Mobile Test Automation like WebDriver
Appium Mobile Test Automation like WebDriverAppium Mobile Test Automation like WebDriver
Appium Mobile Test Automation like WebDriver
 

Similaire à A guide to Android automated testing

Dive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceDive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceOleksii Prohonnyi
 
Testing Android Application, Droidcon Torino
Testing Android Application, Droidcon TorinoTesting Android Application, Droidcon Torino
Testing Android Application, Droidcon TorinoPietro Alberto Rossi
 
QTP 10.0_Kalyan Chakravarthy.ppt
QTP 10.0_Kalyan Chakravarthy.pptQTP 10.0_Kalyan Chakravarthy.ppt
QTP 10.0_Kalyan Chakravarthy.pptKalyan Chakravarthy
 
Open Source Software Testing Tools
Open Source Software Testing ToolsOpen Source Software Testing Tools
Open Source Software Testing ToolsVaruna Harshana
 
Overview the Challenges and Limitations of Android App Automation with Espres...
Overview the Challenges and Limitations of Android App Automation with Espres...Overview the Challenges and Limitations of Android App Automation with Espres...
Overview the Challenges and Limitations of Android App Automation with Espres...Sauce Labs
 
Mobile automation testing with selenium and appium
Mobile automation testing with selenium and appiumMobile automation testing with selenium and appium
Mobile automation testing with selenium and appiumBugRaptors
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosFlutter Agency
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appiumPratik Patel
 
Android 101 Session @thejunction32
Android 101 Session @thejunction32Android 101 Session @thejunction32
Android 101 Session @thejunction32Eden Shochat
 
Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...
Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...
Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...DicodingEvent
 
Building And Executing Test Cases with Appium and Various Test Frameworks.pdf
Building And Executing Test Cases with Appium and Various Test Frameworks.pdfBuilding And Executing Test Cases with Appium and Various Test Frameworks.pdf
Building And Executing Test Cases with Appium and Various Test Frameworks.pdfpCloudy
 
automation framework
automation frameworkautomation framework
automation frameworkANSHU GOYAL
 
IRJET- Automatic Device Functional Testing
IRJET- Automatic Device Functional TestingIRJET- Automatic Device Functional Testing
IRJET- Automatic Device Functional TestingIRJET Journal
 
DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...
DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...
DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...Journal For Research
 
Qa case study
Qa case studyQa case study
Qa case studyhopperdev
 
IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...
IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...
IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...IRJET Journal
 

Similaire à A guide to Android automated testing (20)

Dive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceDive into Angular, part 5: Experience
Dive into Angular, part 5: Experience
 
Testing Android Application, Droidcon Torino
Testing Android Application, Droidcon TorinoTesting Android Application, Droidcon Torino
Testing Android Application, Droidcon Torino
 
QTP 10.0_Kalyan Chakravarthy.ppt
QTP 10.0_Kalyan Chakravarthy.pptQTP 10.0_Kalyan Chakravarthy.ppt
QTP 10.0_Kalyan Chakravarthy.ppt
 
Open Source Software Testing Tools
Open Source Software Testing ToolsOpen Source Software Testing Tools
Open Source Software Testing Tools
 
Overview the Challenges and Limitations of Android App Automation with Espres...
Overview the Challenges and Limitations of Android App Automation with Espres...Overview the Challenges and Limitations of Android App Automation with Espres...
Overview the Challenges and Limitations of Android App Automation with Espres...
 
Mobile automation testing with selenium and appium
Mobile automation testing with selenium and appiumMobile automation testing with selenium and appium
Mobile automation testing with selenium and appium
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appium
 
Uft Basics
Uft BasicsUft Basics
Uft Basics
 
SDET UNIT 4.pptx
SDET UNIT 4.pptxSDET UNIT 4.pptx
SDET UNIT 4.pptx
 
Android 101 Session @thejunction32
Android 101 Session @thejunction32Android 101 Session @thejunction32
Android 101 Session @thejunction32
 
Functional Testing
Functional TestingFunctional Testing
Functional Testing
 
Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...
Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...
Play with Testing on Android - Gilang Ramadhan (Academy Content Writer at Dic...
 
Building And Executing Test Cases with Appium and Various Test Frameworks.pdf
Building And Executing Test Cases with Appium and Various Test Frameworks.pdfBuilding And Executing Test Cases with Appium and Various Test Frameworks.pdf
Building And Executing Test Cases with Appium and Various Test Frameworks.pdf
 
automation framework
automation frameworkautomation framework
automation framework
 
IRJET- Automatic Device Functional Testing
IRJET- Automatic Device Functional TestingIRJET- Automatic Device Functional Testing
IRJET- Automatic Device Functional Testing
 
DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...
DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...
DEPLOYMENT OF CALABASH AUTOMATION FRAMEWORK TO ANALYZE THE PERFORMANCE OF AN ...
 
Qa case study
Qa case studyQa case study
Qa case study
 
IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...
IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...
IRJET - A Valuable and Speculative Approach to Manage the Item Testing by usi...
 
SE2011_10.ppt
SE2011_10.pptSE2011_10.ppt
SE2011_10.ppt
 

Dernier

%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...chiefasafspells
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 

Dernier (20)

%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 

A guide to Android automated testing