SlideShare a Scribd company logo
1 of 73
Download to read offline
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?

More Related Content

What's hot

Lijie xia lx223809 monkeyrunner
Lijie xia lx223809 monkeyrunnerLijie xia lx223809 monkeyrunner
Lijie xia lx223809 monkeyrunner
Lijie Xia
 

What's hot (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
 

Viewers also liked

Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in android
Jay Kumarr
 
Appium Mobile Test Automation like WebDriver
Appium Mobile Test Automation like WebDriverAppium Mobile Test Automation like WebDriver
Appium Mobile Test Automation like WebDriver
Andrii Dzynia
 

Viewers also liked (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
 

Similar to A guide to Android automated testing

automation framework
automation frameworkautomation framework
automation framework
ANSHU GOYAL
 

Similar to 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
 

Recently uploaded

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
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
 

Recently uploaded (20)

Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
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
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%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
 
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
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%+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...
 

A guide to Android automated testing