SlideShare une entreprise Scribd logo
Intégration continue
HockeyApp - Robotium - Jenkins

Aurélien Guillard - @a_guillard
HockeyApp
Beta distribution et Crash report
HockeyApp - Beta distribution
● APKs hébergés chez
HockeyApp
● Alerte des beta testeurs
○ par mail
○ dans l’application

● Historique des versions
○ application Android
○ page web
HockeyApp - Crash report
●
●
●
●
●

Basé sur le volontariat des utilisateurs
Remontée des crashs en temps réel
Regroupement des crashs similaires
Fonctionne avec Proguard
Rapport quotidien par mail
HockeyApp - Statistiques
HockeyApp - Intégration
@Override

● Intégration simple
○ Un JAR à copier
○ 2 méthodes à
appeler

public void onCreate(Bundle savedInstanceState) {
checkForUpdates();
}
@Override
public void onResume() {
super.onResume();
checkForCrashes();
}
private void checkForCrashes() {
CrashManager.register(this, APP_ID);
}
private void checkForUpdates() {
UpdateManager.register(this, APP_ID);
}
HockeyApp - Combien ça coûte ?
Robotium
Implémentation de tests automatiques
Robotium ?
● Extension du framework d’instrumentation Android

Objectif :
Simplifier le
développement
des tests
Robotium - Exemple
@Override
public void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
public void testLogin() {
ScreenshotsUtils.takeScreenshot(solo, getActivity());
solo.enterText((EditText)solo.getView(R.id.mail_editText), "xxxxxxx.xxxxxx@xxxxx.com");
solo.enterText((EditText)solo.getView(R.id.password_editText), "xxxxxxxxxxx");
solo.clickOnView(solo.getView(R.id.connect_button));
assertTrue(solo.waitForActivity(HomeActivity.class));
}
Robotium - Test report
Jenkins
Serveur d’intégration continue
Jenkins
3 jobs
Jenkins - Job ‘viadeo android’
● Vérification toutes les 15 minutes si une
modification a eu lieu sur le repository GIT
● Si oui, update du code
● Compilation
● Envoi d’un mail en cas d’erreur
Jenkins - Job ‘push to HockeyApp’
●
●
●
●

Exécution à la main
Update du code
Compilation
Envoi de l’APK sur HockeyApp
○

plugin : https://wiki.jenkins-ci.org/display/JENKINS/Hockeyapp+Plugin
Jenkins - Job ‘viadeo android test’
● Vérification toutes les 15 minutes si une
modification a eu lieu sur le repository GIT
● Si oui, update du code
● Compilation
● Démarrage d’un émulateur
○

plugin : https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin

● Installation de l’application dans l’émulateur
● Installation de l’application de test dans l’émulateur
● Exécution des tests
Jenkins - Récupération d’un rapport
● Utilisation d’un TestRunner alternatif
○ android junit report
manifest.xml
<instrumentation
android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"
android:targetPackage="com.viadeo.android" />
ant.properties
test.runner=com.zutubi.android.junitreport.JUnitReportTestRunner

Plus d’info : http://zutubi.com/source/projects/android-junit-report/
Jenkins - Récupération d’un rapport
build.xml

● Création d’une
nouvelle target
Ant
● Copie du
rapport en
XML dans le
projet

<target name="fetch-test-report" >
<xpath
expression="/manifest/@package"
input="${tested.project.dir}/AndroidManifest.xml"
output="tested.manifest.package" />
<echo>Downloading XML test report...</echo>
<mkdir dir="junitreports" />
<exec
executable="${adb}"
failonerror="true" >
<arg line="${adb.device.arg}" />
<arg value="pull" />
<arg value="/data/data/${tested.manifest.package}/files/junit-report.xml" />
<arg value="junitreports/junit-report.xml" />
</exec>
</target>
Jenkins - Récupération d’un rapport
● Création d’une
nouvelle target Ant
● Copie du dossier de
screenshots robotium
dans le projet

build.xml
<target name="fetch-test-screenshots" >
<echo>Downloading test screenshots...</echo>
<mkdir dir="Robotium-Screenshots" />
<exec
executable="${adb}"
failonerror="true" >
<arg line="${adb.device.arg}" />
<arg value="pull" />
<arg value="/sdcard/Robotium-Screenshots" />
<arg value="Robotium-Screenshots" />
</exec>
</target>
Jenkins - Résultats des tests
Next Steps
● Ecrire plus de scénarios de tests
● Exécuter les tests sur Genymotion ?
● Passer de Ant à Gradle ?

Contenu connexe

En vedette

Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
Frédéric Sagez
 
Intégration continue
Intégration continueIntégration continue
Intégration continueKlee Group
 
Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for selenium
apoorvams
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
Pavan Kumar
 
Resultado 2
Resultado 2Resultado 2
Resultado 2
Sarahi Pech
 
L'innovation en boutique
L'innovation en boutiqueL'innovation en boutique
L'innovation en boutique
Connected Futures
 
trabajo sobre Hypervinculos
trabajo sobre Hypervinculostrabajo sobre Hypervinculos
trabajo sobre Hypervinculos
josealvarezgualtero
 
Proyecto tuning
Proyecto  tuningProyecto  tuning
Proyecto tuning
Hernandez Diana
 
Origen de la vida.
Origen de la vida.Origen de la vida.
Origen de la vida.
anahirodri
 
Elementos de un pc
Elementos de un pcElementos de un pc
Elementos de un pc
alvariiito
 
Economia 2 parcial
Economia 2 parcialEconomia 2 parcial
Economia 2 parcial
Carla Nieto
 
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y..."COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
Dinora Hernandez Arias
 
1400 1500مخطوطة أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي
 1400 1500مخطوطة  أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي   1400 1500مخطوطة  أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي
1400 1500مخطوطة أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي
سمير بسيوني
 
Maroc_2
Maroc_2Maroc_2
Entrevista al docente
Entrevista al docenteEntrevista al docente
Entrevista al docente
danielaanoriega
 
¿Qué es un Blog?
  ¿Qué es un Blog?  ¿Qué es un Blog?
¿Qué es un Blog?
FridaSaad
 
La revolución energética y la sostenibilidad
La revolución energética y la sostenibilidadLa revolución energética y la sostenibilidad
La revolución energética y la sostenibilidad
Beatriz Onni
 
Obesidad y sobrepeso (Presentación)
Obesidad y sobrepeso (Presentación)Obesidad y sobrepeso (Presentación)
Obesidad y sobrepeso (Presentación)
rubijimenezo
 
Curso virtual
Curso virtualCurso virtual
Curso virtual
Mirko Elvis Meyoso
 
Vie à lasne de septembre 2014 partie 1 de 2 - site
Vie à lasne de septembre 2014   partie 1 de 2 - siteVie à lasne de septembre 2014   partie 1 de 2 - site
Vie à lasne de septembre 2014 partie 1 de 2 - site
comlasne
 

En vedette (20)

Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for selenium
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
 
Resultado 2
Resultado 2Resultado 2
Resultado 2
 
L'innovation en boutique
L'innovation en boutiqueL'innovation en boutique
L'innovation en boutique
 
trabajo sobre Hypervinculos
trabajo sobre Hypervinculostrabajo sobre Hypervinculos
trabajo sobre Hypervinculos
 
Proyecto tuning
Proyecto  tuningProyecto  tuning
Proyecto tuning
 
Origen de la vida.
Origen de la vida.Origen de la vida.
Origen de la vida.
 
Elementos de un pc
Elementos de un pcElementos de un pc
Elementos de un pc
 
Economia 2 parcial
Economia 2 parcialEconomia 2 parcial
Economia 2 parcial
 
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y..."COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
 
1400 1500مخطوطة أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي
 1400 1500مخطوطة  أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي   1400 1500مخطوطة  أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي
1400 1500مخطوطة أثرية كاملة للمصحف ترجع للقرن الخامس الميلادي
 
Maroc_2
Maroc_2Maroc_2
Maroc_2
 
Entrevista al docente
Entrevista al docenteEntrevista al docente
Entrevista al docente
 
¿Qué es un Blog?
  ¿Qué es un Blog?  ¿Qué es un Blog?
¿Qué es un Blog?
 
La revolución energética y la sostenibilidad
La revolución energética y la sostenibilidadLa revolución energética y la sostenibilidad
La revolución energética y la sostenibilidad
 
Obesidad y sobrepeso (Presentación)
Obesidad y sobrepeso (Presentación)Obesidad y sobrepeso (Presentación)
Obesidad y sobrepeso (Presentación)
 
Curso virtual
Curso virtualCurso virtual
Curso virtual
 
Vie à lasne de septembre 2014 partie 1 de 2 - site
Vie à lasne de septembre 2014   partie 1 de 2 - siteVie à lasne de septembre 2014   partie 1 de 2 - site
Vie à lasne de septembre 2014 partie 1 de 2 - site
 

Similaire à PAUG - Intégration Continue - Décembre 2013

Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0adrienhautot
 
publier une application Node sur heroku
publier une application Node sur herokupublier une application Node sur heroku
publier une application Node sur herokueric German
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
Nicolas Mussat
 
Acra
Acra Acra
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
GreenIvory
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
XavierPestel
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Ionic
IonicIonic
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
Vincent Composieux
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
Hugo Hamon
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Publicis Sapient Engineering
 
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Corinne Schillinger
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.js
Julien Giovaresco
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
Jean-Pierre Vincent
 
React Native - Développez vos application native en JS
React Native - Développez vos application native en JSReact Native - Développez vos application native en JS
React Native - Développez vos application native en JS
Yann Duval
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1
David Herviou
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
msadouni
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
Habib Ayad
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
Membré Guillaume
 
Comment construire son laboratoire de tests mobiles avec HP Mobile Center
Comment construire son laboratoire de tests mobiles avec HP Mobile CenterComment construire son laboratoire de tests mobiles avec HP Mobile Center
Comment construire son laboratoire de tests mobiles avec HP Mobile Center
Guillaume Deshayes
 

Similaire à PAUG - Intégration Continue - Décembre 2013 (20)

Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0
 
publier une application Node sur heroku
publier une application Node sur herokupublier une application Node sur heroku
publier une application Node sur heroku
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
Acra
Acra Acra
Acra
 
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Ionic
IonicIonic
Ionic
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
 
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.js
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
React Native - Développez vos application native en JS
React Native - Développez vos application native en JSReact Native - Développez vos application native en JS
React Native - Développez vos application native en JS
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Comment construire son laboratoire de tests mobiles avec HP Mobile Center
Comment construire son laboratoire de tests mobiles avec HP Mobile CenterComment construire son laboratoire de tests mobiles avec HP Mobile Center
Comment construire son laboratoire de tests mobiles avec HP Mobile Center
 

Dernier

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
Les écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptxLes écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptx
abderrahimbourimi
 
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
Horgix
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 

Dernier (6)

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
Les écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptxLes écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptx
 
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 

PAUG - Intégration Continue - Décembre 2013

  • 1. Intégration continue HockeyApp - Robotium - Jenkins Aurélien Guillard - @a_guillard
  • 3. HockeyApp - Beta distribution ● APKs hébergés chez HockeyApp ● Alerte des beta testeurs ○ par mail ○ dans l’application ● Historique des versions ○ application Android ○ page web
  • 4. HockeyApp - Crash report ● ● ● ● ● Basé sur le volontariat des utilisateurs Remontée des crashs en temps réel Regroupement des crashs similaires Fonctionne avec Proguard Rapport quotidien par mail
  • 6. HockeyApp - Intégration @Override ● Intégration simple ○ Un JAR à copier ○ 2 méthodes à appeler public void onCreate(Bundle savedInstanceState) { checkForUpdates(); } @Override public void onResume() { super.onResume(); checkForCrashes(); } private void checkForCrashes() { CrashManager.register(this, APP_ID); } private void checkForUpdates() { UpdateManager.register(this, APP_ID); }
  • 7. HockeyApp - Combien ça coûte ?
  • 9. Robotium ? ● Extension du framework d’instrumentation Android Objectif : Simplifier le développement des tests
  • 10. Robotium - Exemple @Override public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); } @Override public void tearDown() throws Exception { solo.finishOpenedActivities(); } public void testLogin() { ScreenshotsUtils.takeScreenshot(solo, getActivity()); solo.enterText((EditText)solo.getView(R.id.mail_editText), "xxxxxxx.xxxxxx@xxxxx.com"); solo.enterText((EditText)solo.getView(R.id.password_editText), "xxxxxxxxxxx"); solo.clickOnView(solo.getView(R.id.connect_button)); assertTrue(solo.waitForActivity(HomeActivity.class)); }
  • 11. Robotium - Test report
  • 14. Jenkins - Job ‘viadeo android’ ● Vérification toutes les 15 minutes si une modification a eu lieu sur le repository GIT ● Si oui, update du code ● Compilation ● Envoi d’un mail en cas d’erreur
  • 15. Jenkins - Job ‘push to HockeyApp’ ● ● ● ● Exécution à la main Update du code Compilation Envoi de l’APK sur HockeyApp ○ plugin : https://wiki.jenkins-ci.org/display/JENKINS/Hockeyapp+Plugin
  • 16. Jenkins - Job ‘viadeo android test’ ● Vérification toutes les 15 minutes si une modification a eu lieu sur le repository GIT ● Si oui, update du code ● Compilation ● Démarrage d’un émulateur ○ plugin : https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin ● Installation de l’application dans l’émulateur ● Installation de l’application de test dans l’émulateur ● Exécution des tests
  • 17. Jenkins - Récupération d’un rapport ● Utilisation d’un TestRunner alternatif ○ android junit report manifest.xml <instrumentation android:name="com.zutubi.android.junitreport.JUnitReportTestRunner" android:targetPackage="com.viadeo.android" /> ant.properties test.runner=com.zutubi.android.junitreport.JUnitReportTestRunner Plus d’info : http://zutubi.com/source/projects/android-junit-report/
  • 18. Jenkins - Récupération d’un rapport build.xml ● Création d’une nouvelle target Ant ● Copie du rapport en XML dans le projet <target name="fetch-test-report" > <xpath expression="/manifest/@package" input="${tested.project.dir}/AndroidManifest.xml" output="tested.manifest.package" /> <echo>Downloading XML test report...</echo> <mkdir dir="junitreports" /> <exec executable="${adb}" failonerror="true" > <arg line="${adb.device.arg}" /> <arg value="pull" /> <arg value="/data/data/${tested.manifest.package}/files/junit-report.xml" /> <arg value="junitreports/junit-report.xml" /> </exec> </target>
  • 19. Jenkins - Récupération d’un rapport ● Création d’une nouvelle target Ant ● Copie du dossier de screenshots robotium dans le projet build.xml <target name="fetch-test-screenshots" > <echo>Downloading test screenshots...</echo> <mkdir dir="Robotium-Screenshots" /> <exec executable="${adb}" failonerror="true" > <arg line="${adb.device.arg}" /> <arg value="pull" /> <arg value="/sdcard/Robotium-Screenshots" /> <arg value="Robotium-Screenshots" /> </exec> </target>
  • 20. Jenkins - Résultats des tests
  • 21. Next Steps ● Ecrire plus de scénarios de tests ● Exécuter les tests sur Genymotion ? ● Passer de Ant à Gradle ?