Déployer avec les tests

Preview:

DESCRIPTION

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

Citation preview

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@xxx.com',

'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 ?

Recommended