DEPLOYER AVEC LES TESTS
Christophe Villeneuve
30 Janvier 2013
nAcademy – 30 Janvier 2013
Les Tests
✔ « Des fois cela plante »
Citations
✔ « On a testé, …
il y a 3 mois lors de la dernière livraison...
Pas eu le temps... »
nAcademy – 30 Janvier 2013
L'importance des Tests
✔ Le code peut casser✔ Changer le nom d'un
fichier
✔ Pas le temps d'en faire
✔ C'est long manuellement
Pourquoi c'est utile ? Et L'intérêt...✔ Coûte du temps au début
✔ En fait gagner ensuite
✔ Nécessite de la rigueur et de la constante
nAcademy – 30 Janvier 2013
Les différents types de tests
✔ Tests Unitaires✔ Module / classe / méthode
✔ Tests fonctionnels✔ l'interface utilisateur testée par le client
✔ Tests intégrations✔ Tester la navigation, et l'interface utilisateur
✔ Tests Automatisés✔ Détecter les régressions, c'est rapide✔ Le faire à chaque livraison de lots
✔ Tests de charges✔ Tests d'ergonomie✔ Tests de sécurité
nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests unitaires
✔ Ecrire un test qui échoue
✔ Ecrire un test qui est bon
✔ Un test de sécurité
✔ Un test de contrôle
Déroulement Quoi tester ?✔ Un module
✔ Une classe
✔ Une méthode
✔ Tester✔ Ce qui est important✔ Le risque de casser✔ Les parties que vous
touchez souvent
nAcademy – 30 Janvier 2013
Tests unitaires : utilisation
✔ jUnit
✔ SimpleTest
✔ Zend_test
✔ PHPUnit
✔ Atoum
✔ ...
Outils
nAcademy – 30 Janvier 2013
Tests unitaires : cas pratique PHPUnit
nAcademy – 30 Janvier 2013
Installation
En ligne de commandes
# sudo apt-get install phpunit
# pear channel-discover pear.phpunit.de
# pear channel-discover components.ez.no
# pear channel-discover pear.symfony-project.com
En mode assistée
- Windows
- Linux
- Mac
Avec IDE
- Eclipse PDT
- Netbeans
nAcademy – 30 Janvier 2013
Tests Unitaires : 1
<?php
class calculs
{
public function add($a, $b)
{
return $a + $b;
}
}
?>
<?php
class calculs
{
/**
* @assert (0, 0) == 0
* @assert (0, 1) == 1
* @assert (1, 0) == 1
* @assert (1, 1) == 2
* @assert (1, 2) == 4
*/
public function add($a, $b)
{
return $a + $b;
}
}
?>
Du code... +ieurs commentaires
nAcademy – 30 Janvier 2013
Tests Unitaires : 1
<?php
class calculs
{
/**
* @assert (0, 0) == 0
*/
public function add($a, $b)
{
return $a + $b;
}
}
?>
<?php
/**
* Generated from @assert (1, 1) == 2
*/
public function testAdd4()
{
$this->assertEquals(
2,
$this->object->add(1, 1)
);
}
?>
1 commentaire Passer au test
nAcademy – 30 Janvier 2013
Tests Unitaires : 2
<?php
session_start();
require_once '/config.php';
class tests_user extends PHPUnit_Framework_TestCase {
function __construct() {
$this->bdd = new BDD();
$this->bdd->connect();
$this->bdd->requete("DROP TABLE IF EXISTS `user`");
$this->bdd->requete("CREATE TABLE `user`...");
}
function test_insert_user() {
$html = new html() ;
$formulaire = new Form('data');
$data= array (
'user' => array (
'login' => 'admin',
'nom' => 'nom',
'prenom' => 'prenom',
'email' => '[email protected]',
'id_profil' => 115, )
);
add($this->bdd,$formulaire,$html,$data);
}
?>
nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests fonctionnels
✔ Prépare outil & API
✔ On le partage
✔ On récupère le résultat
Déroulement Quoi tester ?✔ Nous... Rien
✔ C'est le client
nAcademy – 30 Janvier 2013
Tests fonctionnels : utilisation
✔ Sélénium
✔ Behat
✔ Fitness
✔ Cucumber
✔ GreenPepper
Outils
nAcademy – 30 Janvier 2013
Test fonctionnels : cas pratique avec GreenPepper
nAcademy – 30 Janvier 2013
Installation
Logiciel (*.jar)
Avec IDE : Eclipse PDT / Netbeans
nAcademy – 30 Janvier 2013
Tests fonctionnels : cas pratique avec GreenPepper
1
2
3
nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests d'intégrations
✔ 1 Navigation de la prod.
✔ Générer le script pour repérer les modifications de comportement
✔ 1 exécution sur le nouveau serveur
Déroulement Pourquoi ?✔ Simulation d'un être
humain
✔ Détection des problèmes éventuels
nAcademy – 30 Janvier 2013
Tests d'intégrations : utilisation
✔ Sélénium
✔ Sikuli
✔ Hudson
✔ Jenkins
✔ PhpUnderControl
Outils
nAcademy – 30 Janvier 2013
Tests d'intégrations : cas pratique avec Selenium
nAcademy – 30 Janvier 2013
Utilisation Selenium
A partir d'un *.jar
nAcademy – 30 Janvier 2013
Utilisation PHP Unit & Selenium
# sudo apt-get install phpunit
# sudo apt-get install php5-curl
# sudo apt-get install php-selenium
En mode assistée
- Windows
- Linux
- Mac
Avec IDE
- Eclipse PDT
- Netbeans
nAcademy – 30 Janvier 2013
Utilisation PHP Unit & Selenium
<?php
class TestLogin extends PHPUnit_Extensions_Selenium2TestCase {
public function setUp()
{
$this->setHost('localhost');
$this->setPort(4444);
$this->setBrowser('firefox');
$this->setBrowserUrl('http://localhost/seleniumTut');
}
public function testHasLoginForm()
{
$this->url('index.php');
$username = $this->byName('username');
$password = $this->byName('password');
$this->assertEquals('', $username->value());
$this->assertEquals('', $password->value());
}
nAcademy – 30 Janvier 2013
Utilisation PHP Unit & Selenium
<?php
public function testSubmitButtonIsDisabledUntilFieldsAreFilled()
{
$this->url('index.php');
$username = $this->byName('username');
$password = $this->byName('password');
$submit = $this->byId('submit');
$this->assertFalse($submit->enabled());
$username->value('jeff_way');
$password->value('1234');
$this->assertTrue($submit->enabled());
$username->clear();
$password->clear();
$username->value(' ');
$this->assertFalse($submit->enabled());
}
?>
nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests de charge
✔ Préparer un scénario
✔ Saisir le nombre de connexion simultané
✔ Voir le résultat
Déroulement Pourquoi ?✔ Générer une charge
réaliste avec 1 scénario
✔ Superviser un test de charge
✔ Analyser les résultats
nAcademy – 30 Janvier 2013
Tests de charge : utilisation
✔ Java EE
✔ Tsung
✔ jMeter
Outils
nAcademy – 30 Janvier 2013
Tests de charge : cas pratique avec jMeter
nAcademy – 30 Janvier 2013
Installation
Logiciel (*.jar)
Avec IDE : Eclipse PDT / Netbeans
nAcademy – 30 Janvier 2013
Préparer un scénario fonctionnel
nAcademy – 30 Janvier 2013
Préparer un scénario fonctionnel
nAcademy – 30 Janvier 2013
Afficher le scénario
nAcademy – 30 Janvier 2013
Déployer avec les tests
nAcademy – 30 Janvier 2013
Le début du commencement
✔ Suivre une procédure claire ✔ Faire un essai sur un serveur de tests/preprods
✔ Pas de production du 1er coup
✔ Prévoir des versions identiques ✔ OS / Serveur / Logiciels...
✔ Contrôler la validation des sources ✔ tar.gz + clef
nAcademy – 30 Janvier 2013
Automatiser les tâches : Déroulement
Développements
Serveur Intégration
Tests & validation
Production + tag
Déploiement
Déploiement serveur prod.Tests
ServeurPréprodServeurPréprod
ServeurTest clientServeur
Test client
Les noeuds
nAcademy – 30 Janvier 2013
Automatiser les tâches
✔ Shell-scripts
✔ Pear
✔ Ant
✔ Phing
✔ Weploy
Outils
nAcademy – 30 Janvier 2013
Automatiser les tâches : cas pratique avec Phing
nAcademy – 30 Janvier 2013
Principe de fonctionnement
✔ Checkout du projet
✔ Lancement des tests (ex : tests unitaires)
✔ Création d'une archive
✔ Transfert et déploiement en ssh / ftp
✔ Possible Rollback
Valider l'étape
nAcademy – 30 Janvier 2013
Au niveau du code
# pear channel-discover pear.phing.info
# pear install phing/phingdocs
<?xml version="1.0" ?>
<project name="demo" basedir="." default="example">
<target name="example">
<echo message="yep, I will create a directory" />
<mkdir dir="/mon/chemin/" />
</target>
</project>
Exécution :
# phing
✔ Si c'est nécessaire → création du dossier
nAcademy – 30 Janvier 2013
Presque intégration continue
NAcademy – 30 Janvier 2013
Questions ?