Journal Automatiser les tests multi-plateforme avec Sivart

Posté par (page perso) . Licence CC by-sa
Tags :
13
18
fév.
2015

Abat-jour' nal (variante médiocre sur un thème connu)

Lors de mes développements en C/C++, j'ai parfois besoin de tester la portabilité du code que j'écris, entre différentes architectures, ou quand j'ai des dépendances sur différentes versions d'ubuntu/Debian/*BSD. Et pourquoi pas OSX.

Alors d'habitude je teste sur ma machine, puis je lance une VM from scratch, je teste à la main, et c'est lourd et long, donc je ne le fais pas souvent/pas méthodiquement. J'utilise aussi travis-ci mais pour le multi-plateforme, c'est pas terrible.

Et puis on m'a parlé de vagrant, alors j'ai joué avec puis j'ai commis https://pypi.python.org/pypi/sivart

C'est rien qu'une moulinette qui lit les étapes d'installation dans un fichier de description et lance des VMs en fonction de la description, en faisant le produit cartésien des environnements demandés (par exemple pour tester avec différentes combinaisons de flags de compil).

Par exemple pour tester Pythran — c'était mon cas d'utilisation à la base :

# here I describe my facets, something like base classes
.compilers:
    env:
        - CXX=clang++-3.5
        - CXX=g++

# here I share the install and test steps for all debian derivatives
.deb:
    install:
        - apt-get update
        - apt-get install -y libboost-python-dev libgoogle-perftools-dev libgmp-dev libboost-dev git cmake python-ply python-networkx python-numpy clang
        - apt-get install -y python-pytest-xdist python-docutils python-setuptools
        - apt-get install -y clang-3.5
        - apt-get install -y g++-4.8 g++
        - apt-get install -y libgoogle-perftools-dev libgmp-dev git cmake make
        - easy_install colorlog pytest-pep8
        - easy_install -U numpy
    script:
        - printf "[user]\ncxx=$CXX\n" > .pythranrc
        - git clone https://github.com/serge-sans-paille/pythran.git -b bugfix/more-robust-openmp-detection
        - cd pythran
        - python setup.py build
        - python setup.py install
        - py.test pythran/tests/test_cases.py

# then I describe my base classes and the vagrant box to use
ubuntu-trusty64:
    using:
        - .compilers
        - .deb
    box: ubuntu/trusty64

ubuntu-trusty32:
    using:
        - .compilers
        - .deb
    box: ubuntu/trusty32

jessy64:
    using:
       - .compilers
       - .deb
    box: thoughtbot/debian-jessie-64

Alors voilà c'est tout bête, quelques heures de dév. au plus, mais ça m'a permis de trouver plusieurs bugs d'install et de portabilité pour mon projet chéri, alors je partage !

  • # Rapatrier le résultat

    Posté par . Évalué à 3.

    Moi aussi je pense utiliser Vagrant pour automatiquement générer des environnements virtuels et lancer des tests.

    En regardant ton exemple, je ne vois pas comment tu récupères le résultat des tests depuis la machine virtuelle. Lances-tu simplement les tests via Vagrant que tu vérifies ensuite manuellement ou as tu une méthode pour rapatrier le déroulement des tests sur la machine hôte?

    • [^] # Re: Rapatrier le résultat

      Posté par (page perso) . Évalué à 1.

      Pour le moment c'est du tout ou rien (le code de retour est le nombre d'erreurs). Si y a une erreur, tu peux te connecter à la box qui n'est détruite que si les tests ne renvoient pas d'erreur.

      Tu peux aussi mettre la copie des résultats dans un shared folders, mais ça dépend des tests → pas automatique.

      Des idées ?

      • [^] # Re: Rapatrier le résultat

        Posté par . Évalué à 2.

        L'idée que j'ai en tête c'est de lancer un serveur de messages sur la machine hôte genre RabittMQ ou Celery et de faire en sorte que la machine de test renvoie les données par ce moyen.

        Après je n'ai pas encore poussé plus loin pour une preuve de concept.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.