SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
2013

Effectuer des tests modernes
pour Drupal
@hellosct1
Qui ?

Christophe
Villeneuve

@hellosct1
Les tests
Citations
✔

✔

« Des fois cela plante »

« On a testé, …
il y a 3 mois lors de la dernière livraison...
Pas eu le temps... »
L'importance des tests
Pourquoi c'est utile ?
✔

✔

✔

Le code peut casser
Changer le nom d'un
fichier

Et L'intérêt...
✔

✔

En fait gagner
ensuite

Pas le temps d'en faire
✔

✔

Coûte du temps au
début

C'est long
manuellement

Nécessite de la
rigueur et de la
constante
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
Tests
Tests
Tests

Automatisés
de charges
d'ergonomie
de sécurité
Tests unitaires... En pratique
Tests unitaires
Déroulement
✔

✔

✔
✔

Ecrire un test qui
échoue
Ecrire un test qui
est bon
Un test de sécurité
Un test de
contrôle

Quoi tester ?
✔
✔
✔

✔

Un module
Une classe
Une méthode
Tester
✔
✔
✔

Ce qui est important
Le risque de casser
Les parties que vous
touchez souvent
Tests unitaires : Les API
D8
✔
✔
✔
✔
✔
✔

jUnit
SimpleTest
Zend_test
PHPUnit
Atoum
...
Cas pratique avec PHPUnit
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
Tests unitaires : 1
Du code...
<?php
class calculs
{

+ieurs commentaires

<?php
class calculs
{
/**
* @assert (0, 0) == 0

public function add($a, $b)

* @assert (0, 1) == 1

{

* @assert (1, 0) == 1

return $a + $b;

* @assert (1, 1) == 2
* @assert (1, 2) == 4

}

*/

}

public function add($a, $b)

?>

{
return $a + $b;
}
}
?>
Tests unitaires : 1
1 commentaire
<?php

Passer au test
<?php

class calculs

/**

{

* Generated from @assert (1, 1) == 2
*/

/**
* @assert (0, 0) == 0
*/

public function testAdd()
{
$this->assertEquals(

public function add($a, $b)

2,

{

$this->object->add(1, 1)

return $a + $b;
}
}
?>

);
}
?>
Fonctionnement PHPUnit avec Drupal
✔

Boostrap
✔
✔

✔

Script d'amorcage
Construction autonome

Etendre le Boostrap
✔
✔
✔
✔
✔

Emplacement du fichier
Déclarer les SLASHs
Recherche de racine Drupal
Chargeons boostrap.inc
Execution
PHPUnit avec Drupal
<?php
define('DRUPAL_ROOT', realpath(dirname(__FILE__) ) . PATH );
set_include_path(DRUPAL_ROOT . get_include_path());
include_once DRUPAL_ROOT . 'includes' . DS . 'bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
class base_test extends PHPUnit_Framework_TestCase
{
public function test_one_plus_one_is_two()
{
$this->assertEquals(1+1,2);
}
}
?>
Résultat

. Le test est réussi
F l'assertion a échoué
E Erreur Exécution
S Problème inconnu
I Test incomplet
Module & PHPUnit & Drupal
Module & PHPUnit & Drupal (1/2)
drupagora.module
<?php
/**
* Implementation hook_help()
*/
function drupagora_help($path, $arg) {
switch ($path) {
case 'admin/help#drupagora':
$output = '<h3>A propos du module : Drupagora</h3>';
$output .= '<p>Exemple de module pour le livre : Drupal Avancé
aux éditions Eyrolles</p>';
return $output;
}
}
✔
Module & PHPUnit & Drupal (2/2)
drupagora.test.php
<?php
include_once DRUPAL_ROOT . 'includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
class drupagora_test extends PHPUnit_Framework_TestCase
{
public function test_function_help()
{
$output = '<h3>A propos du module : Drupagora</h3>';
$output .= '<p>Exemple de module pour le livre : Drupal Avancé aux
éditions Eyrolles</p>';
$this->assertEquals(
$output
);
}
...

menu_for_all_help('admin/help#drupagora'),
Résultat
Tests Fonctionnels... En pratique
Tests Fonctionnels
Déroulement
✔
✔
✔

Prépare outil & API
On le partage
On récupère le
résultat

Quoi tester ?
✔
✔

Nous... Rien
C'est le client
Tests Fonctionnels : utilisation
Outils
✔
✔
✔
✔
✔

Selenium
Behat
Fitness
Cucumber
GreenPepper
Cas pratique avec Selenium
Tests Fonctionnels : utilisation
Utilisation de Selenium
Selenium *.jar
Selenium IDE... Extension Firefox
Selenium HQ... Compatible avec les browsers
Utilisation de Selenium
Selenium et Drupal
✔

Module selenium
✔
S'appuie sur SimpleTest
Tests Intégrations... En pratique
Tests Intégrations
Déroulement
✔

✔

✔

1 Navigation de la
prod.
Générer le script
pour repérer les
modifications de
comportement
1 exécution sur le
nouveau serveur

Pourquoi ?
✔

✔

Simulation d'un
être humain
Détection des
problèmes
éventuels
Tests Intégrations : utilisation
Outils
✔
✔
✔
✔
✔
✔

Selenium
Sikuli
Hudson
Jenkins
PhpUnderControl
...
Cas pratique avec PHPUnit & Selenium
Installation 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
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());
}
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('hello');
$password->value('1234');
$this->assertTrue($submit->enabled());
$username->clear();
$password->clear();
$username->value(' ');
$this->assertFalse($submit->enabled());
}
?>
PHPUnit / Selenium / Drupal
<?php
class drupagora_test extends
PHPUnit_Extensions_Selenium2TestCase {
public function setUp()
{
$this->setHost('localhost');
$this->setPort(4444);
$this->setBrowser('firefox');
$this->setBrowserUrl('http://localhost/drupal7');
}
public function testSite() {
$this->setBrowserurl ('index.php');
}
PHPUnit / Selenium / Drupal
public function testOuverturePageTypeMenu() {
$this->open (
"http://localhost/drupal7/admin/menus/diner" );
$this->assertElementValueEquals ( 'name', '' );
}
Au final... les tests associés
$ cd votreSite
$ phpunit sites/all/modules/menus/menus.test.php
Ils ont été
Ils ont été
abordés
abordés
toute la
toute la
journée
journée

Les autres Tests ….
Merci
@neuros_paris
http://www.neuros.fr

@hellosct1
http://www.webriver.eu
http://blog.hello-design.fr

Contenu connexe

En vedette

Manifeste pour une communication [plus] enthousiaste
Manifeste pour une communication [plus] enthousiasteManifeste pour une communication [plus] enthousiaste
Manifeste pour une communication [plus] enthousiastePascal Beria
 
E-commerce et Entrepreneuriat
E-commerce et Entrepreneuriat E-commerce et Entrepreneuriat
E-commerce et Entrepreneuriat PrestaShop
 
Monaco.tania.3ºd
Monaco.tania.3ºdMonaco.tania.3ºd
Monaco.tania.3ºdNuit72
 
Pour une ingénierie des connaissances dynamiques. Prendre en compte la dynam...
Pour une ingénierie  des connaissances dynamiques. Prendre en compte la dynam...Pour une ingénierie  des connaissances dynamiques. Prendre en compte la dynam...
Pour une ingénierie des connaissances dynamiques. Prendre en compte la dynam...Yannick Prié
 
Présentation Immorox Wiki
Présentation Immorox WikiPrésentation Immorox Wiki
Présentation Immorox WikiImmorox
 
Futurapolis 2013, le programme
Futurapolis 2013, le programmeFuturapolis 2013, le programme
Futurapolis 2013, le programmeLe Point
 
Aportes para la igualdad de género y equidad de género
Aportes para la igualdad de género y equidad de géneroAportes para la igualdad de género y equidad de género
Aportes para la igualdad de género y equidad de géneroGobernabilidad
 
Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...
Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...
Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...Emilie Robert
 
Pampat expert en qualité securite alimentaire et vulgarisation rurale
Pampat expert en qualité securite alimentaire et vulgarisation ruralePampat expert en qualité securite alimentaire et vulgarisation rurale
Pampat expert en qualité securite alimentaire et vulgarisation ruralemarouen chikhaoui
 
Proyecto de investigación sobre Violencia
Proyecto de investigación sobre ViolenciaProyecto de investigación sobre Violencia
Proyecto de investigación sobre ViolenciaDaniela Paiva
 
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Haute Autorité de Santé
 
Contribuerquandonnestpastechnique
ContribuerquandonnestpastechniqueContribuerquandonnestpastechnique
Contribuerquandonnestpastechniqueclarista
 
Mythes et légendes du social shopping 0312
Mythes et légendes du social shopping 0312Mythes et légendes du social shopping 0312
Mythes et légendes du social shopping 0312agnesheyd
 
Herramientas web para la elaboración de material didáctico
Herramientas web para la elaboración de material didácticoHerramientas web para la elaboración de material didáctico
Herramientas web para la elaboración de material didácticocarsoftware
 

En vedette (20)

Manifeste pour une communication [plus] enthousiaste
Manifeste pour une communication [plus] enthousiasteManifeste pour une communication [plus] enthousiaste
Manifeste pour une communication [plus] enthousiaste
 
E-commerce et Entrepreneuriat
E-commerce et Entrepreneuriat E-commerce et Entrepreneuriat
E-commerce et Entrepreneuriat
 
Examen 1º
Examen 1ºExamen 1º
Examen 1º
 
Monaco.tania.3ºd
Monaco.tania.3ºdMonaco.tania.3ºd
Monaco.tania.3ºd
 
Pour une ingénierie des connaissances dynamiques. Prendre en compte la dynam...
Pour une ingénierie  des connaissances dynamiques. Prendre en compte la dynam...Pour une ingénierie  des connaissances dynamiques. Prendre en compte la dynam...
Pour une ingénierie des connaissances dynamiques. Prendre en compte la dynam...
 
Présentation Immorox Wiki
Présentation Immorox WikiPrésentation Immorox Wiki
Présentation Immorox Wiki
 
Ppt blog
Ppt blogPpt blog
Ppt blog
 
PROGRAMME DE RENFORCEMENT DES CAPACITES DU PERSONNEL EN ACTIVITE
PROGRAMME DE RENFORCEMENT DES CAPACITES DU PERSONNEL EN ACTIVITEPROGRAMME DE RENFORCEMENT DES CAPACITES DU PERSONNEL EN ACTIVITE
PROGRAMME DE RENFORCEMENT DES CAPACITES DU PERSONNEL EN ACTIVITE
 
Futurapolis 2013, le programme
Futurapolis 2013, le programmeFuturapolis 2013, le programme
Futurapolis 2013, le programme
 
Emprende
EmprendeEmprende
Emprende
 
Aportes para la igualdad de género y equidad de género
Aportes para la igualdad de género y equidad de géneroAportes para la igualdad de género y equidad de género
Aportes para la igualdad de género y equidad de género
 
Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...
Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...
Supprimer les paiements directs des soins en Afrique subsaharienne (soutenanc...
 
Pampat expert en qualité securite alimentaire et vulgarisation rurale
Pampat expert en qualité securite alimentaire et vulgarisation ruralePampat expert en qualité securite alimentaire et vulgarisation rurale
Pampat expert en qualité securite alimentaire et vulgarisation rurale
 
Proyecto de investigación sobre Violencia
Proyecto de investigación sobre ViolenciaProyecto de investigación sobre Violencia
Proyecto de investigación sobre Violencia
 
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
 
Contribuerquandonnestpastechnique
ContribuerquandonnestpastechniqueContribuerquandonnestpastechnique
Contribuerquandonnestpastechnique
 
Rol del referente barrial
Rol del referente barrialRol del referente barrial
Rol del referente barrial
 
Mythes et légendes du social shopping 0312
Mythes et légendes du social shopping 0312Mythes et légendes du social shopping 0312
Mythes et légendes du social shopping 0312
 
Empatia(1)
Empatia(1)Empatia(1)
Empatia(1)
 
Herramientas web para la elaboración de material didáctico
Herramientas web para la elaboración de material didácticoHerramientas web para la elaboración de material didáctico
Herramientas web para la elaboración de material didáctico
 

Similaire à Effectuer des tests modernes pour drupal

Déployer avec les tests
Déployer avec les testsDéployer avec les tests
Déployer avec les testsneuros
 
Automatisation des tests - objectifs et concepts - partie 1
Automatisation des tests  - objectifs et concepts - partie 1Automatisation des tests  - objectifs et concepts - partie 1
Automatisation des tests - objectifs et concepts - partie 1Christophe Rochefolle
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratiqueFrederic Hardy
 
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...EspritAgile
 
Guide tests fonctionnels
Guide tests fonctionnelsGuide tests fonctionnels
Guide tests fonctionnelscvcby
 
Présentation projet de fin d'étude
Présentation projet de fin d'étudePrésentation projet de fin d'étude
Présentation projet de fin d'étudeDonia Hammami
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...fdussert
 
On test quoi - DCLannion 2017
On test quoi - DCLannion 2017On test quoi - DCLannion 2017
On test quoi - DCLannion 2017Artusamak
 
Field research and interaction design: course #6
Field research and interaction design: course #6Field research and interaction design: course #6
Field research and interaction design: course #6nicolas nova
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx FranceMarc Bojoly
 
Toolbox du designer : Useberry
Toolbox du designer : UseberryToolbox du designer : Useberry
Toolbox du designer : UseberryLudivine Dobigny
 
13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciel13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciellauraty3204
 
Les tests utilisateurs pour les petits budgets
Les tests utilisateurs pour les petits budgetsLes tests utilisateurs pour les petits budgets
Les tests utilisateurs pour les petits budgetsL_Demontiers
 
Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?Maxime Bernard
 
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileLes cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileDenis Voituron
 
Formation tests decembre2010
Formation tests decembre2010Formation tests decembre2010
Formation tests decembre2010Fou Cha
 

Similaire à Effectuer des tests modernes pour drupal (20)

Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Déployer avec les tests
Déployer avec les testsDéployer avec les tests
Déployer avec les tests
 
Automatisation des tests - objectifs et concepts - partie 1
Automatisation des tests  - objectifs et concepts - partie 1Automatisation des tests  - objectifs et concepts - partie 1
Automatisation des tests - objectifs et concepts - partie 1
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
 
Guide tests fonctionnels
Guide tests fonctionnelsGuide tests fonctionnels
Guide tests fonctionnels
 
Test unitaires
Test unitairesTest unitaires
Test unitaires
 
Présentation projet de fin d'étude
Présentation projet de fin d'étudePrésentation projet de fin d'étude
Présentation projet de fin d'étude
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
On test quoi - DCLannion 2017
On test quoi - DCLannion 2017On test quoi - DCLannion 2017
On test quoi - DCLannion 2017
 
Field research and interaction design: course #6
Field research and interaction design: course #6Field research and interaction design: course #6
Field research and interaction design: course #6
 
Perf university
Perf universityPerf university
Perf university
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
Toolbox du designer : Useberry
Toolbox du designer : UseberryToolbox du designer : Useberry
Toolbox du designer : Useberry
 
13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciel13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciel
 
Les tests utilisateurs pour les petits budgets
Les tests utilisateurs pour les petits budgetsLes tests utilisateurs pour les petits budgets
Les tests utilisateurs pour les petits budgets
 
Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?
 
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileLes cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
 
Formation tests decembre2010
Formation tests decembre2010Formation tests decembre2010
Formation tests decembre2010
 

Plus de Christophe Villeneuve

La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxChristophe Villeneuve
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webChristophe Villeneuve
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteChristophe Villeneuve
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Christophe Villeneuve
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le designChristophe Villeneuve
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activitesChristophe Villeneuve
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftChristophe Villeneuve
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthnChristophe Villeneuve
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueChristophe Villeneuve
 

Plus de Christophe Villeneuve (20)

MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans Firefox
 
pister les pisteurs
pister les pisteurspister les pisteurs
pister les pisteurs
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le web
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Mariadb une base de données NewSQL
Mariadb une base de données NewSQLMariadb une base de données NewSQL
Mariadb une base de données NewSQL
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnante
 
Pentest bus pirate
Pentest bus piratePentest bus pirate
Pentest bus pirate
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le design
 
Foxfooding semaine 3
Foxfooding semaine 3Foxfooding semaine 3
Foxfooding semaine 3
 
Foxfooding
FoxfoodingFoxfooding
Foxfooding
 
Accessibilite web wcag rgaa
Accessibilite web wcag rgaaAccessibilite web wcag rgaa
Accessibilite web wcag rgaa
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activites
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et Microsoft
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthn
 
Send large files with addons
Send large files with addonsSend large files with addons
Send large files with addons
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratique
 
Donnez la voix aux machines
Donnez la voix aux machinesDonnez la voix aux machines
Donnez la voix aux machines
 

Effectuer des tests modernes pour drupal

  • 1. 2013 Effectuer des tests modernes pour Drupal @hellosct1
  • 3. Les tests Citations ✔ ✔ « Des fois cela plante » « On a testé, … il y a 3 mois lors de la dernière livraison... Pas eu le temps... »
  • 4. L'importance des tests Pourquoi c'est utile ? ✔ ✔ ✔ Le code peut casser Changer le nom d'un fichier Et L'intérêt... ✔ ✔ En fait gagner ensuite Pas le temps d'en faire ✔ ✔ Coûte du temps au début C'est long manuellement Nécessite de la rigueur et de la constante
  • 5. 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 Tests Tests Tests Automatisés de charges d'ergonomie de sécurité
  • 7. Tests unitaires Déroulement ✔ ✔ ✔ ✔ Ecrire un test qui échoue Ecrire un test qui est bon Un test de sécurité Un test de contrôle Quoi tester ? ✔ ✔ ✔ ✔ Un module Une classe Une méthode Tester ✔ ✔ ✔ Ce qui est important Le risque de casser Les parties que vous touchez souvent
  • 8. Tests unitaires : Les API D8 ✔ ✔ ✔ ✔ ✔ ✔ jUnit SimpleTest Zend_test PHPUnit Atoum ...
  • 10. 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
  • 11. Tests unitaires : 1 Du code... <?php class calculs { +ieurs commentaires <?php class calculs { /** * @assert (0, 0) == 0 public function add($a, $b) * @assert (0, 1) == 1 { * @assert (1, 0) == 1 return $a + $b; * @assert (1, 1) == 2 * @assert (1, 2) == 4 } */ } public function add($a, $b) ?> { return $a + $b; } } ?>
  • 12. Tests unitaires : 1 1 commentaire <?php Passer au test <?php class calculs /** { * Generated from @assert (1, 1) == 2 */ /** * @assert (0, 0) == 0 */ public function testAdd() { $this->assertEquals( public function add($a, $b) 2, { $this->object->add(1, 1) return $a + $b; } } ?> ); } ?>
  • 13. Fonctionnement PHPUnit avec Drupal ✔ Boostrap ✔ ✔ ✔ Script d'amorcage Construction autonome Etendre le Boostrap ✔ ✔ ✔ ✔ ✔ Emplacement du fichier Déclarer les SLASHs Recherche de racine Drupal Chargeons boostrap.inc Execution
  • 14. PHPUnit avec Drupal <?php define('DRUPAL_ROOT', realpath(dirname(__FILE__) ) . PATH ); set_include_path(DRUPAL_ROOT . get_include_path()); include_once DRUPAL_ROOT . 'includes' . DS . 'bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); class base_test extends PHPUnit_Framework_TestCase { public function test_one_plus_one_is_two() { $this->assertEquals(1+1,2); } } ?>
  • 15. Résultat . Le test est réussi F l'assertion a échoué E Erreur Exécution S Problème inconnu I Test incomplet
  • 16. Module & PHPUnit & Drupal
  • 17. Module & PHPUnit & Drupal (1/2) drupagora.module <?php /** * Implementation hook_help() */ function drupagora_help($path, $arg) { switch ($path) { case 'admin/help#drupagora': $output = '<h3>A propos du module : Drupagora</h3>'; $output .= '<p>Exemple de module pour le livre : Drupal Avancé aux éditions Eyrolles</p>'; return $output; } } ✔
  • 18. Module & PHPUnit & Drupal (2/2) drupagora.test.php <?php include_once DRUPAL_ROOT . 'includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); class drupagora_test extends PHPUnit_Framework_TestCase { public function test_function_help() { $output = '<h3>A propos du module : Drupagora</h3>'; $output .= '<p>Exemple de module pour le livre : Drupal Avancé aux éditions Eyrolles</p>'; $this->assertEquals( $output ); } ... menu_for_all_help('admin/help#drupagora'),
  • 21. Tests Fonctionnels Déroulement ✔ ✔ ✔ Prépare outil & API On le partage On récupère le résultat Quoi tester ? ✔ ✔ Nous... Rien C'est le client
  • 22. Tests Fonctionnels : utilisation Outils ✔ ✔ ✔ ✔ ✔ Selenium Behat Fitness Cucumber GreenPepper
  • 23. Cas pratique avec Selenium
  • 24. Tests Fonctionnels : utilisation
  • 25. Utilisation de Selenium Selenium *.jar Selenium IDE... Extension Firefox Selenium HQ... Compatible avec les browsers
  • 27. Selenium et Drupal ✔ Module selenium ✔ S'appuie sur SimpleTest
  • 29. Tests Intégrations Déroulement ✔ ✔ ✔ 1 Navigation de la prod. Générer le script pour repérer les modifications de comportement 1 exécution sur le nouveau serveur Pourquoi ? ✔ ✔ Simulation d'un être humain Détection des problèmes éventuels
  • 30. Tests Intégrations : utilisation Outils ✔ ✔ ✔ ✔ ✔ ✔ Selenium Sikuli Hudson Jenkins PhpUnderControl ...
  • 31. Cas pratique avec PHPUnit & Selenium
  • 32. Installation 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
  • 33. 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()); }
  • 34. 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('hello'); $password->value('1234'); $this->assertTrue($submit->enabled()); $username->clear(); $password->clear(); $username->value(' '); $this->assertFalse($submit->enabled()); } ?>
  • 35. PHPUnit / Selenium / Drupal <?php class drupagora_test extends PHPUnit_Extensions_Selenium2TestCase { public function setUp() { $this->setHost('localhost'); $this->setPort(4444); $this->setBrowser('firefox'); $this->setBrowserUrl('http://localhost/drupal7'); } public function testSite() { $this->setBrowserurl ('index.php'); }
  • 36. PHPUnit / Selenium / Drupal public function testOuverturePageTypeMenu() { $this->open ( "http://localhost/drupal7/admin/menus/diner" ); $this->assertElementValueEquals ( 'name', '' ); }
  • 37. Au final... les tests associés $ cd votreSite $ phpunit sites/all/modules/menus/menus.test.php
  • 38. Ils ont été Ils ont été abordés abordés toute la toute la journée journée Les autres Tests ….