Famille de geeks
Une famille complètement 633<

Test unitaire automatisé lors d’un push sur github

travis

Suite au développement de garchdeps (outils de gestion des dépendances pour Archlinux). J’ai rencontré des problèmes lors de l’accès à certaines propriétés de mon code Python, je n’utilisais pas les nouvelles méthodes de création de classe. C’est pour cela que je me suis mis à la recherche d’une solution permettant d’effectuer des tests unitaires automatiques après chaque push sur le dépot github, Pratique en travail d’équipe, cela permet de s’assurer que le code est toujours valide lorsqu’un membre pushe son code.

Pour cela, je vais utiliser le projet communautaire www.travis-ci.org couplé à github

Travis-CI c’est quoi ?

Travis-CI est une plateforme d’intégration continue, créée par la communauté Ruby, cette plateforme est libre et comme le dit la dévise du projet:

A distributed build system for the open source community

Cette plateforme est principalement dédiée à la communauté du libre, d’ailleurs dans sa version communautaire, elle ne prend en compte que les dépôts github publics. Actuellement travis-ci gère une quinzaine de langages.

A noter que les sources travis-ci sont disponibles sur le dépôt github

Synchronisation entre travis et github

Pour créer un compte sur travis-CI, rien de plus simple, il suffit de cliquer sur « sign in with github », une fois que vous vous êtes connecté, sélectionnez les dépôts sur lesquels vous désirez effectuer des tests unitaires

Configuration de votre projet pour supporter le test unitaire (Python)

A la racine de votre projet, créez le fichier .travis.yml contenant au minimum les lignes suivantes

# Language à parser
language: python

# Version de python à tester
python:
- "2.7"
- "3.2"

# script du test unitaire à executer
script: ./garchdeps.py --test

Exemple d’un code de test unitaire

class TestPackages(unittest.TestCase):
 def setUp(self):
     """Before unittest"""
     pwd = os.path.dirname(__file__)
     filename = "%s/%s" % (pwd, "packages.cache")
     self.__allpackages = loadPkgInfo(filename, False, True)

 def test_summary(self):
     """ test summary properties"""
     self.assertEqual(len(self.__allpackages), 1277)
     self.assertEqual(self.__allpackages.fullsize, 6347736)

 def test_size(self):
     """ test object size"""
     self.assertEqual(self.__allpackages.getPkgByName('libreoffice-common').size, 241767)
     self.assertEqual(self.__allpackages.getPkgByName('kdebase-workspace').size, 73720)
     self.assertEqual(self.__allpackages.getPkgByName('arduino').size, 47104)

 def test_maxiobject(self):
     self.assertEqual(self.__allpackages.maxi['size'].pkgname,
                      'libreoffice-common')
     self.assertEqual(self.__allpackages.maxi['depssize'].pkgname,
                      'kdeplasma-applets-networkmanagement')
     self.assertEqual(self.__allpackages.maxi['nbused'].pkgname,
                      'glibc')
     self.assertEqual(self.__allpackages.maxi['nbtotaldeps'].pkgname,
                      'kdeplasma-applets-networkmanagement')
     self.assertEqual(self.__allpackages.maxi['maxdepth'].pkgname,
                      'kdeutils-kremotecontrol')

 def test_maxivalue(self):
     self.assertEqual(self.__allpackages.maxi['size'].size,
                      241767.0)
     self.assertEqual(self.__allpackages.maxi['depssize'].depssize,
                      1472500.0)
     self.assertEqual(self.__allpackages.maxi['nbused'].nbused,
                      165)
     self.assertEqual(self.__allpackages.maxi['nbtotaldeps'].nbtotaldeps,
                      292)
     self.assertEqual(self.__allpackages.maxi['maxdepth'].maxdepth,
                      16)

Push du code vers github

Après avoir commité et pushé le code vers github, et après une attente de quelques secondes, le résultat de votre build devrait apparaître sur le site travis-ci et devrait ressembler à la capture ci-dessous

travis ci

Bonus

Sur la page README.md de votre projet (github) il est possible d’ajouter un bouton qui permet d’indiquer si les tests se sont correctement déroulés. Il vous suffit d’ajouter la ligne suivante

[![Build Status](https://secure.travis-ci.org/badele/garchdeps.png)](http://travis-ci.org/badele/garchdeps)

Ce qui donne ceci

garchdeps

2 réponses à Test unitaire automatisé lors d’un push sur github

  1. com592 Charlycoste dit :

    Je me permets juste un petit commentaire car tu as omis de préciser que Travis-CI est un logiciel libre sous licence MIT => https://github.com/travis-ci/travis-core/blob/master/LICENSE

    Ce qui le rend d’autant plus intéressant selon moi… :D

  2. com600 François dit :

    Merci. Je me posais des questions sur Travis et tu y reponds. C’est sympa.

Bruno Adelé

A propos de Bruno Adelé

Agé de 40 ans avec 20 ans d'expérience dans le développement et dans le réseau (y compris internet). Passionné d'informatique depuis son plus jeune âge, a un faible pour les logiciels libres. En recherche d'opportunité dans la région de Montpellier pour exercer sa passion, de préférence dans la R&D

Comments