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
• The code do what we want
• Work with external
components
Functional Quality
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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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?
Running environment
Features
Step definitions, Ruby client library
Devices/Emulators
Your app
Instrumentation Test server
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
• Map of our code
• Ease the issue localisation
Automated Tests
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!
Top Related