43
DEPLOYER AVEC LES TESTS Christophe Villeneuve 30 Janvier 2013

Déployer avec les tests

  • Upload
    neuros

  • View
    2.432

  • Download
    1

Embed Size (px)

DESCRIPTION

Présentation à la nAcademy (Janvier 2013) : Déployer avec les tests par Christophe Villeneuve

Citation preview

Page 1: Déployer avec les tests

DEPLOYER AVEC LES TESTS

Christophe Villeneuve

30 Janvier 2013

Page 2: Déployer avec les tests

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... »

Page 3: Déployer avec les tests

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

Page 4: Déployer avec les tests

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é

Page 5: Déployer avec les tests

nAcademy – 30 Janvier 2013

Page 6: Déployer avec les tests

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

Page 7: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests unitaires : utilisation

✔ jUnit

✔ SimpleTest

✔ Zend_test

✔ PHPUnit

✔ Atoum

✔ ...

Outils

Page 8: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests unitaires : cas pratique PHPUnit

Page 9: Déployer avec les tests

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

Page 10: Déployer avec les tests

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

Page 11: Déployer avec les tests

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

Page 12: Déployer avec les tests

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);

}

?>

Page 13: Déployer avec les tests

nAcademy – 30 Janvier 2013

Page 14: Déployer avec les tests

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

Page 15: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests fonctionnels : utilisation

✔ Sélénium

✔ Behat

✔ Fitness

✔ Cucumber

✔ GreenPepper

Outils

Page 16: Déployer avec les tests

nAcademy – 30 Janvier 2013

Test fonctionnels : cas pratique avec GreenPepper

Page 17: Déployer avec les tests

nAcademy – 30 Janvier 2013

Installation

Logiciel (*.jar)

Avec IDE : Eclipse PDT / Netbeans

Page 18: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests fonctionnels : cas pratique avec GreenPepper

1

2

3

Page 19: Déployer avec les tests

nAcademy – 30 Janvier 2013

Page 20: Déployer avec les tests

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

Page 21: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests d'intégrations : utilisation

✔ Sélénium

✔ Sikuli

✔ Hudson

✔ Jenkins

✔ PhpUnderControl

Outils

Page 22: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests d'intégrations : cas pratique avec Selenium

Page 23: Déployer avec les tests

nAcademy – 30 Janvier 2013

Utilisation Selenium

A partir d'un *.jar

Page 24: Déployer avec les tests

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

Page 25: Déployer avec les tests

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());

}

Page 26: Déployer avec les tests

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());

}

?>

Page 27: Déployer avec les tests

nAcademy – 30 Janvier 2013

Page 28: Déployer avec les tests

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

Page 29: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests de charge : utilisation

✔ Java EE

✔ Tsung

✔ jMeter

Outils

Page 30: Déployer avec les tests

nAcademy – 30 Janvier 2013

Tests de charge : cas pratique avec jMeter

Page 31: Déployer avec les tests

nAcademy – 30 Janvier 2013

Installation

Logiciel (*.jar)

Avec IDE : Eclipse PDT / Netbeans

Page 32: Déployer avec les tests

nAcademy – 30 Janvier 2013

Préparer un scénario fonctionnel

Page 33: Déployer avec les tests

nAcademy – 30 Janvier 2013

Préparer un scénario fonctionnel

Page 34: Déployer avec les tests

nAcademy – 30 Janvier 2013

Afficher le scénario

Page 35: Déployer avec les tests

nAcademy – 30 Janvier 2013

Déployer avec les tests

Page 36: 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

Page 37: Déployer avec les tests

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

Page 38: Déployer avec les tests

nAcademy – 30 Janvier 2013

Automatiser les tâches

✔ Shell-scripts

✔ Pear

✔ Ant

✔ Phing

✔ Weploy

Outils

Page 39: Déployer avec les tests

nAcademy – 30 Janvier 2013

Automatiser les tâches : cas pratique avec Phing

Page 40: Déployer avec les tests

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

Page 41: Déployer avec les tests

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

Page 42: Déployer avec les tests

nAcademy – 30 Janvier 2013

Presque intégration continue

Page 43: Déployer avec les tests

NAcademy – 30 Janvier 2013

Questions ?