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

●...
HockeyApp - Crash report
●
●
●
●
●

Basé sur le volontariat des utilisateurs
Remontée des crashs en temps réel
Regroupemen...
HockeyApp - Statistiques
HockeyApp - Intégration
@Override

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

public void onCreate(Bun...
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());
...
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
● ...
Jenkins - Job ‘push to HockeyApp’
●
●
●
●

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

...
Jenkins - Job ‘viadeo android test’
● Vérification toutes les 15 minutes si une
modification a eu lieu sur le repository G...
Jenkins - Récupération d’un rapport
● Utilisation d’un TestRunner alternatif
○ android junit report
manifest.xml
<instrume...
Jenkins - Récupération d’un rapport
build.xml

● Création d’une
nouvelle target
Ant
● Copie du
rapport en
XML dans le
proj...
Jenkins - Récupération d’un rapport
● Création d’une
nouvelle target Ant
● Copie du dossier de
screenshots robotium
dans l...
Jenkins - Résultats des tests
Next Steps
● Ecrire plus de scénarios de tests
● Exécuter les tests sur Genymotion ?
● Passer de Ant à Gradle ?
Prochain SlideShare
Chargement dans…5
×

PAUG - Intégration Continue - Décembre 2013

1 918 vues

Publié le

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 918
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 150
Actions
Partages
0
Téléchargements
8
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

PAUG - Intégration Continue - Décembre 2013

  1. 1. Intégration continue HockeyApp - Robotium - Jenkins Aurélien Guillard - @a_guillard
  2. 2. HockeyApp Beta distribution et Crash report
  3. 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. 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
  5. 5. HockeyApp - Statistiques
  6. 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. 7. HockeyApp - Combien ça coûte ?
  8. 8. Robotium Implémentation de tests automatiques
  9. 9. Robotium ? ● Extension du framework d’instrumentation Android Objectif : Simplifier le développement des tests
  10. 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. 11. Robotium - Test report
  12. 12. Jenkins Serveur d’intégration continue
  13. 13. Jenkins 3 jobs
  14. 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. 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. 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. 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. 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. 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. 20. Jenkins - Résultats des tests
  21. 21. Next Steps ● Ecrire plus de scénarios de tests ● Exécuter les tests sur Genymotion ? ● Passer de Ant à Gradle ?

×