SlideShare a Scribd company logo
Green Light for the Apps! 
Using Calaba.sh @Meetic 
DroidCon Paris 
September 23rd 2014 
Cédric Creusot 
Jean-Loup Yu
About us 
Cédric Creusot 
Android Developer 
Meetic HQ 
@Calimeraw 
Jean-Loup Yu 
Head of Mobile Development 
Meetic HQ 
@djelmen
Agenda 
About Meetic 
Mobile @Meetic 
Green light to submit 
Why Calaba.sh? 
Hands on 
Experience Sharing
About Meetic 
The French Success Story
The Success Story 
founded by Marc Simoncini 
of dating service in Europe 
of unique visitors / month 
countries covered by Meetic Service 
events organized by Meetic 
employees 
2001 
#1 
7 millions 
17 
>1000 
380
Mobile @Meetic 
Scaling in 2014
Mobile Apps Team – start of 2014 
Tech 
Product 
Design 
4 
2 
1
Mobile Apps Team - now 
Tech 
Product 
Design 
14 
3 
3
Mobile Apps Team Scope 
Android 
iOS 
Windows 
API – Web Services
Mobile Team 
Organization 
One single open 
space 
Cross functional 
Team
Mobile Team 
Organization 
Agile 
From Concept To 
Store
Mobile Team 
Organization 
Agile 
From Concept To 
Store
Mobile Team 
Organization 
Agile 
From Concept To 
Store
Mobile Team 
Organization 
Agile 
From Concept To 
Store
Green light to submit 
Apps Quality Status
Code Quality 
• Readable 
• Unit Tested 
• Smart Architecture 
• Maintenable
Functional Quality 
• The code do what we want 
• Work with external 
components
Different Type of Test 
• Unit Test 
• Integration Test 
• Functional Test
Different Type of Test 
• Unit Test 
• Integration Test 
• Functional Test
Functional Test Tools
Why Calaba.sh? 
The Functional Tool Choice
Specification written with Gherkin 
All the test cases in Meetic 
look like: 
• Given <the context> 
• When <users do actions> 
• Then <expected result>
Multi-platform Support 
Android 
iOS
Mature 
• Open Sourced since February 2012 
• Based on Cucumber 
• Born in 2008 
• Over 200 contributors 
• Backed and developed by Xamarin
Hands On 
Code inside
The Feature Scenario 
@login! 
Feature: Login feature! 
As a Meetic user! 
In order to enjoy the service! 
I want to be able to log into the service! 
! 
Scenario: Wrong Login! 
Given I am on the Login screen! 
When I enter my credentials calabash_error@calabash.com and foobar! 
And I press confirm! 
Then I should see an error message!
The Feature Scenario 
@login! 
Feature: Login feature! 
As a Meetic user! 
In order to enjoy the service! 
I want to be able to log into the service! 
! 
Scenario: Wrong Login! 
Given I am on the Login screen! 
When I enter my credentials calabash_error@calabash.com and foobar! 
And I press confirm! 
Then I should see an error message!
The Feature Scenario 
@login! 
Feature: Login feature! 
As a Meetic user! 
In order to enjoy the service! 
I want to be able to log into the service! 
! 
Scenario: Wrong Login! 
Given I am on the Login screen! 
When I enter my credentials calabash_error@calabash.com and foobar! 
And I press confirm! 
Then I should see an error message!
The Feature Scenario 
@login! 
Feature: Login feature! 
As a Meetic user! 
In order to enjoy the service! 
I want to be able to log into the service! 
! 
Scenario: Wrong Login! 
Given I am on the Login screen! 
When I enter my credentials calabash_error@calabash.com and foobar! 
And I press confirm! 
Then I should see an error message!
The Android Source Code – non intrusive
An example step definition – the glue 
When(/^I enter my credentials (S*) and (S*)$/) do |login, password|! 
wait_for_screen :login! 
! 
step 'I enter text "" into field with id "loginEdit"'! 
step "I enter text "#{login}" into field with id "loginEdit""! 
step 'I enter text "" into field with id "passwordEdit"'! 
step "I enter text "#{password}" into field with id "passwordEdit""! 
end! 
! 
! 
!
Run!
The result – human readable
How does it works? 
Step definitions, 
Ruby client library 
Features 
Running environment 
Instrumentation 
Test server 
Your app 
Devices/Emulators 
Source: http://blog.lesspainful.com/2012/03/07/Calabash-Android/
The commands 
Installation 
$>sudo gem install calabash-android! 
Setup 
$your_android_project_dir>calabash-android gen! 
Run tests 
$>calabash-android resign <your apk>! 
$>calabash-android run <your apk>! 
$>ADB_DEVICE_ARG=<your device> calabash-android run <your apk>! 
! 
Better format output 
$>calabash-android run <your apk> --format html --out result.html! 
! 
!
Industrialization
Automated Tests 
• Map of our code 
• Ease the issue localisation
Continuous Integration 
>
Experience Sharing
Multi Language 
• 12 languages management 
• 4 brands 
Calabash Ruby API 
backdoor(method,arg) 
1
Backdoor with calabash 
• Need to run only when we are using calabash 
• The backdoor can call method only in the current 
activity tested 
Create a specific target for Calabash 
1
In your Android app 
public class MainActivitiy extends Activity {! 
public String calabashGetStringById(String stringId) {! 
String stringToReturn = “”;! 
if (id != null && !id.isEmpty()) {! 
Resources resources = getResources();! 
int resourceId = resources.getIdentifier(stringId, “string”, getPackageName());! 
stringToReturn = resources.getString(resourceId);! 
}! 
return stringToReturn;! 
} ! 
}! 
1
In your glue 
Given(/^I see the title “([^”]*)”$/) do |key_string|! 
title = backdoor(“calabashGetStringById”, key_string)! 
wait_for_text(title)! 
end! 
1
Execution Time 
• Take time to execute the test 
• During Dev, need to be productive 
Use label 
$>calabash-android run <your apk> --tags <your tags>! 
Example 
$>calabash-android run myapp.apk --tags @login! 
2
Dedicated Environment 
• Control the Data Set 
• Setup the Back End 
Huge amount of work! 
Mock usage 
3
Behavior Driven Development 
• Write the expected Behavior in human language before 
implementation 
• User centric 
• Use concrete examples 
• No context 
Work closely with Product and Dev 
Define a company dictionary for the test 
4
Functional Test Cover 
• Functional tests need to stay maintenable 
• Don’t cover all the cases with automatic tests! 
Automatic tests of the main cases 
• Main path of the customers 
• Nominal cases 
Manual Testing needed for specific cases 
5
Conclusion 
We are hiring! 
http://jobs.meetic.fr/
Any Question ? 
Thanks!

More Related Content

What's hot

Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on native
OdessaJS Conf
 
Ruby conf 2011, Create your own rails framework
Ruby conf 2011, Create your own rails frameworkRuby conf 2011, Create your own rails framework
Ruby conf 2011, Create your own rails framework
Pankaj Bhageria
 

What's hot (20)

Annotations in Java
Annotations in JavaAnnotations in Java
Annotations in Java
 
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
 
Testing AngularJS
Testing AngularJSTesting AngularJS
Testing AngularJS
 
Using API Platform to build ticketing system #symfonycon
Using API Platform to build ticketing system #symfonyconUsing API Platform to build ticketing system #symfonycon
Using API Platform to build ticketing system #symfonycon
 
Outside-in Development with Cucumber and Rspec
Outside-in Development with Cucumber and RspecOutside-in Development with Cucumber and Rspec
Outside-in Development with Cucumber and Rspec
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 
Cucumber Ru09 Web
Cucumber Ru09 WebCucumber Ru09 Web
Cucumber Ru09 Web
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatterns
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-public
 
Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on native
 
jQuery Intro
jQuery IntrojQuery Intro
jQuery Intro
 
Introduction to Ruby On Rails
Introduction to Ruby On RailsIntroduction to Ruby On Rails
Introduction to Ruby On Rails
 
Working with Adwords scripts for reporting with AWQL
Working with Adwords scripts for reporting with AWQLWorking with Adwords scripts for reporting with AWQL
Working with Adwords scripts for reporting with AWQL
 
Crafting Quality PHP Applications (ConFoo YVR 2017)
Crafting Quality PHP Applications (ConFoo YVR 2017)Crafting Quality PHP Applications (ConFoo YVR 2017)
Crafting Quality PHP Applications (ConFoo YVR 2017)
 
Introduccion app engine con python
Introduccion app engine con pythonIntroduccion app engine con python
Introduccion app engine con python
 
Ruby conf 2011, Create your own rails framework
Ruby conf 2011, Create your own rails frameworkRuby conf 2011, Create your own rails framework
Ruby conf 2011, Create your own rails framework
 
Using API platform to build ticketing system (translations, time zones, ...) ...
Using API platform to build ticketing system (translations, time zones, ...) ...Using API platform to build ticketing system (translations, time zones, ...) ...
Using API platform to build ticketing system (translations, time zones, ...) ...
 
Crafting Quality PHP Applications (Bucharest Tech Week 2017)
Crafting Quality PHP Applications (Bucharest Tech Week 2017)Crafting Quality PHP Applications (Bucharest Tech Week 2017)
Crafting Quality PHP Applications (Bucharest Tech Week 2017)
 
Exception mapping using api kit
Exception mapping using api kitException mapping using api kit
Exception mapping using api kit
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
 

Viewers also liked

Belajar android studio dengan membuat aplikasi android sederhana
Belajar android studio dengan membuat aplikasi android sederhanaBelajar android studio dengan membuat aplikasi android sederhana
Belajar android studio dengan membuat aplikasi android sederhana
slempase
 

Viewers also liked (19)

Pengontrol kecerahan lampu pijar menggunakan aplikasi android berbasis arduin...
Pengontrol kecerahan lampu pijar menggunakan aplikasi android berbasis arduin...Pengontrol kecerahan lampu pijar menggunakan aplikasi android berbasis arduin...
Pengontrol kecerahan lampu pijar menggunakan aplikasi android berbasis arduin...
 
Tugas besar
Tugas besarTugas besar
Tugas besar
 
E banking and M-banking
E banking and M-bankingE banking and M-banking
E banking and M-banking
 
Android Training For Beginner @DILO Bandung
Android Training For Beginner @DILO BandungAndroid Training For Beginner @DILO Bandung
Android Training For Beginner @DILO Bandung
 
Android application development
Android application developmentAndroid application development
Android application development
 
Android login example
Android login exampleAndroid login example
Android login example
 
Tutorial Cara Membuat Aplikasi RSS Android - creatorb
Tutorial Cara Membuat Aplikasi RSS Android - creatorbTutorial Cara Membuat Aplikasi RSS Android - creatorb
Tutorial Cara Membuat Aplikasi RSS Android - creatorb
 
Membuat Aplikasi Android Keren
Membuat Aplikasi Android KerenMembuat Aplikasi Android Keren
Membuat Aplikasi Android Keren
 
Ebook tutorial pemrograman android
Ebook tutorial pemrograman android Ebook tutorial pemrograman android
Ebook tutorial pemrograman android
 
Android Workshop beginner
Android Workshop beginnerAndroid Workshop beginner
Android Workshop beginner
 
Belajar android studio dengan membuat aplikasi android sederhana
Belajar android studio dengan membuat aplikasi android sederhanaBelajar android studio dengan membuat aplikasi android sederhana
Belajar android studio dengan membuat aplikasi android sederhana
 
Kenalan Dengan Firebase Android
Kenalan Dengan Firebase AndroidKenalan Dengan Firebase Android
Kenalan Dengan Firebase Android
 
Android Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySqlAndroid Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySql
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan Volley
 
Belajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data MahasiswaBelajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data Mahasiswa
 
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLiteCara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
 
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card View
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card ViewBelajar Android Studio Material Design Penggunaan RecyclerView dan Card View
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card View
 
Belajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog ProdukBelajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog Produk
 
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android SederhanaTutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
 

Similar to Green Light for the Apps with Calaba.sh - DroidCon Paris 2014

Google I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb HighlightsGoogle I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb Highlights
Romain Guy
 
Behaviour driven infrastructure
Behaviour driven infrastructureBehaviour driven infrastructure
Behaviour driven infrastructure
Lindsay Holmwood
 

Similar to Green Light for the Apps with Calaba.sh - DroidCon Paris 2014 (20)

Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDD
 
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?
 
Android testing calabash
Android testing calabashAndroid testing calabash
Android testing calabash
 
Xamarin.Android Introduction
Xamarin.Android IntroductionXamarin.Android Introduction
Xamarin.Android Introduction
 
I, For One, Welcome Our New Robot Overlords
I, For One, Welcome Our New Robot OverlordsI, For One, Welcome Our New Robot Overlords
I, For One, Welcome Our New Robot Overlords
 
Telerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceTelerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT Conference
 
"Managing API Complexity". Matthew Flaming, Temboo
"Managing API Complexity". Matthew Flaming, Temboo"Managing API Complexity". Matthew Flaming, Temboo
"Managing API Complexity". Matthew Flaming, Temboo
 
Google I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb HighlightsGoogle I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb Highlights
 
Intro to appcelerator
Intro to appceleratorIntro to appcelerator
Intro to appcelerator
 
Automating android
Automating androidAutomating android
Automating android
 
Behaviour driven infrastructure
Behaviour driven infrastructureBehaviour driven infrastructure
Behaviour driven infrastructure
 
Testdroid:
Testdroid: Testdroid:
Testdroid:
 
Getting Started with Test Automation: Introduction to Cucumber with Lapis Lazuli
Getting Started with Test Automation: Introduction to Cucumber with Lapis LazuliGetting Started with Test Automation: Introduction to Cucumber with Lapis Lazuli
Getting Started with Test Automation: Introduction to Cucumber with Lapis Lazuli
 
Android Quiz App – Test Your IQ.pdf
Android Quiz App – Test Your IQ.pdfAndroid Quiz App – Test Your IQ.pdf
Android Quiz App – Test Your IQ.pdf
 
How React Native Appium and me made each other shine
How React Native Appium and me made each other shineHow React Native Appium and me made each other shine
How React Native Appium and me made each other shine
 
Creating a Responsive Website From Scratch
Creating a Responsive Website From ScratchCreating a Responsive Website From Scratch
Creating a Responsive Website From Scratch
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
 
APIs for modern web apps
APIs for modern web appsAPIs for modern web apps
APIs for modern web apps
 
Iphone Presentation for MuMe09
Iphone Presentation for MuMe09Iphone Presentation for MuMe09
Iphone Presentation for MuMe09
 
Developing for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformDeveloping for LinkedIn's Application Platform
Developing for LinkedIn's Application Platform
 

Recently uploaded

Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
mbmh111980
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
Alluxio, Inc.
 

Recently uploaded (20)

A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
AI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in MichelangeloAI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in Michelangelo
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Breaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdfBreaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdf
 
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
 
INGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by DesignINGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by Design
 
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabber
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with StrimziStrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
 
AI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning Framework
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
 
Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024
 
How To Build a Successful SaaS Design.pdf
How To Build a Successful SaaS Design.pdfHow To Build a Successful SaaS Design.pdf
How To Build a Successful SaaS Design.pdf
 

Green Light for the Apps with Calaba.sh - DroidCon Paris 2014

  • 1. Green Light for the Apps! Using Calaba.sh @Meetic DroidCon Paris September 23rd 2014 Cédric Creusot Jean-Loup Yu
  • 2. About us Cédric Creusot Android Developer Meetic HQ @Calimeraw Jean-Loup Yu Head of Mobile Development Meetic HQ @djelmen
  • 3. Agenda About Meetic Mobile @Meetic Green light to submit Why Calaba.sh? Hands on Experience Sharing
  • 4. About Meetic The French Success Story
  • 5. The Success Story founded by Marc Simoncini of dating service in Europe of unique visitors / month countries covered by Meetic Service events organized by Meetic employees 2001 #1 7 millions 17 >1000 380
  • 7. Mobile Apps Team – start of 2014 Tech Product Design 4 2 1
  • 8. Mobile Apps Team - now Tech Product Design 14 3 3
  • 9. Mobile Apps Team Scope Android iOS Windows API – Web Services
  • 10. Mobile Team Organization One single open space Cross functional Team
  • 11. Mobile Team Organization Agile From Concept To Store
  • 12. Mobile Team Organization Agile From Concept To Store
  • 13. Mobile Team Organization Agile From Concept To Store
  • 14. Mobile Team Organization Agile From Concept To Store
  • 15. Green light to submit Apps Quality Status
  • 16. Code Quality • Readable • Unit Tested • Smart Architecture • Maintenable
  • 17. Functional Quality • The code do what we want • Work with external components
  • 18. Different Type of Test • Unit Test • Integration Test • Functional Test
  • 19. Different Type of Test • Unit Test • Integration Test • Functional Test
  • 21. Why Calaba.sh? The Functional Tool Choice
  • 22. Specification written with Gherkin All the test cases in Meetic look like: • Given <the context> • When <users do actions> • Then <expected result>
  • 24. Mature • Open Sourced since February 2012 • Based on Cucumber • Born in 2008 • Over 200 contributors • Backed and developed by Xamarin
  • 25. Hands On Code inside
  • 26. The Feature Scenario @login! Feature: Login feature! As a Meetic user! In order to enjoy the service! I want to be able to log into the service! ! Scenario: Wrong Login! Given I am on the Login screen! When I enter my credentials calabash_error@calabash.com and foobar! And I press confirm! Then I should see an error message!
  • 27. The Feature Scenario @login! Feature: Login feature! As a Meetic user! In order to enjoy the service! I want to be able to log into the service! ! Scenario: Wrong Login! Given I am on the Login screen! When I enter my credentials calabash_error@calabash.com and foobar! And I press confirm! Then I should see an error message!
  • 28. The Feature Scenario @login! Feature: Login feature! As a Meetic user! In order to enjoy the service! I want to be able to log into the service! ! Scenario: Wrong Login! Given I am on the Login screen! When I enter my credentials calabash_error@calabash.com and foobar! And I press confirm! Then I should see an error message!
  • 29. The Feature Scenario @login! Feature: Login feature! As a Meetic user! In order to enjoy the service! I want to be able to log into the service! ! Scenario: Wrong Login! Given I am on the Login screen! When I enter my credentials calabash_error@calabash.com and foobar! And I press confirm! Then I should see an error message!
  • 30. The Android Source Code – non intrusive
  • 31. An example step definition – the glue When(/^I enter my credentials (S*) and (S*)$/) do |login, password|! wait_for_screen :login! ! step 'I enter text "" into field with id "loginEdit"'! step "I enter text "#{login}" into field with id "loginEdit""! step 'I enter text "" into field with id "passwordEdit"'! step "I enter text "#{password}" into field with id "passwordEdit""! end! ! ! !
  • 32. Run!
  • 33. The result – human readable
  • 34. How does it works? Step definitions, Ruby client library Features Running environment Instrumentation Test server Your app Devices/Emulators Source: http://blog.lesspainful.com/2012/03/07/Calabash-Android/
  • 35. The commands Installation $>sudo gem install calabash-android! Setup $your_android_project_dir>calabash-android gen! Run tests $>calabash-android resign <your apk>! $>calabash-android run <your apk>! $>ADB_DEVICE_ARG=<your device> calabash-android run <your apk>! ! Better format output $>calabash-android run <your apk> --format html --out result.html! ! !
  • 37. Automated Tests • Map of our code • Ease the issue localisation
  • 40. Multi Language • 12 languages management • 4 brands Calabash Ruby API backdoor(method,arg) 1
  • 41. Backdoor with calabash • Need to run only when we are using calabash • The backdoor can call method only in the current activity tested Create a specific target for Calabash 1
  • 42. In your Android app public class MainActivitiy extends Activity {! public String calabashGetStringById(String stringId) {! String stringToReturn = “”;! if (id != null && !id.isEmpty()) {! Resources resources = getResources();! int resourceId = resources.getIdentifier(stringId, “string”, getPackageName());! stringToReturn = resources.getString(resourceId);! }! return stringToReturn;! } ! }! 1
  • 43. In your glue Given(/^I see the title “([^”]*)”$/) do |key_string|! title = backdoor(“calabashGetStringById”, key_string)! wait_for_text(title)! end! 1
  • 44. Execution Time • Take time to execute the test • During Dev, need to be productive Use label $>calabash-android run <your apk> --tags <your tags>! Example $>calabash-android run myapp.apk --tags @login! 2
  • 45. Dedicated Environment • Control the Data Set • Setup the Back End Huge amount of work! Mock usage 3
  • 46. Behavior Driven Development • Write the expected Behavior in human language before implementation • User centric • Use concrete examples • No context Work closely with Product and Dev Define a company dictionary for the test 4
  • 47. Functional Test Cover • Functional tests need to stay maintenable • Don’t cover all the cases with automatic tests! Automatic tests of the main cases • Main path of the customers • Nominal cases Manual Testing needed for specific cases 5
  • 48. Conclusion We are hiring! http://jobs.meetic.fr/
  • 49. Any Question ? Thanks!