Vous avez un projet Java (ou avec une autre technologie Web). Si dans votre projet, vous avez des scénarios Selenium pour vous assurer que votre projet ne présente pas de régressions fonctionnelles, c’est bien, vous êtes un bon élèves. Si en plus, vos tests sont automatisés par une plate-forme d’intégration continue (du type Jenkins), alors vous méritez une mention honorable. Mais est-ce que vous avez pensé à collecter des données de performance pendant l’exécution de ces tests ?
Cet article est doublement posté, on peut le retrouver sur le site de mon entreprise : http://blog-rd.ideotechnologies.com/?p=2432
Pour nous aider dans cette tache, dynaTrace met à notre disposition un outil gratuit qui peut facilement se glisser une plate-forme existante de tests Selenium. L’outil en question se nomme « dynaTrace Ajax Edition » et vous pouvez le trouver à l’adresse suivante : http://ajax.dynatrace.com/ajax/en/
Lorsqu’on lance à la main l’outil, on alors la possibilité d’exécuter le navigateur de son choix et l’outil capturera, au cours d’une session d’analyse, toutes les requêtes qui passe par le navigateur et rendra compte du temps passé dans le réseau, celui passé dans le rendu de la page ou dans les scripts :
Chaque session est ensuite archivée. C’est donc une vision assez complète de la performance de la requête du point de vue client que nous obtenons. Si vous êtes en train de tester en lisant mes explications, vous allez surement me dire que c’est bien joli tout ça mais comment peut-on faire pour que les données soient collectées pendant l’exécution de mes tests Selenium. Rien ne l’empêche car dans les faits, dynaTrace Ajax Edition est un plugin ajouté au navigateur, il est constament présent (même lorsqu’on lance le navigateur en dehors d’une session de l’outil). Il suffit de savoir communiquer avec ce plugin ; et le langage disponible est la variable d’environnement. Pour ma part, j’en utilise 3 :
Dans la pratique avec Selenium, vous avez surement un script de lancement votre Remote Control qui ressemblera à :
set DT_AE_AGENTACTIVE=true
set DT_AE_AGENTNAME=IDEO_SELENIUM
set DT_AE_CLEARCACHE=true
ant -Dport=5557 -Dhost=localhost -DhubURL=http://localhost:4444 -Denvironment="ie 8 windows" launch-remote-control
Dorénavant, à chaque fois que le Remote Control lancera un navigateur et que dynaTrace Ajax sera démarré, les données de performance seront archivées dans l’outil :
Nous ne sommes pas pour autant totalement dépourvu si on décide de prendre le temps de développer ses propres outils. Avec l’aide de quelques paramètres, dynaTrace peut émettre une requête HTTP avec un contenu JSON synthétisant les données enregistrées pendant une session d’analyse. Avec une simple servlet et un parser du type google-gson, il est alors possible de récupérer les valeurs et de les archiver soi-même de manière centralisée.
Les paramètres sont à ajouter dans le fichier dtajax.ini dans le répertoire d’installation de dynaTrace :
-Dcom.dynatrace.diagnostics.ajax.beacon.uploadurl=http://localhost:8080/beaconstorage/endpoint
-Dcom.dynatrace.diagnostics.ajax.beacon.portalurl=http://localhost:8080/beaconstorage/endpoint
-Dcom.dynatrace.diagnostics.ajax.beacon.autoupload=true
Et la requête JSON reçu alors par votre Servlet (ou autre technologie) sera de la forme :
{
"version":"2.0.0",
"url": "www.mydomain.com",
"rank":95,
"ranks":{
"cache": {"rank":100, "comment":"" },
"net": {"rank":98, "comment":"" },
"server": {"rank":94, "comment":"2 dynamic server-requests" },
"js": {"rank":89, "comment":"4 slow JS handlers"}
},
"timetoimpression":1587,
"timetoonload":1645,
"timetofullload":2747,
"reqnumber":9,
"xhrnumber":0,
"pagesize":264562,
"cachablesize":0,
"noncachablesize": 264562,
"timeonnetwork": 400,
"timeinjs": 30,
"timeinrendering":200
}
Vous trouverez de plus ample information sur le site officiel de dynaTrace bien sûr : http://ajax.dynatrace.com/ajax/en/ mais aussi sur le blog officiel du produit : http://blog.dynatrace.com/2010/10/30/web-performance-optimization-use-cases-part-3-automation/