SlideShare a Scribd company logo
How to Define Mobile Test 
Automation Strategy 
Serhat BOLSU – Selin GUNGOR – Erol SELITEKTAY
Selin Güngör 
Software Test Engineer 
ÇiçekSepeti.com / Bright E-Ventures
Serhat Bolsu 
Service & QA Manager 
tmob 
References
Erol Selitektay 
Quality Assurance Engineer 
VNGRS
Outline 
Decision to Automate 
Mobile Challenges 
Demo 
Mobile Automation Approaches 
Continuous Integration 
A Fine Approach
Decision to Automate 
Aim of Automation 
Reduce Regression Cost 
Device Support 
Better Quality 
Early Detection 
3500 
3000 
2500 
2000 
1500 
1000 
500 
0 
1 2 3 4 5 6 7 8 9 10 11 
Android/iOS 
Platform 2x 
Phones Manual 
Android/iOS 
Platform 2x 
Phones 
Automated 
900 
800 
700 
600 
500 
400 
300 
200 
100 
0 
1 2 3 4 5 6 7 8 9 10 11 
Thousands 
Manual 1 
Platform 
Automated Multi 
Platform
Decision to Automate 
What to Automate 
Stable Version 
Test Types 
• Regression Testing 
• Smoke Test 
• Performance & Load Testing 
Regression Testing 
Performance & Load Testing Smoke Testing
Decision to Automate 
Profiles
Mobile Challenges 
Device Diversity Multi Platform Hardware 
Dependencies 
Network 
1112. 8d6if3fe Dreisnttin Acnt dArnodidro viedr Dsioevnisc essu pbpyo 2r0te1d3 boyn Gthoeo mglea r ket.
Mobile Challenges 
App-Behaviour 
1 1 
2
Easy to Debug 
Ideal Case 
Automation 
Requirements 
Support Integration 
to Third Party Libraries 
Easy to Use 
Sustainable 
Maintainable 
Human Readable 
Support CI Tools
Test automation is a software development process. 
Test automation projects often fail because of a lack of 
discipline and project management. Many testers don’t realize 
that when they automate tests they’re actually developing 
software. 
Lessons Learned in Software Testing 
Authors: Cem Kaner, James Bach and Bret Pettichord
Automation is Software Development 
login(); 
searchItem(); 
addToBasket(); 
buyWithMoneyOrder();
Automation is Software Development 
//Login 
driver.driver.get("get("http://http://somewebsite.somewebsite.com"); 
com"); 
WebElement WebElement signIn signIn = driver.= driver.findElement(findElement(By.linkText("By.SIGN linkText("IN").click(); 
SIGN IN").click(); 
WebElement email= driver.findElement(By.id("email")).sendKeys("someemail@address.com"); 
WebElement WebElement password email= = driver.driver.findElement(findElement(By.id("By.password")).id("email")).sendKeys("sendKeys("somepassword"); 
someemail@address.com"); 
WebElement WebElement submitButton password = = driver.driver.findElement(findElement(By.id("By.submit_id("password")).form")).click(); 
sendKeys("somepassword"); 
WebElement Wait<WebDriver> submitButton wait = new WebDriverWait(= driver.findElement(driver, 10); 
By.id("submit_form")).click(); 
//WebElement Search resim Item 
=wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("img[alt='Dracena Massengena İkili']"))); 
WebElement city = wait.until(visibilityOfElementLocated(By.className("select2-choice"))).click(); 
Wait<WebElement WebDriver> dist = wait.wait until(= ExpectedConditions.new WebDriverWait(visibilityOfElementLocated(driver, 10); 
By.className("select2-default"))).click(); 
WebElement WebElement distbox resim = driver.=wait.findElement(until(ExpectedConditions.By.className("select2-visibilityOfElementLocated(focused")).sendKeys("AKSARAY"); 
By.cssSelector("img[alt='Dracena Massengena İkili']"))); 
WebElement cldist = driver.findElement(By.className("select2-result-label")).click(), 
//WebElement Add to picerd Basket 
= driver.findElement(By.id("prdatepicker")).click(); 
WebElement WebElement selectd city = = driver.wait.until(findElement(visibilityOfElementLocated(By.linkText("30")).click(); 
By.className("select2-choice"))).click(); 
WebElement AddBasket=driver.findElement(By.id("addToBasket")).click(); 
WebElement dist = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("select2-default"))).click(); 
WebElement SatinAl = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='Basket']/div[2]/div[2]/input"))).click(); 
WebElement WebElement EkUrun distbox = wait.= until(driver.ExpectedConditions.findElement(By.visibilityOfElementLocated(className("select2-focused")).By.xpath("(//button[@sendKeys("type='AKSARAY"); 
button'])[5]"))).click(); 
WebElement cldist = driver.findElement(By.className("select2-result-label")).click(), 
WebElement picerd = driver.findElement(By.id("prdatepicker")).click(); 
WebElement selectd = driver.findElement(By.linkText("30")).click(); 
WebElement AddBasket=driver.findElement(By.id("addToBasket")).click(); 
//Buy with Money Order 
WebElement SatinAl = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='Basket']/div[2]/div[2]/input"))).click(); 
WebElement EkUrun = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//button[@type='button'])[5]"))).click(); 
public LoginPage login(){ 
driver.get("http://somewebsite.com"); 
WebElement signIn = driver.findElement(By.linkText("SIGN IN").click(); 
WebElement email= driver.findElement(By.id("email")).sendKeys("someemail@address.com"); 
WebElement password = driver.findElement(By.id("password")).sendKeys("somepassword"); 
WebElement submitButton = driver.findElement(By.id("submit_form")).click(); 
return new HomePage(driver) 
} 
login(); 
public SearchPage searchItem(){ 
. 
. 
. 
searchItem(); 
ilerle1=driver.findElement(By.cssSelector("button.goNext.sendAddition")).click(); 
} 
public ProductDetailPage addBasket(){ 
. 
. 
. 
} 
public OrderPage buyWithMoneyOrder(){ 
. 
. 
. 
} 
WebElement UyeOlmaDevam= wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Üye olmadan devam et"))).click(); 
WebElement AliciName= wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("OrderProducts_1__ReceiverModel_OrderReceiver_NameRec"))).sendKeys("Selenium 
Test "); 
WebElement WebElement addToBasket(); 
AliciTel=driver.findElement(By.xpath("//*[@id='OrderProducts_1__ReceiverModel_OrderReceiver_PhoneRec']")).sendKeys("11111111111111111111"); 
AliciAdres = driver.findElement(By.id("OrderProducts_1__ReceiverModel_OrderReceiver_AddressLineRec")).sendKeys("Selenium Test Adress"); 
WebElement ilerle2= driver.findElement(By.cssSelector("button.goNext.sendRec")).click(); 
WebElement ilerle3 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button.goNext.sendCardMessage"))).click(); 
WebElement FaturaAd = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("InvoiceInfoViewModel_Order_SenderName"))).sendKeys("Selenium Test Fatura Ad"); 
WebElement FaturaTel ilerle1== driver.driver.findElement(findElement(By.id("By.InvoiceInfoViewModel_cssSelector("button.Order_goNext.SenderPhone")).sendAddition")).sendKeys("click(); 
111111111111"); 
WebElement buyWithMoneyOrder(); 
FaturaEmail=driver.findElement(By.id("InvoiceInfoViewModel_Email")).sendKeys("erol.selitektay@gmail.com"); 
WebElement OdemeSec= driver.findElement(By.cssSelector("p.billOther")).click(); 
WebElement Havale = wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Havale / EFT ile Ödeme"))).click(); 
WebElement BankaSec = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span.selectBox-label"))).click(); 
WebElement UyeOlmaDevam= wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Üye olmadan devam et"))).click(); 
WebElement AliciName= wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("OrderProducts_1__ReceiverModel_OrderReceiver_NameRec"))).sendKeys("Selenium 
Test "); 
WebElement garanti AliciTel== driver.driver.findElement(findElement(By.xpath("By.html/xpath("//*[@body/ul/li[2]/id='a")).OrderProducts_click(); 
1__ReceiverModel_OrderReceiver_PhoneRec']")).sendKeys("11111111111111111111"); 
WebElement WebElement SiparisVer AliciAdres = driver.= driver.findElement(findElement(By.xpath("//By.input[@id("OrderProducts_value='Sipariş Ver']")).1__click(); 
ReceiverModel_OrderReceiver_AddressLineRec")).sendKeys("Selenium Test Adress"); 
WebElement String sipNo=driver.ilerle2= findElement(driver.By.findElement(xpath("//*[@id='By.wrapper']/cssSelector("div[3]/div/button.div/div/div[goNext.1]/p[2]/sendRec")).span")).getText(); 
click(); 
System.out.println("Sipariş Numarası: "+ sipNo); 
WebElement driver.quit(); 
ilerle3 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button.goNext.sendCardMessage"))).click(); 
WebElement FaturaAd = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("InvoiceInfoViewModel_Order_SenderName"))).sendKeys("Selenium Test Fatura Ad"); 
WebElement FaturaTel = driver.findElement(By.id("InvoiceInfoViewModel_Order_SenderPhone")).sendKeys("111111111111"); 
WebElement FaturaEmail=driver.findElement(By.id("InvoiceInfoViewModel_Email")).sendKeys("erol.selitektay@gmail.com");
Demo 
DEMO TIME 
http://youtu.be/fJxgWwAMwbM
http://youtu.be/fJxgWwAMwbM
Mobile Automation Approaches 
Record & Play 
Record -> Edit -> Play -> Edit -> Add Verify -> Edit and so on... 
Good for getting to know technology 
none of these tests will be maintainable 
none of these tests will be sustainable
Mobile Automation Approaches 
Behaviour Driven Development 
#1 USER STORIES describe BUSINESS VALUE 
#2 SCENARIOS help describe ACCEPTANCE CRITERIA 
#3 SCENARIOS act as AUTOMATED TESTS
Mobile Automation Approaches 
Behaviour Driven Development 
BDD is good for : 
BDD is not ideal for :
Mobile Automation Approaches 
Keyword Driven Testing 
keyword : 
1) A function or method that can be used to test one aspect of the SUT 
2) Can be defined by other keywords 
Higher-level keywords: 
a concrete aspect of the business logic 
Lower-level keywords: 
to keep the implementation of the higher-level keywords at a decent size 
Technical keywords: 
provide the technical implementation to access and thus test the system. 
By codeCentric
Mobile Automation Approaches 
BDD vs Keyword-Driven Testing 
Requirement: Allow customer to choose a round or square shaped pizza 
BDD: Given the customer logged into the pizza build app. 
When the customer choose to build a square shaped pizza, 
Then customer should be able to get a square shaped pizza, 
When the customer choose to build a round shaped pizza, 
Then customer should be able to get a round shaped pizza. 
KDT: Login 
Build pizza | square 
Verify pizza is built 
Build pizza | round 
Verify pizza is built 
by Jim Cornelius BDD presentation
Tools 
Test tool is NOT A Strategy 
Using the tool is NOT A Goal
Mobile Automation Approaches 
Tool Technology 
Object Recognition 
Highest ROI in long perspective. 
Test cases developed are more reusable and flexible. 
Scope and coverage for functional testing will be very high compared to Image recognition. 
ex: WebElement AddToBasket=driver.findElement(By.id("btn_Basket")); 
Image Recognition 
Identify and control GUI components. 
Useful when there is no easy access to a GUI's internal or source code. 
Create Image Library. 
Text Recognition (OCR) 
Highest ROI in short perspective. 
No need object repository.
Mobile Automation Approaches 
How to Select Tool 
 Application Type (native, hybrid, mobile-web) 
 Operating System (Platform) 
 Application Functionality (Business, communication, gaming etc.) 
 Design Methodology (Keyword, DDT, BDD etc.) 
 Support Real Device Testing
Continuous Integration 
Continuous Integration – Builds Execute 
Automated Regression Tests 
Automated Regression Tests 
Continuous Integration – Builds Execute 
Automated Unit Tests 
Automated Unit Tests 
Test Maturity Model 
Build Automation (.apk, .ipa) 
by Jim Cornelius BDD presentation
A Fine Approach 
Input: Test Design Output: Test Suite 
QA Responsibilities 
Test Case Design 
Test Case 
Maintanence 
Debugging 
Object Library 
Platform Support 
iOS 
Android 
Windows 
Source Repository 
Commit test cases/suites 
Objects
Android Phone 
iOS 
Android Tablet 
iPad 
Windows 
Tablet 
A Fine Approach 
pull object library 
pull test cases/suites 
Jenkins 
Server 
3 Step Execution 
Full Suite Execution 
Failing case Execution 
Report/Mail Results 
Input: Test Design Output: Test Suite 
Source Repository 
Windows 
Phone
A Fine Approach: Abstraction Layers 
Test Suite 2 Test SuiteT nest Case n 
Test Case 1 Test Case n Test Case 1 
Higher Level Keywords 
Lower Level Keywords 
Object Library 
Windows Agent 
iOS Agent Android Agent 
iPhone / iPad 
Android Phone / 
Android Tablet 
Third-party Libraries 
Test Suite 1 
Test Case n Test Case 1 
Windows Phone / Tablet 
Test Case n 
Stable 
Variable 
Stable 
Technical Keywords 
Test Framework
Q&A 
Serhat Bolsu 
sbolsu@tmob.com.tr 
Selin Güngör 
selin.gungor@ciceksepeti.com 
Erol Selitektay 
erol@vngrs.com

More Related Content

Similar to How to define mobile automation strategy

Top100summit 谷歌-scott-improve your automated web application testing
Top100summit  谷歌-scott-improve your automated web application testingTop100summit  谷歌-scott-improve your automated web application testing
Top100summit 谷歌-scott-improve your automated web application testing
drewz lin
 
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Codemotion
 
Automated Testing Of Web Applications Using XML
Automated  Testing Of  Web  Applications Using  XMLAutomated  Testing Of  Web  Applications Using  XML
Automated Testing Of Web Applications Using XML
diongillard
 
iOS and Android apps automation
iOS and Android apps automationiOS and Android apps automation
iOS and Android apps automation
Sridhar Ramakrishnan
 
Selenium training
Selenium trainingSelenium training
Selenium training
Suresh Arora
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
Timothy Fisher
 
Testing web application with Python
Testing web application with PythonTesting web application with Python
Testing web application with Python
Jachym Cepicky
 
Web automation with Selenium for software engineers
Web automation with Selenium for software engineersWeb automation with Selenium for software engineers
Web automation with Selenium for software engineers
Mikalai Alimenkou
 
Android+ax+app+wcf
Android+ax+app+wcfAndroid+ax+app+wcf
Android+ax+app+wcf
Aravindharamanan S
 
Android ax app wcf
Android ax app wcfAndroid ax app wcf
Android ax app wcf
Aravindharamanan S
 
Android the Agile way
Android the Agile wayAndroid the Agile way
Android the Agile way
Ashwin Raghav
 
Securing Java EE Web Apps
Securing Java EE Web AppsSecuring Java EE Web Apps
Securing Java EE Web Apps
Frank Kim
 
amis-adf-enterprise-mobility
amis-adf-enterprise-mobilityamis-adf-enterprise-mobility
amis-adf-enterprise-mobility
Luc Bors
 
Securing Portlets With Spring Security
Securing Portlets With Spring SecuritySecuring Portlets With Spring Security
Securing Portlets With Spring Security
John Lewis
 
Automated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriverAutomated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriver
Manoj Kumar Kumar
 
Selenium with java
Selenium with javaSelenium with java
Selenium with java
Gousalya Ramachandran
 
Whys and Hows of Automation
Whys and Hows of AutomationWhys and Hows of Automation
Whys and Hows of Automation
vodQA
 
Component Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanComponent Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex Moldovan
ITCamp
 
Selenium
SeleniumSelenium
Ektron CMS400 8.02
Ektron CMS400 8.02Ektron CMS400 8.02
Ektron CMS400 8.02
Alpesh Patel
 

Similar to How to define mobile automation strategy (20)

Top100summit 谷歌-scott-improve your automated web application testing
Top100summit  谷歌-scott-improve your automated web application testingTop100summit  谷歌-scott-improve your automated web application testing
Top100summit 谷歌-scott-improve your automated web application testing
 
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
 
Automated Testing Of Web Applications Using XML
Automated  Testing Of  Web  Applications Using  XMLAutomated  Testing Of  Web  Applications Using  XML
Automated Testing Of Web Applications Using XML
 
iOS and Android apps automation
iOS and Android apps automationiOS and Android apps automation
iOS and Android apps automation
 
Selenium training
Selenium trainingSelenium training
Selenium training
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
 
Testing web application with Python
Testing web application with PythonTesting web application with Python
Testing web application with Python
 
Web automation with Selenium for software engineers
Web automation with Selenium for software engineersWeb automation with Selenium for software engineers
Web automation with Selenium for software engineers
 
Android+ax+app+wcf
Android+ax+app+wcfAndroid+ax+app+wcf
Android+ax+app+wcf
 
Android ax app wcf
Android ax app wcfAndroid ax app wcf
Android ax app wcf
 
Android the Agile way
Android the Agile wayAndroid the Agile way
Android the Agile way
 
Securing Java EE Web Apps
Securing Java EE Web AppsSecuring Java EE Web Apps
Securing Java EE Web Apps
 
amis-adf-enterprise-mobility
amis-adf-enterprise-mobilityamis-adf-enterprise-mobility
amis-adf-enterprise-mobility
 
Securing Portlets With Spring Security
Securing Portlets With Spring SecuritySecuring Portlets With Spring Security
Securing Portlets With Spring Security
 
Automated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriverAutomated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriver
 
Selenium with java
Selenium with javaSelenium with java
Selenium with java
 
Whys and Hows of Automation
Whys and Hows of AutomationWhys and Hows of Automation
Whys and Hows of Automation
 
Component Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanComponent Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex Moldovan
 
Selenium
SeleniumSelenium
Selenium
 
Ektron CMS400 8.02
Ektron CMS400 8.02Ektron CMS400 8.02
Ektron CMS400 8.02
 

Recently uploaded

UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
lorraineandreiamcidl
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
SOCRadar
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
kalichargn70th171
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 

Recently uploaded (20)

UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 

How to define mobile automation strategy

  • 1. How to Define Mobile Test Automation Strategy Serhat BOLSU – Selin GUNGOR – Erol SELITEKTAY
  • 2. Selin Güngör Software Test Engineer ÇiçekSepeti.com / Bright E-Ventures
  • 3. Serhat Bolsu Service & QA Manager tmob References
  • 4. Erol Selitektay Quality Assurance Engineer VNGRS
  • 5.
  • 6. Outline Decision to Automate Mobile Challenges Demo Mobile Automation Approaches Continuous Integration A Fine Approach
  • 7. Decision to Automate Aim of Automation Reduce Regression Cost Device Support Better Quality Early Detection 3500 3000 2500 2000 1500 1000 500 0 1 2 3 4 5 6 7 8 9 10 11 Android/iOS Platform 2x Phones Manual Android/iOS Platform 2x Phones Automated 900 800 700 600 500 400 300 200 100 0 1 2 3 4 5 6 7 8 9 10 11 Thousands Manual 1 Platform Automated Multi Platform
  • 8. Decision to Automate What to Automate Stable Version Test Types • Regression Testing • Smoke Test • Performance & Load Testing Regression Testing Performance & Load Testing Smoke Testing
  • 10. Mobile Challenges Device Diversity Multi Platform Hardware Dependencies Network 1112. 8d6if3fe Dreisnttin Acnt dArnodidro viedr Dsioevnisc essu pbpyo 2r0te1d3 boyn Gthoeo mglea r ket.
  • 12. Easy to Debug Ideal Case Automation Requirements Support Integration to Third Party Libraries Easy to Use Sustainable Maintainable Human Readable Support CI Tools
  • 13. Test automation is a software development process. Test automation projects often fail because of a lack of discipline and project management. Many testers don’t realize that when they automate tests they’re actually developing software. Lessons Learned in Software Testing Authors: Cem Kaner, James Bach and Bret Pettichord
  • 14. Automation is Software Development login(); searchItem(); addToBasket(); buyWithMoneyOrder();
  • 15. Automation is Software Development //Login driver.driver.get("get("http://http://somewebsite.somewebsite.com"); com"); WebElement WebElement signIn signIn = driver.= driver.findElement(findElement(By.linkText("By.SIGN linkText("IN").click(); SIGN IN").click(); WebElement email= driver.findElement(By.id("email")).sendKeys("someemail@address.com"); WebElement WebElement password email= = driver.driver.findElement(findElement(By.id("By.password")).id("email")).sendKeys("sendKeys("somepassword"); someemail@address.com"); WebElement WebElement submitButton password = = driver.driver.findElement(findElement(By.id("By.submit_id("password")).form")).click(); sendKeys("somepassword"); WebElement Wait<WebDriver> submitButton wait = new WebDriverWait(= driver.findElement(driver, 10); By.id("submit_form")).click(); //WebElement Search resim Item =wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("img[alt='Dracena Massengena İkili']"))); WebElement city = wait.until(visibilityOfElementLocated(By.className("select2-choice"))).click(); Wait<WebElement WebDriver> dist = wait.wait until(= ExpectedConditions.new WebDriverWait(visibilityOfElementLocated(driver, 10); By.className("select2-default"))).click(); WebElement WebElement distbox resim = driver.=wait.findElement(until(ExpectedConditions.By.className("select2-visibilityOfElementLocated(focused")).sendKeys("AKSARAY"); By.cssSelector("img[alt='Dracena Massengena İkili']"))); WebElement cldist = driver.findElement(By.className("select2-result-label")).click(), //WebElement Add to picerd Basket = driver.findElement(By.id("prdatepicker")).click(); WebElement WebElement selectd city = = driver.wait.until(findElement(visibilityOfElementLocated(By.linkText("30")).click(); By.className("select2-choice"))).click(); WebElement AddBasket=driver.findElement(By.id("addToBasket")).click(); WebElement dist = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("select2-default"))).click(); WebElement SatinAl = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='Basket']/div[2]/div[2]/input"))).click(); WebElement WebElement EkUrun distbox = wait.= until(driver.ExpectedConditions.findElement(By.visibilityOfElementLocated(className("select2-focused")).By.xpath("(//button[@sendKeys("type='AKSARAY"); button'])[5]"))).click(); WebElement cldist = driver.findElement(By.className("select2-result-label")).click(), WebElement picerd = driver.findElement(By.id("prdatepicker")).click(); WebElement selectd = driver.findElement(By.linkText("30")).click(); WebElement AddBasket=driver.findElement(By.id("addToBasket")).click(); //Buy with Money Order WebElement SatinAl = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='Basket']/div[2]/div[2]/input"))).click(); WebElement EkUrun = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//button[@type='button'])[5]"))).click(); public LoginPage login(){ driver.get("http://somewebsite.com"); WebElement signIn = driver.findElement(By.linkText("SIGN IN").click(); WebElement email= driver.findElement(By.id("email")).sendKeys("someemail@address.com"); WebElement password = driver.findElement(By.id("password")).sendKeys("somepassword"); WebElement submitButton = driver.findElement(By.id("submit_form")).click(); return new HomePage(driver) } login(); public SearchPage searchItem(){ . . . searchItem(); ilerle1=driver.findElement(By.cssSelector("button.goNext.sendAddition")).click(); } public ProductDetailPage addBasket(){ . . . } public OrderPage buyWithMoneyOrder(){ . . . } WebElement UyeOlmaDevam= wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Üye olmadan devam et"))).click(); WebElement AliciName= wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("OrderProducts_1__ReceiverModel_OrderReceiver_NameRec"))).sendKeys("Selenium Test "); WebElement WebElement addToBasket(); AliciTel=driver.findElement(By.xpath("//*[@id='OrderProducts_1__ReceiverModel_OrderReceiver_PhoneRec']")).sendKeys("11111111111111111111"); AliciAdres = driver.findElement(By.id("OrderProducts_1__ReceiverModel_OrderReceiver_AddressLineRec")).sendKeys("Selenium Test Adress"); WebElement ilerle2= driver.findElement(By.cssSelector("button.goNext.sendRec")).click(); WebElement ilerle3 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button.goNext.sendCardMessage"))).click(); WebElement FaturaAd = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("InvoiceInfoViewModel_Order_SenderName"))).sendKeys("Selenium Test Fatura Ad"); WebElement FaturaTel ilerle1== driver.driver.findElement(findElement(By.id("By.InvoiceInfoViewModel_cssSelector("button.Order_goNext.SenderPhone")).sendAddition")).sendKeys("click(); 111111111111"); WebElement buyWithMoneyOrder(); FaturaEmail=driver.findElement(By.id("InvoiceInfoViewModel_Email")).sendKeys("erol.selitektay@gmail.com"); WebElement OdemeSec= driver.findElement(By.cssSelector("p.billOther")).click(); WebElement Havale = wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Havale / EFT ile Ödeme"))).click(); WebElement BankaSec = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span.selectBox-label"))).click(); WebElement UyeOlmaDevam= wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Üye olmadan devam et"))).click(); WebElement AliciName= wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("OrderProducts_1__ReceiverModel_OrderReceiver_NameRec"))).sendKeys("Selenium Test "); WebElement garanti AliciTel== driver.driver.findElement(findElement(By.xpath("By.html/xpath("//*[@body/ul/li[2]/id='a")).OrderProducts_click(); 1__ReceiverModel_OrderReceiver_PhoneRec']")).sendKeys("11111111111111111111"); WebElement WebElement SiparisVer AliciAdres = driver.= driver.findElement(findElement(By.xpath("//By.input[@id("OrderProducts_value='Sipariş Ver']")).1__click(); ReceiverModel_OrderReceiver_AddressLineRec")).sendKeys("Selenium Test Adress"); WebElement String sipNo=driver.ilerle2= findElement(driver.By.findElement(xpath("//*[@id='By.wrapper']/cssSelector("div[3]/div/button.div/div/div[goNext.1]/p[2]/sendRec")).span")).getText(); click(); System.out.println("Sipariş Numarası: "+ sipNo); WebElement driver.quit(); ilerle3 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button.goNext.sendCardMessage"))).click(); WebElement FaturaAd = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("InvoiceInfoViewModel_Order_SenderName"))).sendKeys("Selenium Test Fatura Ad"); WebElement FaturaTel = driver.findElement(By.id("InvoiceInfoViewModel_Order_SenderPhone")).sendKeys("111111111111"); WebElement FaturaEmail=driver.findElement(By.id("InvoiceInfoViewModel_Email")).sendKeys("erol.selitektay@gmail.com");
  • 16. Demo DEMO TIME http://youtu.be/fJxgWwAMwbM
  • 18. Mobile Automation Approaches Record & Play Record -> Edit -> Play -> Edit -> Add Verify -> Edit and so on... Good for getting to know technology none of these tests will be maintainable none of these tests will be sustainable
  • 19. Mobile Automation Approaches Behaviour Driven Development #1 USER STORIES describe BUSINESS VALUE #2 SCENARIOS help describe ACCEPTANCE CRITERIA #3 SCENARIOS act as AUTOMATED TESTS
  • 20. Mobile Automation Approaches Behaviour Driven Development BDD is good for : BDD is not ideal for :
  • 21. Mobile Automation Approaches Keyword Driven Testing keyword : 1) A function or method that can be used to test one aspect of the SUT 2) Can be defined by other keywords Higher-level keywords: a concrete aspect of the business logic Lower-level keywords: to keep the implementation of the higher-level keywords at a decent size Technical keywords: provide the technical implementation to access and thus test the system. By codeCentric
  • 22. Mobile Automation Approaches BDD vs Keyword-Driven Testing Requirement: Allow customer to choose a round or square shaped pizza BDD: Given the customer logged into the pizza build app. When the customer choose to build a square shaped pizza, Then customer should be able to get a square shaped pizza, When the customer choose to build a round shaped pizza, Then customer should be able to get a round shaped pizza. KDT: Login Build pizza | square Verify pizza is built Build pizza | round Verify pizza is built by Jim Cornelius BDD presentation
  • 23. Tools Test tool is NOT A Strategy Using the tool is NOT A Goal
  • 24. Mobile Automation Approaches Tool Technology Object Recognition Highest ROI in long perspective. Test cases developed are more reusable and flexible. Scope and coverage for functional testing will be very high compared to Image recognition. ex: WebElement AddToBasket=driver.findElement(By.id("btn_Basket")); Image Recognition Identify and control GUI components. Useful when there is no easy access to a GUI's internal or source code. Create Image Library. Text Recognition (OCR) Highest ROI in short perspective. No need object repository.
  • 25. Mobile Automation Approaches How to Select Tool  Application Type (native, hybrid, mobile-web)  Operating System (Platform)  Application Functionality (Business, communication, gaming etc.)  Design Methodology (Keyword, DDT, BDD etc.)  Support Real Device Testing
  • 26. Continuous Integration Continuous Integration – Builds Execute Automated Regression Tests Automated Regression Tests Continuous Integration – Builds Execute Automated Unit Tests Automated Unit Tests Test Maturity Model Build Automation (.apk, .ipa) by Jim Cornelius BDD presentation
  • 27. A Fine Approach Input: Test Design Output: Test Suite QA Responsibilities Test Case Design Test Case Maintanence Debugging Object Library Platform Support iOS Android Windows Source Repository Commit test cases/suites Objects
  • 28. Android Phone iOS Android Tablet iPad Windows Tablet A Fine Approach pull object library pull test cases/suites Jenkins Server 3 Step Execution Full Suite Execution Failing case Execution Report/Mail Results Input: Test Design Output: Test Suite Source Repository Windows Phone
  • 29. A Fine Approach: Abstraction Layers Test Suite 2 Test SuiteT nest Case n Test Case 1 Test Case n Test Case 1 Higher Level Keywords Lower Level Keywords Object Library Windows Agent iOS Agent Android Agent iPhone / iPad Android Phone / Android Tablet Third-party Libraries Test Suite 1 Test Case n Test Case 1 Windows Phone / Tablet Test Case n Stable Variable Stable Technical Keywords Test Framework
  • 30.
  • 31. Q&A Serhat Bolsu sbolsu@tmob.com.tr Selin Güngör selin.gungor@ciceksepeti.com Erol Selitektay erol@vngrs.com

Editor's Notes

  1. I’m Selin. I am a Software Test Engineer. I am working for ciceksepeti.com. In my company, we have different kind of e-commerce websites. I responsible for the test activities of ecommerce websites and all mobile applications. Currently, we have two mobile applications. One of them is ciceksepeti mobile application which is hybrid application. People who can order gifts, flowers, cakes and cookies. The other one is fieldterminal project which is native application. Also i responsible for test automation.
  2. So today we are going to tell you about test au. How many have you tried test automation? But this is different kind of ta presentation as you realize it is not named how to do test automation. We are going to talk about strategy, the strategy that is going to define your mobile test automation. Actually automation is a hot topic. Everyone wants to automate their application. But they don’t know how or where to start automation. As you know automation can be a big challange but mobile automation is a bigger challange. Mobile test automation presents unique difficulties that a tester would not consider in a web or desktop application. So the goal of our paper is to help you to overcome the challange. We have been passed through this ways and we have gained some experience. So we are here to share these experiences with you. Our talk is particularly relevant to those of you who wants to automate their mobile application. First of all we wrote this paper to show the people who wants to automate their mobile application. We would like to guide people…
  3. First we’ll be looking at decision to automate. Next, mobile challanges. After that we have demo to show you. I think it will be fun to watch it. It will be exciting for you. After that we’ll go on to mobile automation approaches. Finally, We’ll move on continuous integration. This presentation will take 45 minutes. There will be time for questions after our presentation like 15 minutes.
  4. ----- Meeting Notes (22/05/14 20:03) ----- ikinci resim çok anlatıcı değil - bunu farklılık ile anlatalım better quality -> Another layer for Quality early detection - CI ile entegre çalışması
  5. Non deterministic olan durumu otomasyona almayız. Belirsizlik. ----- Meeting Notes (22/05/14 20:03) ----- if you automate a mess you get automated mess Test type ı kontrol edebilebilr : tekrar kontrol et. multi profile / multi user test.
  6. Better knowledge of scripting and coding. Software Developer in Test. ----- Meeting Notes (22/05/14 20:03) ----- iyibir test automated requirement dan kopacağı için aynı kişi olmasa daha iyi olur.
  7. Behaviour does not lie
  8. -Otomasyon sisteminize import edebilirsiniz Requirement değişebilir. System implementasyonu değişebilir. ----- Meeting Notes (22/05/14 20:03) ----- robust - belki konular azaltılabilir - birbininin altına yazılabilir.
  9. -Ana mottomuz -çıkış noktamız Yazılıma uyguladığınız herşeyi, otomasyonda bir yazılım olduğu için uygulayabiliriz
  10.  https://www.youtube.com/watch?v=zADOv65AmiI
  11. Teknik tarafı tdd den base. J-bhave, cucumber, calabash Mobil : frank ----- Meeting Notes (22/05/14 19:31) ----- sadece 3. den yola çıkarak bdd için testi çözebilirsin diyemeyiz.
  12. ----- Meeting Notes (22/05/14 20:03) ----- object oriented similar exercies
  13. ----- Meeting Notes (22/05/14 19:31) ----- nedenleri söyle ..
  14. Optical Character Recognition (OCR)(Text recognation) Optical Character Recognition essentially uses a smart software engine that converts scanned images of handwritten, typewritten or printed text into machine-encoded text.
  15. ----- Meeting Notes (22/05/14 20:03) ----- use source control tools : Github / Bitbucket etc.
  16. ----- Meeting Notes (22/05/14 19:31) ----- hizalamayı düzeltlim. object yeşil olması. agentlar yazılabilir veya tool kullanılabilir. ----- Meeting Notes (22/05/14 20:03) ----- object library = yeşilve yeri değişiçek
  17. https://www.youtube.com/watch?v=3eM73d_F3TQ