samedi 17 mars 2012

Tests de charge :3 fonctionnalités de jmeter à connaitre


Jmeter ou un projet  de la fondation Apache qui permet de réaliser des tests sur des applications WEB mais aussi sur des serveurs de messagerie, des annuaires LDAP ou encore des base de données (SQL).
 Ce programme en Java est très simple à installer : le telecharger et le lancer.

Voici 3 fonctionnalités de jmeter à connaitre:


1) Enregistrer vos scénarios de test avec jmeter.

Il n'est pas necessaire de partir de zéro pour réaliser ses plans de test avec jmeter.
jmeter dispose d'un mode 'enregistreur' qui lui permet de retracer votre navigation et de créer à la volée les éléments constituants le plan de test.
Pour cela il suffit d'ajouter dans son plan de travail un composant 'serveur proxy HTTP' et un contrôleur enregisteur en tant que fils (copie d'écran).


Après avoir lancé le proxy jmeter. Une reconfiguration de son navigateur s'impose pour lui faire utiliser ce proxy : dans le cas présent le proxy écoute sur 'localhost' port '8080'.

Puis, avec votre navigateur accédez à l'application à tester. Chaque requête viendra s'inscrire sous le composant enregisteur sous la forme de deux composants: La requete elle meme (GET et ressource) et un composant stockant les entetes HTTP.

On prendra soin à la fin de la session d'arreter le proxy et de faire glisser les éléments collectés du plan de travail au plan de test.(copie d'écran)



Des ajustements seront alors  nécessaires.


  • Le comportement d'un vrai utilisateur
Un utilisateur prend son temps pour lire une page et passer à la suivante. Les composants temporisateurs de jmeter servent à simuler ces transitions.
  •  La gestion du cache du navigateur. 
Si un testeur vient deux fois sur un site, son navigateur utilisera son cache pour les ressources statiques (images etc..) ainsi sa navigation, sera allégée
  • Les pages contenant de composants AJAX.
 jmeter ne saura pas tout seul reconnaître le bon fonctionnement du page sur le seul code retour. Il faudra ajouter un 'extracteur d'expression régulière' pour intercepter les réponses en JSON.(copie d'écran)




2) Réaliser des tests fonctionnels

Un case à cocher vous permet de basculer en mode 'test fonctionnel' (copie d'écran) . Dans ce cas, tous les échanges seront sauvegardés dans des fichiers. Ce mode sert à mettre au point un plan de test, à tester les expressions régulières ou tout simplement pour faire des tests de non régression. Ce mode ne doit pas etre activé pour des tests de charge car la taille des données collectées devient vite importante.

3) Faire des tests de chargement de fichier.

Jmeter peut d'envoyer des fichiers sur un site à tester.
Pour tester des uploads sur un site, les fichiers à envoyer doivent se trouver dans le système de fichier de l'injecteur.(copie d'écran) . Dans cette exemple, une varible '${C}' est associée à un compteur pour joindre à chaque itération un fichier different. (Important: Le nom des variables est en MAJUSCULE)


Pour terminer:

Un livre très bien sur jmeter. (lien ici)
Apache JMeter: A Practical Beginner's Guide to Automated Testing and Performance Measurement for Your Websites de Emily Halili (Broché - 30 juin 2008)

Un site sur jmeter en francais pour bien démarrer et plus encore: c'est une véritable mine d'information et de tutoriels sur jmeter  http://blog.milamberspace.net/index.php/jmeter-pages

J'utilise tous les jours jmeter pour tester l'efficacité des microserveurs node.js.  Node.js encaisse  800 ulploads simultanés sur un simple PC .



mercredi 14 mars 2012

#kanban et scrum pour les projets informatiques #agile

Vous connaissez le scrum ? La méthode agile, alors  vous allez adorer le 'Kanban' .  Et le meilleur des deux se trouve sur ce site:http://www.aubryconseil.com/post/Le-mini-livre-Scrum-et-Kanban-en-francais


Le lien suivant est celui d'un site qui propose un kanban en ligne et gratuit.
Ca donne un tableau comme ceci :
autre exemple:



Un retour d'expérience dans un prochain post.

lundi 12 mars 2012

Un autre livre sur #node.js en francais et gratuit

Pour bien commencer avec Node.js

La traduction francaise est ici.

La version  d'origine est disponible ici.

dimanche 11 mars 2012

module forever de #node.js: pour une production sure

Dans un post précédent j'ai évoqué le fonctionnement de Node.js. Il existe un module appelé 'forever' qui industrialise le lancement de script javascript pour Node.js.
L'installation se fait comme d'habitude par la commande

sudo npm -g install forever

Le résultat doit etre:


/usr/local/lib/node_modules/forever
├── pkginfo@0.2.3
├── timespan@2.0.1
├── watch@0.5.0
├── microtime@0.2.0
├── daemon@0.4.1
├── node-fork@0.4.2
├── nssocket@0.3.7 (eventemitter2@0.4.8 lazy@1.0.8)
├── cliff@0.1.7 (colors@0.6.0-1 eyes@0.1.7)
├── portfinder@0.2.1 (mkdirp@0.0.7)
├── optimist@0.2.8 (wordwrap@0.0.2)
├── broadway@0.1.13 (colors@0.6.0-1 eventemitter2@0.4.8 optimist@0.3.1)
├── minimatch@0.0.5 (lru-cache@1.0.5)
├── utile@0.0.10 (async@0.1.18 mkdirp@0.3.0 rimraf@1.0.9 ncp@0.2.5)
├── flatiron@0.1.14 (director@1.0.9-1 optimist@0.3.1 prompt@0.1.12)
├── nconf@0.5.1 (async@0.1.18 ini@1.0.2 optimist@0.3.1)
├── ps-tree@0.0.2 (parse-table@0.0.0)
└── winston@0.5.10



Le lancement d'un programme par forever est très simple :

forever start 'monprogramme.js'


Exemple :(commande start et list)

 forever start cluster1.js

info:   Forever processing file: cluster1.js

german@german-1001PX:~$

german@german-1001PX:~$ forever list

info:   Forever processes running

data:       uid  command script      forever pid  logfile                        uptime     

data:   [0] YJVa node    cluster1.js 2857    2858 /home/german/.forever/YJVa.log 0:0:0:7.882


Si le programme lancé par forever vient à tomber, il  sera relancer automatiquement.
Forever est lui même en mode daemon (on peut fermer son terminal de lancement) 

L'aide sur forever est la suivante:

L'article http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever et le site de forever complètent mon propos.
Sur stackoverflow : un exemple d'usage de forever à l'intérieur d'un programme.

samedi 10 mars 2012

#node.js en cluster


Dans son mode de fonctionnement normal Node.js sera vu  par le système d'exploitation comme un programme mono-thread tournant sur un seul processeur. Ce mode d’exécution est optimum pour Node.js: il n'aura pas à partager des variables ni à synchroniser des threads. C'est plus une philosophie qu'une limite de Node.js.
Si vous avez  besoin de renforcer votre infrastructure en utilisant tous les processeurs,vous pouvez utiliser le module cluster. Ce dispositif permet de lancer le même  programme javascript sur plusieurs instances Node.js. Attention tous les programmes ne se prêtent pas à cette forme d'écriture et d'utilisation. Dans certains cas il sera nécessaire de mettre en place une communication inter-processus, mais c'est une autre histoire. L'installation se fait par


npm install -g cluster


Structure du programme.


La structure du programme est classique pour ce type d'utilisation :
La partie père du programme  accède à une fonction qui  retourne la liste des processeurs disponibles sur le PC. Puis en fonction du nombre, la partie père lance autant de fils que nécessaire. Dans l'exemple proposé, un numéro de PID pair d'un fils retourne un code OK '200', un numéro impair retourne une erreur '400'.
 


Après le lancement du script via node.js, la commande ps ax|grep node donnera:

 ps ax|grep node

 2596 pts/0    Sl+    0:00 node cluster1.js

 2598 pts/0    Sl+    0:00 /usr/local/bin/node /home/german/cluster1.js

 2599 pts/0    Sl+    0:00 /usr/local/bin/node /home/german/cluster1.js



La première ligne correspond au job du père, les deux autres aux  fils. Ce sont eux qui prennent indifféremment les connexions entrantes.
En cas de perte d'une instance le flux sera pris par la deuxième.
Les règles de répartion sont gérées par l'OS.
La fonction cpus donne sur ma machine:



[ { model: 'Intel(R) Atom(TM) CPU N450   @ 1.66GHz',
    speed: 1667,
    times:
     { user: 1768110,
       nice: 31500,
       sys: 936040,
       idle: 2281930,
       irq: 160 } },
  { model: 'Intel(R) Atom(TM) CPU N450   @ 1.66GHz',
    speed: 1667,
    times:
     { user: 1753240,
       nice: 40410,
       sys: 910150,
       idle: 2252070,
       irq: 140 } } ]


Tests avec jmeter

J'ai utilisé le projet libre jmeter pour tester le bon fonctionnement du dispositif.
Les copies d'écran présentent le plan de charge et le résultat de son exécution. 
Le plan de test

En  vert les codes retour 200 (OK)  en rouge les codes 400 (erreurs)


La aussi pas de surprise: plus la taille de l'échantillon augmente et plus la répartition est proche de la médiane.

En conclusion: Le mode cluster est à réserver pour un usage limité. Si on recherche de la tolérance de panne, le module forever sera plus adapté.

mardi 6 mars 2012

Livres gratuits #node.js

Sur amazon : un livre gratuit consacré à Node.js.
Lien ici....


Un autre ici..... Mastering Node.js

lundi 5 mars 2012

Programmez - mars 2012 (150) #coffeescript #jQuery

Dans le dernier numéro de Programmez : (numéro 150) .


Le titre du dossier est prometteur et  bonne nouvelle : il tient ses promesses.

Au sommaire:

  • Un très bon article sur coffeescript : ce langage permet aux développeurs 'coté serveur' de programmer en javascript comme des développeurs 'coté client'. L'article prend un exemple en java et le porte en coffeescript.
  • Une introduction au langage 'R' . R est le langage de programmation des statistiques.
  • Une guide pour bien démarrer avec jQuery.
  • Hadoop et du javascript ..