Tests d'acceptation avec FitNesse



Documents pareils
Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

OpenPaaS Le réseau social d'entreprise

TP1. Outils Java Eléments de correction

Java DataBaseConnectivity

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Création d un service web avec NetBeans 5.5 et SJAS 9

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

La base de données XML exist. A. Belaïd

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Climat Scolaire - Manuel utilisateur - Chapitre 2 : «Créer, Editer et suivi d un texte»

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Gestion Electronique de Document (ECM/GED)

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Introduction à JDBC. Accès aux bases de données en Java

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

Configurer la supervision pour une base MS SQL Server Viadéis Services

Installer et configurer Oracle Forms 11gR2 Windows 7 64 bits

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Déployer les Fonts, Icones, et Images avec Forms Services 11G

S y m M a i l i n g. S o l u t i o n d e - m a i l i n g. SymMailing est un outil professionnel de création et de gestion de campagnes d ing.

Programmation en Java IUT GEII (MC-II1) 1

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Tutoriel d installation de Hibernate avec Eclipse

Publier dans la Base Documentaire

4. Groupement d objets

Guide Enseignant de l application OpenERP

Connexion au panneau de contrôle du Cloud Service Portal (CSP)

RMI le langage Java XII-1 JMF

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Installation de la plate-forme Liberacces 2.0 «Intégrale» avec LiberInstall

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

3 : créer de nouveaux onglets dans Netvibes Cliquer sur le bouton «+» et renommer le nouvel onglet (par exemple Encyclopédies en ligne)

LES ACCES ODBC AVEC LE SYSTEME SAS

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmer en JAVA. par Tama

Bases Java - Eclipse / Netbeans

RÉALISATION DE GRAPHIQUES AVEC OPENOFFICE.ORG 2.3

Initiation à JAVA et à la programmation objet.

< Atelier 1 /> Démarrer une application web

Présentation du langage et premières fonctions

Arbres binaires de recherche

Plate-forme de tests des fichiers XML virements SEPA et prélèvements SEPA. Guide d'utilisation

Java Licence Professionnelle CISII,

TP1 : Initiation à Java et Eclipse

Gestion de stock pour un magasin

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

PLAN. Qui peut faire quoi? Présentation. L'internaute Consulte le site public

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Java et les bases de données

Tenrox. Guide d intégration Tenrox-Salesforce. Janvier Tenrox. Tous droits réservés.

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Publier un Carnet Blanc

UTILISATION DE L'APPLICATION «PARTAGE DE FICHIERS EN LIGNE»

Maarch Framework 3 - Maarch. Tests de charge. Professional Services. 11, bd du Sud Est Nanterre

SQL Parser XML Xquery : Approche de détection des injections SQL

Cours 1: Java et les objets

OUTIL DE TRAVAIL COLLABORATIF

PHP 5. La base de données MySql. A. Belaïd 1

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

CMS Modules Dynamiques - Manuel Utilisateur

L installation a quelque peu changée depuis les derniers tutos, voici une actualisation.

Installation et configuration de Vulture Lundi 2 février 2009

Maîtriser le menu contextuel dans un OfficeBean

Gestion d utilisateurs et stratégie systèmes.

Formation > Développement > Internet > Réseaux > Matériel > Maintenance

8 rue Paul Cézanne Neuilly-Plaisance - Tél : 33 (0) Fax : 33 (0) cvm@cvm.

TP Programmation Java / JDBC / Oracle

INTRODUCTION À PYRAMID Gaël Bearstech. Crédits: Blaise Laflamme

Installation / configuration des applications PreInscription et Inscription Web Ajax

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

UwAmp. Serveur d'evaluation

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Votre site Internet avec FrontPage Express en 1 heure chrono

Cours Bases de données 2ème année IUT

SEO On-page. Avez-vous mis toutes les chances de votre côté pour le référencement de votre site?

Programmation par les Objets en Java

Manuel d'utilisation du site Deptinfo (Mise en route)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

OCL - Object Constraint Language

Remote Method Invocation (RMI)

Pratique et administration des systèmes

HTML. Notions générales

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Mysql avec EasyPhp. 1 er mars 2006

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Utilisation de l éditeur.

Présentation Windows Azure Hadoop Big Data - BI

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Les tablettes et l'extranet Intermixt Mode d'emploi

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Transcription:

Tests d'acceptation avec FitNesse Bruno Mermet 2010 ébauche

Plan Présentation générale de FitNesse Langage de marquage : référence Types de table Slim : référence

Présentation générale de FitNesse

Tests d'acceptation / tests unitaires Tests unitaires Orientés «petite unité de code» Compréhension réservée aux développeurs Tests d'acceptation (Tests de recette) Orientés «fonctionnalité» Compréhension accessible au client

FitNesse en bref Présentation générale Un outil type wiki permettant de spécifier des tests d'acceptation au milieu de texte informel Serveur autonome, donc facile à installer Fonctionnement général Document FitNesse Fixtures (code java) Application (java)

Installation de FitNesse Récupérer l'archive (fitnesse.jar) et mettre le jar là où l'on veut installer le logiciel http://fitnesse.org/frontpage.fitnessedevelopment.download Exécuter une première fois l'archive java -jar fitnesse.jar Exécuter une deuxième fois l'archive Soit : java -jar fitnesse.jar (port 80) Soit : java -jar fitnesse.jar -pxxxx (port XXXX) Lancer son navigateur et se connecter sur la bonne machine et le bon port (http://localhost ou http://localhost:xxxx)

Exemple de page FitNesse : code Titre niveau 1!1 PremierExemple : un jeu de tests avec FitNesse!define TEST_SYSTEM {slim!contents -R2 -g -p -f -h Table des matières Utilisation des tests slim et non fit!path C:\Users\bruno\Documents\NetBeansProjects\ArbresPPO\build\test\classes!path C:\Users\bruno\Documents\NetBeansProjects\ArbresPPO\build\classes!2 Importation import correction5 Titre niveau 2 Table de type «import» pour définir les paquetages importés!2 Un premier jeu de tests creation arbre valeur parent position taille? nbfeuilles? hauteur? 10 0 gauche 1 1 0 20 1 gauche 2 1 1 30 1 droite 3 2 1 40 2 gauche 4 2 2 50 4 droite 5 2 3 On va bien voir ce que donne ce tableau... Définition du CLASSPATH avec - les «fixtures» - l'application Table standard («decision») Titre (creation arbre) = nom de la classe de «Fixture» (CreationArbre) Colonnes sans «?» : doivent correspondrent à des méthodes de la classe de Fixture : setvaleur(int), setparent(int), setposition(string) Colonne avec «?» : doivent correspondrent à des méthodes de la classe de fixture : int taille(), int nbfeuilles(), int hauteur().

! Ne pas oublier de marquer dans les propriétés la page comme une page de test (fait automatiquement si le nom de la page commence ou fini par Test ou Example)

Aperçu de la page précédente Lien car CamelCase

Classe de Fixture package correction5; import correction5.arbre5.position; public class CreationArbre { private Arbre5<Integer> arbre; private int pere; private int valeur; private Position position; public CreationArbre() { public void setvaleur(int v) {valeur = v; public void setparent(int p) {pere = p; public void setposition(string s) { if ("gauche".equals(s)) { position = Position.gauche; else { position = Position.droit; public void execute() { if (pere == 0) { arbre = new Arbre5<Integer>(valeur); else { try { arbre.ajout(pere, valeur, position); catch (NoeudInexistantException5 nie5) { public int taille() { return arbre.taille(); public int nbfeuilles() { return arbre.nbfeuilles(); public int hauteur() { return arbre.hauteur(); Méthode facultative appelée entre les «sets» et la collecte des résultats

Résultat de l'exécution du test (après clic sur «Test»)

Quelques possibilités supplémentaires Code à rajouter à la fin du précédent!2 Un deuxième jeu de tests creation arbre2 valeur parent position taille? nbfeuilles? hauteur? id? 10 0 gauche 1 1 0 $V10= 20 $V10 gauche 2 >=1 1 $V20= 30 $V10 droite 3 2 1 $V30= 40 $V20 gauche 4 2 3 $V40= 50 $V40 droite 5 2 3

Nouvelle «fixture» package correction5; import correction5.arbre5.position; public class CreationArbre2 { private Arbre5<Integer> arbre; private int pere; private int valeur; private Position position; public CreationArbre2() { public void setvaleur(int v) {valeur = v; public void setparent(int p) {pere = p; public void setposition(string s) { if ("gauche".equals(s)) { position = Position.gauche; else { position = Position.droit; public void execute() { if (pere == 0) { arbre = new Arbre5<Integer>(valeur); else { try { arbre.ajout(pere, valeur, position); catch (NoeudInexistantException5 nie5) { public int taille() {return arbre.taille(); public int nbfeuilles() {return arbre.nbfeuilles(); public int hauteur() {return arbre.hauteur(); public int id() { try { return arbre.getiddonnee(valeur); catch (NoeudInexistantException5 nie5) { return 0;

FitNesse : Créer son premier test Mettre un nom (le nom de la page à créer) en CamelCase sur la page d'accueil en l'éditant, puis sauver Cliquer sur le «?» à côté du nom en question Taper le contenu de sa page et sauver

Langage de marquage : référence

Mise en forme (1) ''texte'' (deux ') : italique '''texte''' (trois ') : gras --texte-- : barré!texte : centrage du texte!1,!2,!3 : titre de niveau 1, 2 ou 3!note texte : note ----, ------, -------- : ligne horizontale (au moins 4 tirets, épaisseur proportionnelle au nombre de tirets)!img URL,!img-l URL (texte),!img-r URL (texte) : image : insertion d'une image (ou toute url finissant en.gif ou.jpg)!-texte-! : évite l'interprétation wiki du texte!<texte>! : évite l'interprétation html du texte {{{texte : texte pré-formatté

Mise en forme (2) Liste à puce : * texte, <esp>* texte, <esp><esp>*texte, etc. Liste numérotée : <num> texte, <esp>num texte, etc. Section condensable ouverte (au moins un '*')!* titre Texte *! Section condensable fermée (au moins un '*')!*> titre Texte *! Tables de texte (délimiteur=ponctuation quelconque)![![: Ligne 1 champ11:champ12 Ligne 2 champ21:champ22!]!]

Hyper-liens et date Liens internes Marquage :!anchor nomdulien Référence :.#nomdulien Lien externe : http://site/page Lien vers une autre page de FitNesse : CamelCase Alias de lien : [[alias][lien]] où Lien est l'un des types de lien possibles Alias peut être du texte ou une image Date :!today,!today -t,!today 1,!today (MMM), etc.

Types de table Slim : référence

Table «Décision» Syntaxe de base titre de la table p1 p2 col1 col2 col3 col4? col5? val1 val2 val3 val4 val5 v1 v2 v3 v4 v5 Interprétation Va utiliser une «fixture» TitreDeLaTable Un constructeur prenant 2 paramètres va être appelé avec p1 et p2 Si la méthode table(<list<list<string>>) est présente dans la fixture, elle est appelée avec une liste de listes contenant les valeurs dans la table Pour chaque ligne de la table Si la méthode reset() est présente, elle est appelée Les méthodes setcol1(), setcol2() et set Col3() sont appelées avec les valeurs de la table Si la méthode execute() est présente, elle est appelée Les méthodes col4() et col5() sont appelées

Contenu des cases Valeur simple : test sur l'égalité!= : différence < x, <= x, > x, >= x: inférieur à, supérieur à x <_< y : interval ~= x : valeur approchée (tolérance dépend de la précision de x) =~/regexp/ : Expression rationnelle

Table «requête» Syntaxe de base Query:titre de la table p1 col1 col2 col3 col4 col5 val1 val2 val3 val4 val5 v1 v2 v3 v4 v5 Interprétation Va utiliser une «fixture» TitreDeLaTable Un constructeur prenant 1 paramètre va être appelé avec p1 Si la méthode table(<list<list<string>>) est présente dans la fixture, elle est appelée avec une liste de listes contenant les valeurs dans la table La méthode List<Object> query() est appelée. Cette méthode retourne une liste de listes de listes : table de lignes de champs où un champ est une liste dont le premier élément est le nom du champ et le deuxième sa valeur Le champ le plus à gauche sert d'identifiant de la ligne On compare les lignes de la table avec ce qui est produit ; l'ordre des lignes n'est pas significatif Utilisation : pour vérification ou remplissage

Table «sous-requête» Syntaxe de base Subset Query:titre de la table p1 col1 col2 col3 col4 col5 val1 val2 val3 val4 val5 v1 v2 v3 v4 v5 Interprétation Idem Query mais on demande juste que les lignes soient présentent dans le résultat

Table «requête ordonnée» Syntaxe de base Ordered Query:titre de la table p1 col1 col2 col3 col4? col5? val1 val2 val3 val4 val5 v1 v2 v3 v4 v5 Interprétation Idem Query mais on demande en plus que les lignes soient dans le même ordre

Table «script» Exemple introductif script login dialog driver Bob xyzzy Login with username Bob and password xyzzy check login message Bob logged in reject login with username Bob and password bad password ensure login with username and password; Bob xyzzy note Un commentaire show number of login attempts $message= login message start login dialog driver Kent x123y Appel d'une fonction Syntaxe Lieu Debut nom param1 suitenom param2 suitnom2 param3... Nom; param1 param2 param3 Dans la première colonne Après reject, ensure, show, $variable=

Table «script» : syntaxe détaillée (1) script nom de la classe p1 p2 script pour indiquer le type de table p1, p2 : paramètres passés au constructeur Appel d'une fonction Si fournit un résultat booléen, affichage vert/rouge après exécution Sinon, laissé tel quel Check appel d'une fonction dernière case Check not appel d'une fonction dernière case Vérifie que le résultat fourni par l'appel de la fonction est identique/différent au contenu de la dernière case ; affichage vert/rouge

Table «script» : syntaxe détaillée (2) ensure appel d'une fonction reject appel d'une fonction La fonction doit fournir un résultat booléen, affichage vert/rouge après exécution show appel d'une fonction Affichage de la valeur de retour de la fonction $v= appel d'une fonction Affectation du retour de la fonction à la variable $v start nom de la classe p1 p2 p3 Création d'une nouvelle instance de la classe en appelant le bon constructeur et en lui passant les paramètres p1,p2 et p3. C'est cette instance qui sera utilisée pour la suite des tests.

Table «scenario» Principe Table type «script» paramétrée Appelable depuis une table «décision», une table «script» ou une autre table «scenario» Exemple (tiré de la doc. en ligne) scenario widget wikitext renders htmltext Create page WidgetPage with content @wikitext check request page WidgetPage 200 ensure contentmatches @htmltext show content Interprétation Définition d'un scenario WidgetRender(wikiText, htmltext) Les paramètres sont référencés via le caractère @ ; leur nom est en camel-case commençant par une minuscule

Table «scenario» : Exemple d'utilisation depuis une table Décision Préliminaires Le scénario doit être défini dans la page de la table «décision» Un scénario a priorité sur une «fixture» de même nom Exemple widget renders wiki text This is ''italic'' text This is '''bold''' text html text This is <i>italic</i> text This is <b>bold</b> text italic widget bold widget

Utiliser FitNesse en résumé Les tests précèdent le code Ils formalisent les attentes du client, évitant aux développeurs de partir dans de fausses directions Mélanger texte informel et tables de tests Les tables ont pour but de formaliser le texte informel Faire collaborer client et fournisseur Le client doit être à l'origine des pages et jeux de test Le client doit pouvoir rajouter de nouveaux cas/jeux de tests à volonté Le fournisseur doit pouvoir lancer les tests aussi souvent que possible (idem pour le client)