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!

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

  • 1.
    Green Light forthe Apps! Using Calaba.sh @Meetic DroidCon Paris September 23rd 2014 Cédric Creusot Jean-Loup Yu
  • 2.
    About us CédricCreusot 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 TheFrench 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
  • 6.
  • 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 TeamScope 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 tosubmit 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 ofTest • Unit Test • Integration Test • Functional Test
  • 19.
    Different Type ofTest • Unit Test • Integration Test • Functional Test
  • 20.
  • 21.
    Why Calaba.sh? TheFunctional Tool Choice
  • 22.
    Specification written withGherkin All the test cases in Meetic look like: • Given <the context> • When <users do actions> • Then <expected result>
  • 23.
  • 24.
    Mature • OpenSourced since February 2012 • Based on Cucumber • Born in 2008 • Over 200 contributors • Backed and developed by Xamarin
  • 25.
  • 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 SourceCode – non intrusive
  • 31.
    An example stepdefinition – 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.
  • 33.
    The result –human readable
  • 34.
    How does itworks? 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! ! !
  • 36.
  • 37.
    Automated Tests •Map of our code • Ease the issue localisation
  • 38.
  • 39.
  • 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 Androidapp 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 arehiring! http://jobs.meetic.fr/
  • 49.