SlideShare a Scribd company logo
Continuous delivery for
native apps
Niels Frydenholm, ebay Classifieds
Continuous delivery
3
Continuous delivery
Being able to build a release-ready binary at any given time.
3
ebay Classifieds, Denmark
4
ebay Classifieds, Denmark
• Native apps
– DBA
– BilBasen
4
Tools that support multiple platforms
5
Branches, build and distribution
Feature branches
7
Jenkins jobs pr. branch
8
Jenkins jobs pr. branch
8
Jenkins jobs pr. branch
8
Jenkins jobs pr. branch - configuration
9
• Plugin: http://entagen.github.io/jenkins-build-per-branch/
Jenkins jobs pr. branch - configuration
9
• Plugin: http://entagen.github.io/jenkins-build-per-branch/
Jenkins jobs pr. branch - configuration
9
• Plugin: http://entagen.github.io/jenkins-build-per-branch/
Hockey app distribution pr. branch
• A new app is created for each feature branch
– Easy manuel testing on devices
– UX verification
• Deleted again together with the branch
– Hockey app does not get cluttered
10
Tests
Prerequisites
• Required
– Stable test environment(s)
– Good test data
12
Prerequisites
• Required
– Stable test environment(s)
– Good test data
• Optional (but a very good idea)
– Ways to setup data to a given state
• E.g trigger something normally done in a batch job
12
Different kind of tests
13
Different kind of tests
13
Unit tests
Like all other platforms - super fast, and
an easy way to tests all objects in
isolation
Different kind of tests
13
Unit tests
Like all other platforms - super fast, and
an easy way to tests all objects in
isolation
Integration tests
Test of backend api´s from the app code -
verifying json, mapping to the model,
error codes etc.
Different kind of tests
Cucumber / Calabash - user scenarios to
verify app from end-to-end
13
UI tests
Unit tests
Like all other platforms - super fast, and
an easy way to tests all objects in
isolation
Integration tests
Test of backend api´s from the app code -
verifying json, mapping to the model,
error codes etc.
Cucumber / Calabash
14
Example
15
Scenario: I can only send a valid report of a listing once
Given I am logged in as "UniqueSeller" using quick login
And I am on the VIP for "iPhone"
When I go to report listing
And I try to send the report
Then I see the validation error for "Årsag, Beskriv din anmeldelse"
When I close the system message view
And I select report listing cause "Annoncen er ulovlig"
And I set report description text to "Den er billigere end min!"
And I send the report
Then I see the report listing VIP
When I close the system message view
And I touch the report listing button
Then I am informed that I already has reported the listing
X-platform UI tests
16
Feature
Scenario
Step
X-platform UI tests
16
Feature
Scenario
Step
Page object
iOS Android
X-platform UI tests
16
Feature
Scenario
Step
Page object
iOS Android
• Same scenarios / Steps
• Page objects are specific to the platform
– Use -r in Cucumber to load for each platform
• features-folder is a Git SubModule
Structure your test code with Page objects
17
Step definition
When(/^I send the report$/) do
@page = @page.send_the_report
end
Structure your test code with Page objects
17
Step definition
When(/^I send the report$/) do
@page = @page.send_the_report
end
ReportListingpage - Page object (iOS)
def send_the_report
transition(:tap => "view marked:'Anmeld annonce'", :page => self.previous_page)
end
Avoid timing-issues
18
Don’t
And /^I set price to "(.*?)"$/ do |price|
macro 'I swipe up'
sleep(1)
touch("view marked:'Price'")
sleep(0.5)
set_text("view marked:'Price'", price)
sleep(0.5)
touch("view marked:'OK'")
sleep(1)
end
Avoid timing-issues
18
Don’t
And /^I set price to "(.*?)"$/ do |price|
macro 'I swipe up'
sleep(1)
touch("view marked:'Price'")
sleep(0.5)
set_text("view marked:'Price'", price)
sleep(0.5)
touch("view marked:'OK'")
sleep(1)
end
Avoid timing-issues
18
Do
And /^I set price to "(.*?)"$/ do |price|
@page.write_price(price)
end
page object
def write_price(price)
scroll_and_wait_for_row_with_mark("priceCell")
touch("view marked:'Price'")
keyboard_enter_text price
close_keyboard
end
Re-run failed tests
19
• Underlying bits and pieces can be unstable
– UIAutomation
– Simulator
• Cucumber rerun formatter
– Give failed test one more try
Re-run failed tests
19
• Underlying bits and pieces can be unstable
– UIAutomation
– Simulator
• Cucumber rerun formatter
– Give failed test one more try
cucumber -f rerun --out rerun.txt
cucumber @rerun.txt
Fast feedback
20
• Only run part of UI test suite on each commit
– use @tags
• Use “backdoor” to setup/teardown
– E.g. login or create a new user
Fast feedback
20
Fast feedback
20
@commit
Scenario: I can manage my listing and see the changes
Given I am logged in as "UniqueSeller" using quick login
And I have created a listing for "Hovedtelefoner" and is on
the SYI VIP
Then I see the VIP for "Her kommer en rimelig lang tekst"
When I go back to my listings page
And the created listing is in the list
…more steps omitted…
Fast feedback
20
@commit
Scenario: I can manage my listing and see the changes
Given I am logged in as "UniqueSeller" using quick login
And I have created a listing for "Hovedtelefoner" and is on
the SYI VIP
Then I see the VIP for "Her kommer en rimelig lang tekst"
When I go back to my listings page
And the created listing is in the list
…more steps omitted…
1 scenario (1 passed)
19 steps (19 passed)
0m34.054s
1 scenario (1 passed)
19 steps (19 passed)
1m16.610s
Visible feedback
21
Visible feedback
21
Test on real devices
22
Test on real devices
22
Test on real devices
22
Is test automation all you need?
23
Is test automation all you need?
23
No, but they are
• Fast(er than humans)
• They never forget details (that you taught it)
• Great way to avoid “old” bugs (regression)
Is test automation all you need?
23
No, but they are
• Fast(er than humans)
• They never forget details (that you taught it)
• Great way to avoid “old” bugs (regression)
Manuel tests
• Still very important
• Part of Definition of Done for each story
• QA has more time to do
– Exploratory tests
– Focus on highest risk
24
Trust
• All team members write/maintaining tests
• QA trusts the automated tests
• Developers trusts QA to find the “tricky” bugs
• Everyone trusts that a red test means something is wrong
– No broken windows
• Code coverage
25
Trust
• All team members write/maintaining tests
• QA trusts the automated tests
• Developers trusts QA to find the “tricky” bugs
• Everyone trusts that a red test means something is wrong
– No broken windows
• Code coverage
25
Plan smaller and frequent releases
• Convince Product Owner of the agility
– Automated app updates = fast adoption rate
• Define release scope with Product Owner
26
Plan smaller and frequent releases
• Convince Product Owner of the agility
– Automated app updates = fast adoption rate
• Define release scope with Product Owner
26
Plan smaller and frequent releases
• Convince Product Owner of the agility
– Automated app updates = fast adoption rate
• Define release scope with Product Owner
Prepare your app for it
26
Plan smaller and frequent releases
• Convince Product Owner of the agility
– Automated app updates = fast adoption rate
• Define release scope with Product Owner
Prepare your app for it
• “Kill switch” to force users to update eventually
– Work as an emergency brake as well
• Welcome screens
– Highlight whats new
– Teach the users how to use new features
– Do not expect users to read “Whats new” in the AppStore
26
Relax - no worries!
27
Embrace failures
• Bug free software is an illusion
• Learn/improve from bugs/crashes found by users
– Add new tests to prevent it from happening again
• Celebrate (potential) bugs found by tests before production
Know your app quality
• Visual information about app health
• Be proactive and fix bugs before too many users notice them
28
Continuous delivery for native apps

More Related Content

What's hot

Uncovering breaking changes behind UI on mobile applications
Uncovering breaking changes behind UI on mobile applicationsUncovering breaking changes behind UI on mobile applications
Uncovering breaking changes behind UI on mobile applications
Kazuaki Matsuo
 
Midwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamMidwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small team
Joe Ferguson
 
Belajar Postman test runner
Belajar Postman test runnerBelajar Postman test runner
Belajar Postman test runner
Fachrul Choliluddin
 
Alloy Simple App Demonstration
Alloy Simple App DemonstrationAlloy Simple App Demonstration
Alloy Simple App Demonstration
Aaron Saunders
 
So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...
Joe Ferguson
 
Api testing
Api testingApi testing
Api testing
Keshav Kashyap
 
Beyond the Release: CI That Transforms Organizations
Beyond the Release: CI That Transforms OrganizationsBeyond the Release: CI That Transforms Organizations
Beyond the Release: CI That Transforms Organizations
Sauce Labs
 
Nightwatch at Tilt
Nightwatch at TiltNightwatch at Tilt
Nightwatch at Tilt
Dave King
 
Selenium Camp 2016 - Kiev, Ukraine
Selenium Camp 2016 -  Kiev, UkraineSelenium Camp 2016 -  Kiev, Ukraine
Selenium Camp 2016 - Kiev, Ukraine
Justin Ison
 
Selenium Testing on Chrome - Google DevFest Armenia 2015
Selenium Testing on Chrome - Google DevFest Armenia 2015Selenium Testing on Chrome - Google DevFest Armenia 2015
Selenium Testing on Chrome - Google DevFest Armenia 2015
Sargis Sargsyan
 
Titanium Alloy Tutorial
Titanium Alloy TutorialTitanium Alloy Tutorial
Titanium Alloy Tutorial
Fokke Zandbergen
 
Client Side Applications with WP-API WordPress - WCMTL 2015
Client Side Applications with WP-API WordPress - WCMTL 2015Client Side Applications with WP-API WordPress - WCMTL 2015
Client Side Applications with WP-API WordPress - WCMTL 2015
Roy Sivan
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
WO Community
 
Appium: Mobile Automation Made Awesome
Appium: Mobile Automation Made AwesomeAppium: Mobile Automation Made Awesome
Appium: Mobile Automation Made Awesome
Netcetera
 
Mobile Automation Using Appium - vodQA Bangalore 2015
Mobile Automation Using Appium - vodQA Bangalore 2015Mobile Automation Using Appium - vodQA Bangalore 2015
Mobile Automation Using Appium - vodQA Bangalore 2015
Thoughtworks
 
Exposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using SwaggerExposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using Swagger
Salesforce Developers
 
API Test Automation Tips and Tricks
API Test Automation Tips and TricksAPI Test Automation Tips and Tricks
API Test Automation Tips and Tricks
testhive
 
Automation using Javascript
Automation using JavascriptAutomation using Javascript
Automation using Javascript
khanhdang1214
 
Selenium conference, 2016
Selenium conference, 2016Selenium conference, 2016
Selenium conference, 2016
Pooja Shah
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
TEST Huddle
 

What's hot (20)

Uncovering breaking changes behind UI on mobile applications
Uncovering breaking changes behind UI on mobile applicationsUncovering breaking changes behind UI on mobile applications
Uncovering breaking changes behind UI on mobile applications
 
Midwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamMidwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small team
 
Belajar Postman test runner
Belajar Postman test runnerBelajar Postman test runner
Belajar Postman test runner
 
Alloy Simple App Demonstration
Alloy Simple App DemonstrationAlloy Simple App Demonstration
Alloy Simple App Demonstration
 
So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...
 
Api testing
Api testingApi testing
Api testing
 
Beyond the Release: CI That Transforms Organizations
Beyond the Release: CI That Transforms OrganizationsBeyond the Release: CI That Transforms Organizations
Beyond the Release: CI That Transforms Organizations
 
Nightwatch at Tilt
Nightwatch at TiltNightwatch at Tilt
Nightwatch at Tilt
 
Selenium Camp 2016 - Kiev, Ukraine
Selenium Camp 2016 -  Kiev, UkraineSelenium Camp 2016 -  Kiev, Ukraine
Selenium Camp 2016 - Kiev, Ukraine
 
Selenium Testing on Chrome - Google DevFest Armenia 2015
Selenium Testing on Chrome - Google DevFest Armenia 2015Selenium Testing on Chrome - Google DevFest Armenia 2015
Selenium Testing on Chrome - Google DevFest Armenia 2015
 
Titanium Alloy Tutorial
Titanium Alloy TutorialTitanium Alloy Tutorial
Titanium Alloy Tutorial
 
Client Side Applications with WP-API WordPress - WCMTL 2015
Client Side Applications with WP-API WordPress - WCMTL 2015Client Side Applications with WP-API WordPress - WCMTL 2015
Client Side Applications with WP-API WordPress - WCMTL 2015
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
 
Appium: Mobile Automation Made Awesome
Appium: Mobile Automation Made AwesomeAppium: Mobile Automation Made Awesome
Appium: Mobile Automation Made Awesome
 
Mobile Automation Using Appium - vodQA Bangalore 2015
Mobile Automation Using Appium - vodQA Bangalore 2015Mobile Automation Using Appium - vodQA Bangalore 2015
Mobile Automation Using Appium - vodQA Bangalore 2015
 
Exposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using SwaggerExposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using Swagger
 
API Test Automation Tips and Tricks
API Test Automation Tips and TricksAPI Test Automation Tips and Tricks
API Test Automation Tips and Tricks
 
Automation using Javascript
Automation using JavascriptAutomation using Javascript
Automation using Javascript
 
Selenium conference, 2016
Selenium conference, 2016Selenium conference, 2016
Selenium conference, 2016
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
 

Similar to Continuous delivery for native apps

Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...
Niels Frydenholm
 
Building High Quality Android Applications
Building High Quality Android ApplicationsBuilding High Quality Android Applications
Building High Quality Android Applications
Leif Janzik
 
Automation With Frank
Automation With FrankAutomation With Frank
Automation With Frank
Ralu Mihordea
 
26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team
agilebin
 
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
Amazon Web Services
 
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
Amazon Web Services
 
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
Daniel Gallego Vico
 
Continuous delivery is more than dev ops
Continuous delivery is more than dev opsContinuous delivery is more than dev ops
Continuous delivery is more than dev ops
Agile Montréal
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
Jim Jeffers
 
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
Srijan Technologies
 
Continuous Delivery, Continuous Integration
Continuous Delivery, Continuous Integration Continuous Delivery, Continuous Integration
Continuous Delivery, Continuous Integration
Amazon Web Services
 
Accessibility Testing - Using Asqatasun - Meetup Webinar
Accessibility Testing - Using Asqatasun - Meetup WebinarAccessibility Testing - Using Asqatasun - Meetup Webinar
Accessibility Testing - Using Asqatasun - Meetup Webinar
Keyur Shah
 
Phonegap Development & Debugging
Phonegap Development & DebuggingPhonegap Development & Debugging
Phonegap Development & Debugging
Ivano Malavolta
 
Test parallelization using Jenkins
Test parallelization using JenkinsTest parallelization using Jenkins
Test parallelization using Jenkins
Rogue Wave Software
 
Automating the Quality
Automating the QualityAutomating the Quality
Automating the Quality
Dejan Vukmirovic
 
Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)
Yan Cui
 
Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)
Yan Cui
 
Ankita- Hacker Proof your app using Functional Tests
Ankita- Hacker Proof your app using Functional TestsAnkita- Hacker Proof your app using Functional Tests
Ankita- Hacker Proof your app using Functional Tests
Ankita Gupta
 
Bluemix and DevOps workshop lab
Bluemix and DevOps workshop labBluemix and DevOps workshop lab
Bluemix and DevOps workshop lab
benm4nn
 
AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...
AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...
AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...
Amazon Web Services
 

Similar to Continuous delivery for native apps (20)

Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...
 
Building High Quality Android Applications
Building High Quality Android ApplicationsBuilding High Quality Android Applications
Building High Quality Android Applications
 
Automation With Frank
Automation With FrankAutomation With Frank
Automation With Frank
 
26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team
 
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
 
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
 
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
 
Continuous delivery is more than dev ops
Continuous delivery is more than dev opsContinuous delivery is more than dev ops
Continuous delivery is more than dev ops
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
 
Continuous Delivery, Continuous Integration
Continuous Delivery, Continuous Integration Continuous Delivery, Continuous Integration
Continuous Delivery, Continuous Integration
 
Accessibility Testing - Using Asqatasun - Meetup Webinar
Accessibility Testing - Using Asqatasun - Meetup WebinarAccessibility Testing - Using Asqatasun - Meetup Webinar
Accessibility Testing - Using Asqatasun - Meetup Webinar
 
Phonegap Development & Debugging
Phonegap Development & DebuggingPhonegap Development & Debugging
Phonegap Development & Debugging
 
Test parallelization using Jenkins
Test parallelization using JenkinsTest parallelization using Jenkins
Test parallelization using Jenkins
 
Automating the Quality
Automating the QualityAutomating the Quality
Automating the Quality
 
Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)
 
Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)
 
Ankita- Hacker Proof your app using Functional Tests
Ankita- Hacker Proof your app using Functional TestsAnkita- Hacker Proof your app using Functional Tests
Ankita- Hacker Proof your app using Functional Tests
 
Bluemix and DevOps workshop lab
Bluemix and DevOps workshop labBluemix and DevOps workshop lab
Bluemix and DevOps workshop lab
 
AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...
AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...
AWS re:Invent 2016: DevOps on AWS: Advanced Continuous Delivery Techniques (D...
 

Recently uploaded

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
 
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
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
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
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
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
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
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
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 

Recently uploaded (20)

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
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
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
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
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
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
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
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 

Continuous delivery for native apps

  • 1. Continuous delivery for native apps Niels Frydenholm, ebay Classifieds
  • 2.
  • 4. Continuous delivery Being able to build a release-ready binary at any given time. 3
  • 6. ebay Classifieds, Denmark • Native apps – DBA – BilBasen 4
  • 7. Tools that support multiple platforms 5
  • 8. Branches, build and distribution
  • 10. Jenkins jobs pr. branch 8
  • 11. Jenkins jobs pr. branch 8
  • 12. Jenkins jobs pr. branch 8
  • 13. Jenkins jobs pr. branch - configuration 9 • Plugin: http://entagen.github.io/jenkins-build-per-branch/
  • 14. Jenkins jobs pr. branch - configuration 9 • Plugin: http://entagen.github.io/jenkins-build-per-branch/
  • 15. Jenkins jobs pr. branch - configuration 9 • Plugin: http://entagen.github.io/jenkins-build-per-branch/
  • 16. Hockey app distribution pr. branch • A new app is created for each feature branch – Easy manuel testing on devices – UX verification • Deleted again together with the branch – Hockey app does not get cluttered 10
  • 17. Tests
  • 18. Prerequisites • Required – Stable test environment(s) – Good test data 12
  • 19. Prerequisites • Required – Stable test environment(s) – Good test data • Optional (but a very good idea) – Ways to setup data to a given state • E.g trigger something normally done in a batch job 12
  • 20. Different kind of tests 13
  • 21. Different kind of tests 13 Unit tests Like all other platforms - super fast, and an easy way to tests all objects in isolation
  • 22. Different kind of tests 13 Unit tests Like all other platforms - super fast, and an easy way to tests all objects in isolation Integration tests Test of backend api´s from the app code - verifying json, mapping to the model, error codes etc.
  • 23. Different kind of tests Cucumber / Calabash - user scenarios to verify app from end-to-end 13 UI tests Unit tests Like all other platforms - super fast, and an easy way to tests all objects in isolation Integration tests Test of backend api´s from the app code - verifying json, mapping to the model, error codes etc.
  • 25. Example 15 Scenario: I can only send a valid report of a listing once Given I am logged in as "UniqueSeller" using quick login And I am on the VIP for "iPhone" When I go to report listing And I try to send the report Then I see the validation error for "Årsag, Beskriv din anmeldelse" When I close the system message view And I select report listing cause "Annoncen er ulovlig" And I set report description text to "Den er billigere end min!" And I send the report Then I see the report listing VIP When I close the system message view And I touch the report listing button Then I am informed that I already has reported the listing
  • 28. X-platform UI tests 16 Feature Scenario Step Page object iOS Android • Same scenarios / Steps • Page objects are specific to the platform – Use -r in Cucumber to load for each platform • features-folder is a Git SubModule
  • 29. Structure your test code with Page objects 17 Step definition When(/^I send the report$/) do @page = @page.send_the_report end
  • 30. Structure your test code with Page objects 17 Step definition When(/^I send the report$/) do @page = @page.send_the_report end ReportListingpage - Page object (iOS) def send_the_report transition(:tap => "view marked:'Anmeld annonce'", :page => self.previous_page) end
  • 32. Don’t And /^I set price to "(.*?)"$/ do |price| macro 'I swipe up' sleep(1) touch("view marked:'Price'") sleep(0.5) set_text("view marked:'Price'", price) sleep(0.5) touch("view marked:'OK'") sleep(1) end Avoid timing-issues 18
  • 33. Don’t And /^I set price to "(.*?)"$/ do |price| macro 'I swipe up' sleep(1) touch("view marked:'Price'") sleep(0.5) set_text("view marked:'Price'", price) sleep(0.5) touch("view marked:'OK'") sleep(1) end Avoid timing-issues 18 Do And /^I set price to "(.*?)"$/ do |price| @page.write_price(price) end page object def write_price(price) scroll_and_wait_for_row_with_mark("priceCell") touch("view marked:'Price'") keyboard_enter_text price close_keyboard end
  • 34. Re-run failed tests 19 • Underlying bits and pieces can be unstable – UIAutomation – Simulator • Cucumber rerun formatter – Give failed test one more try
  • 35. Re-run failed tests 19 • Underlying bits and pieces can be unstable – UIAutomation – Simulator • Cucumber rerun formatter – Give failed test one more try cucumber -f rerun --out rerun.txt cucumber @rerun.txt
  • 36. Fast feedback 20 • Only run part of UI test suite on each commit – use @tags • Use “backdoor” to setup/teardown – E.g. login or create a new user
  • 38. Fast feedback 20 @commit Scenario: I can manage my listing and see the changes Given I am logged in as "UniqueSeller" using quick login And I have created a listing for "Hovedtelefoner" and is on the SYI VIP Then I see the VIP for "Her kommer en rimelig lang tekst" When I go back to my listings page And the created listing is in the list …more steps omitted…
  • 39. Fast feedback 20 @commit Scenario: I can manage my listing and see the changes Given I am logged in as "UniqueSeller" using quick login And I have created a listing for "Hovedtelefoner" and is on the SYI VIP Then I see the VIP for "Her kommer en rimelig lang tekst" When I go back to my listings page And the created listing is in the list …more steps omitted… 1 scenario (1 passed) 19 steps (19 passed) 0m34.054s 1 scenario (1 passed) 19 steps (19 passed) 1m16.610s
  • 42. Test on real devices 22
  • 43. Test on real devices 22
  • 44. Test on real devices 22
  • 45. Is test automation all you need? 23
  • 46. Is test automation all you need? 23 No, but they are • Fast(er than humans) • They never forget details (that you taught it) • Great way to avoid “old” bugs (regression)
  • 47. Is test automation all you need? 23 No, but they are • Fast(er than humans) • They never forget details (that you taught it) • Great way to avoid “old” bugs (regression)
  • 48. Manuel tests • Still very important • Part of Definition of Done for each story • QA has more time to do – Exploratory tests – Focus on highest risk 24
  • 49. Trust • All team members write/maintaining tests • QA trusts the automated tests • Developers trusts QA to find the “tricky” bugs • Everyone trusts that a red test means something is wrong – No broken windows • Code coverage 25
  • 50. Trust • All team members write/maintaining tests • QA trusts the automated tests • Developers trusts QA to find the “tricky” bugs • Everyone trusts that a red test means something is wrong – No broken windows • Code coverage 25
  • 51. Plan smaller and frequent releases • Convince Product Owner of the agility – Automated app updates = fast adoption rate • Define release scope with Product Owner 26
  • 52. Plan smaller and frequent releases • Convince Product Owner of the agility – Automated app updates = fast adoption rate • Define release scope with Product Owner 26
  • 53. Plan smaller and frequent releases • Convince Product Owner of the agility – Automated app updates = fast adoption rate • Define release scope with Product Owner Prepare your app for it 26
  • 54. Plan smaller and frequent releases • Convince Product Owner of the agility – Automated app updates = fast adoption rate • Define release scope with Product Owner Prepare your app for it • “Kill switch” to force users to update eventually – Work as an emergency brake as well • Welcome screens – Highlight whats new – Teach the users how to use new features – Do not expect users to read “Whats new” in the AppStore 26
  • 55. Relax - no worries! 27
  • 56. Embrace failures • Bug free software is an illusion • Learn/improve from bugs/crashes found by users – Add new tests to prevent it from happening again • Celebrate (potential) bugs found by tests before production Know your app quality • Visual information about app health • Be proactive and fix bugs before too many users notice them 28