paug - intégration continue - décembre 2013
TRANSCRIPT
Intégration continueHockeyApp - Robotium - Jenkins
Aurélien Guillard - @a_guillard
HockeyAppBeta 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
● Intégration simple○ Un JAR à copier○ 2 méthodes à
appeler
@Overridepublic void onCreate(Bundle savedInstanceState) { checkForUpdates();}@Overridepublic 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 ?
RobotiumImplé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), "[email protected]");
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
JenkinsServeur 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
Plus d’info : http://zutubi.com/source/projects/android-junit-report/
manifest.xml
<instrumentation
android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"
android:targetPackage="com.viadeo.android" />
ant.propertiestest.runner=com.zutubi.android.junitreport.JUnitReportTestRunner
Jenkins - Récupération d’un rapport
● Création d’une nouvelle target Ant
● Copie du rapport en XML dans le projet
build.xml
<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 ?