Intégration continue et couverture de code sur iOS avec Travis et Coveralls

Depuis quelques années maintenant, j'accorde une grande importance à l'intégration continue et aux tests automatisés (unitaires et fonctionnels) dans mes développements. J'ai très souvent eu la chance d'avoir des serveurs d'intégrations continue à disposition chez mes clients (Hudson au début, puis Jenkins).

Je ne reviendrais pas sur les avantages de l'intégration continue, des tests unitaires automatisés et des boucles de feedback rapides, mais ces outils sont très utiles pour cela. Malheureusement ils sont aussi complexes à installer, configurer, maintenir lorsque l'on veut les utiliser pour des projets personnels.

Heureusement, j'ai découvert récemment que Travis CI supportait les builds Xcode, et que Coveralls avait une API qui permettait de supporter n'importe quel environnement. Autre point important, Travis et Coveralls sont gratuits pour les dépots GitHub publiques.

Travis CI

Travis s'occupe de l'intégration continue. Il lance automatiquement un build à chaque nouveau push. Il s'interface avec GitHub, détecte automatiquement les nouvelles branches et pull requests, et crée de nouveau "jobs" à la volée (Yeah feature branchs !).

Configuration

Travis devrait détecter le nouveau push, et commencer à construire votre projet. Par défaut, si votre projet contient un fichier Podfile, Travis lance automatiquement pod install avant de construire votre projet.

Lorsqu'il a fini, Travis génère un rapport de build sur sa page. Voici un exemple : build history

Coveralls

Tout ce qui est mesuré et observé, s'améliore.

-- Bob Parsons

Ecrire des tests est une bonne pratique, mais être conscient de sa couverture de test est encore mieux. Coveralls s'interface avec Travis et GitHub afin de présenter le taux de couverture par les tests, ainsi que son évolution au fil des builds.

La mise en oeuvre étant un peu plus complexe, je me suis basé sur ce très bon article d'Oliver Drobnik : Xcode Coverage

Configurer Xcode

La génération de fichiers de couverture de code n'étant pas anodine, j'ai décidé de créer une configuration de build spécifique (Coverage), afin de ne pas polluer la configuration de Debug.

Suite à ces manipulations, notre projet Xcode est configuré pour générer des fichiers .gcda et .gcno qui nous serviront à calculer la couverture de code. Il nous reste ensuite à configurer Travis afin qu'il utilise ce nouveau Scheme, et à uploader les résultats sur Coveralls.

Configurer Travis et Coverall

Afin d'uploader les résultats sur Coveralls, j'utilise un script créé par Oliver Drobnik (disponible ici). Il suffit de le placer à la racine de son projet (en s'assurant qu'il soit bien exécutable), et de modifier le fichier .travis.yml comme ceci (le script dépend de cpp-coveralls) :

Si tout est bien configuré, vos résultats de couverture de test seront bien uploadés. Coveralls vous les présentera en montrant la progression au fil des builds. Coveralls History

Bonus

Conclusion

Et voila, normalement, lorsque vous pousserez vos fichier sur GitHub, Travis se chargera de builder votre projet, et uploadera vos stats de couverture de test sur Coveralls. Vous n'avez plus d'excuse pour ne pas utiliser d'intégration continue sur vos projets personnels !

comments powered by Disqus