Activité de 2h.
L’intégration continue consiste à déclencher un ensemble de tâches à chaque fois qu’un développeur valide une modification sur un projet (surtout par exemple après un push). Quelques exemples de tâches :
var a=0
) ou commentaire louche (essayer
// TODO
est détecté),Tests système ou de qualification : on vérifie que le logiciel est conforme aux exigences attendues par le client. Il faut vérifier que l’application est fonctionnellement correcte et qu’elle s’intègre bien au système d’information déjà existant chez le client, homologation de l'application, tests de l'ergonomie de l'IHM. Ce niveau de tests est réalisé par un testeur qualifié.
L'intégration continue est de niveau tests fonctionnels (niveau 3) et non pas tests d'intégration (niveau 2).
Avec Travis, les environnements sont recréés à partir de zéro à chaque fois.
Cela permet d’être sûr que le projet ne dépend pas d’une configuration locale particulière, ou qu’un précédent test a laissé traîné des fichiers ou des entrées dans la base de données. Tout est maîtrisé.
Très utilisée dans les méthodes agiles, l’intégration continue suppose une très bonne préparation en amont. Voir l’article Wikipedia.
Attention, il peut parfois être intéressant de déclencher des tâches avant même de valider (pre commit hooks). Voir :
Sign in
…test-travis-python
.Settings
, activez
le service Travis CI
.ON
correspondant au projet.Cloner le dépôt, aller dans le clone, puis créer, commiter et pousser les
fichiers .travis.yml
et mytestmodule.py
décrits ci-après.
Ce fichier décrit les différentes tâches que Travis va accomplir sur votre projet. Le format est le YAML (article Wikipedia).
.travis.yml
:
language: python
python:
- "2.6"
- "2.7"
- "3.2"
- "3.3"
# no dependency to install
script: python mytestmodule.py
Pour plus d’information, voir la page Python sur travis-ci.org :
Le fichier Python, mytestmodule.py
contient à la fois la fonctionnalité à
tester et les tests. Les tests sont codés sous la forme de
doctests. On aurait
pu simplement ajouter à la fin :
assert(test_proc(42) == 43)
.
mytestmodule.py
:
"""Fake module to test tests."""
def test_proc(x):
"""Fake procedure to test doctests.
>>> test_proc(42)
43
"""
return x
if __name__ == "__main__":
import doctest
doctest.testmod(raise_on_error=True)
Après que vous avez poussé sur votre dépôt Github, Travis met votre projet dans la file d’attente, et le résultat arrive sur :
Pour être notifié par email, il faut bien le configurer dans votre client git, ou suivre la doc.
Malheureusement, ce script ne montre pas les détails de l’erreur (43 au lien de 42).
Réparez l’erreur, commitez et poussez, et vérifiez que tout s’est bien passé, par exemple sur Github..
.travis.yml
:
language: php
php:
- "5.5"
- "5.4"
- "5.3"
Remarquez que la tâche de test n’étant pas précisée, Travis va utiliser PHP Unit par défaut (voir la documentation en anglais, en français).
Sans argument sur la ligne de commande, PHPUnit cherche un fichier
phpunit.xml
à la racine du projet, qui lui dira où sont les tests. Avec le
fichier ci-dessous, ils sont supposés être dans le répertoire courant .
,
c’est-à-dire à la racine. Ainsi, tout fichier dont le nom se termine par
Test.php
à la racine sera considéré comme un test.
phpunit.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
<testsuites>
<testsuite name="Test Suite">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>
Voici un exemple simple de fichier .php
contenant un test il suffit d’hériter
de PHPUnit_Framework_TestCase
. Toutes les méthodes seront exécutées.
MonTest.php
:
<?php
class TravisTest extends PHPUnit_Framework_TestCase
{
public function testSimple()
{
$this->assertEquals(0, 1);
}
}
?>
Pour plus d’information, voir la page PHP sur travis-ci.org :
Si le .travis.yml
est mal nommé ou mal formé, il est ignoré silencieusement.
Il peut donc être important de :
travis-lint
(voir pages sur travis-ci.org, en
anglais, en
français), dont
les sources sont disponibles,L’intégration continue permet :
Attention, ici GitHub ne fait pas d’intégration continue. Le qui, c’est Travis.
Les idées notées ici, après la première section, sont valables pour toutes les plateformes d’intégration continue.
Voir la documentation en anglais, en français.
Voir la documentation en anglais, en français.
Ce n’est pas exactement une notification, mais une petite icône est disponible
pour indiquer le statut du projet. Par exemple celle du projet
travis-ci
:
Voir la documentation en anglais, en français.