Comprendre SonarQube en 8 questions-réponses

1. Pourquoi utiliser SonarQube ?

SonarQube est un outil d’analyse statique qui a pour but de mesurer la qualité du code d’un applicatif. Pour un projet donné, il fournit des métriques portant sur la qualité du code et permet d’identifier précisément les points à corriger (code mort, bugs potentiels, non-respect des standards, manque ou surcharge de commentaires…) Très utilisé dans les DSI, il gagne donc à être connu au moins dans ses grandes lignes !

2. Quels défauts SonarQube permet-il d’identifier ?

SonarQube classe les défauts logiciels selon 3 catégories :

  • Les bugs : anomalies évidentes du code. Ils impactent la fiabilité (reliability) de l’application.
  • Les vulnérabilités : faiblesses du code pouvant nuire au système. Elles impactent la sécurité de l’application.
  • Les « code smells » : anti-patrons (ou anti-patterns). Ils impactent la maintenabilité de l’application.

3. Qu’est-ce qu’un code smell ?

En peu de mots, du code qui sent le roussi ! Wikipedia donne quelques exemples de code smells. En général, SonarQube détecte davantage de code smells que de bugs ou de vulnérabilités. Il est donc important de déterminer si l’on souhaite tous les corriger, ou si certains peuvent être acceptés (mais nous en reparlerons tout à l’heure !)

4. SonarQube et les tests unitaires, c’est pareil ?

Attention ! Même si les deux se focalisent sur le code, et non sur les interfaces des applications à tester, il ne faut pas confondre les analyses SonarQube et les tests unitaires. Ce n’est pas du tout la même chose. Premièrement, les tests unitaires exécutent des composants de l’application à tester ; ils ne font donc pas partie des outils d’analyse statique. Deuxièmement, les tests unitaires permettent de vérifier des fonctionnements de l’application, alors que les analyses SonarQube s’attachent à la qualité du code, sans savoir ce que ce code est censé faire.

Pour faire un parallèle, les logiciels sont comme des textes dont les tests unitaires vérifient le sens et la cohérence, et dont SonarQube vérifie l’orthographe et la lisibilité. Dans son roman Sodome et Gomorrhe, Marcel Proust a écrit une phrase de 856 mots ; si ce roman était un logiciel, SonarQube aurait sans doute remonté une erreur (mais les tests unitaires seraient passés !)

L’analyse SonarQube ne remplace donc en aucun cas les tests unitaires, mais permet d’identifier rapidement certains défauts du code.

5. Comment lancer une analyse SonarQube sur un projet ?

Prérequis

Installer SonarQube (voir la documentation officielle).

Démarrer votre instance avec la commande :

service sonar start

Configurer l’analyse SonarQube

  • A la racine du projet, créer un fichier intitulé « sonar-project.properties ».
  • Compléter ce fichier avec le texte suivant :

sonar.projectKey=nom.du.projet

sonar.projectName=Nom du projet

# La version de votre projet, pas celle de SonarQube
sonar.projectVersion=1.0

# Définit l’emplacement des sources que SonarQube va analyser.
sonar.sources=.

# A décommenter si besoin
#sonar.sourceEncoding=UTF-8

  • Toujours à la racine du projet, lancer la commande « sonar-scanner ».

6. Quelles sont les fonctionnalités de SonarQube ?

Rentrons maintenant dans le vif du sujet en faisant le tour des principales fonctionnalités de SonarQube !

Analyse des résultats SonarQube

En supposant que SonarQube soit en local, les résultats de l’analyse seront consultables sur http://localhost:9000/sonar/. Chaque projet dispose d’un espace d’analyse dédié.

Ecran d’accueil de SonarQube

Sur l’écran d’accueil d’un projet analysé par SonarQube se trouve un récapitulatif des grandes familles de défauts :

La mention « Passed » signifie que le projet satisfait les exigences minimum définies dans l’espace « Barrières qualité ». Les paramètres par défaut peuvent être adaptés.

Onglet « Défauts »

Dans cet onglet, chaque bug, vulnérabilité ou code smell est répertorié et détaillé dans une liste.

L’intérêt immédiat, orienté projet : tel un outil de bugtracking ou de gestion de tickets, cette liste permet de prioriser les points à traiter, d’évaluer leur temps de correction et de les affecter à un développeur. Le statut de chaque défaut est affiché. Les options du projets, tels que l’utilisateur affecté par défaut, peuvent être configurés (onglet « Configuration » -> « Configuration du projet »).

En se positionnant en vue « Effort », on peut également voir le temps total que prendrait la correction de tous les défauts du code, ce qui peut faciliter la planification du travail d’un développeur lors d’un sprint par exemple.

Le second intérêt, orienté humain : comme chaque défaut comporte une explication détaillée et des pistes d’amélioration, le développeur est susceptible de monter en compétence et d’améliorer à long terme la qualité de son code. C’est donc un véritable outil d’amélioration continue !

Onglet « Mesures »

On y trouve des infos supplémentaires, plus générales, telles que la complexité du projet et le pourcentage de commentaires (20% étant habituellement reconnu comme un bon pourcentage). Contrairement à l’écran précédent, celui-ci n’est pas très bavard : à l’utilisateur de trancher si le taux de complexité est acceptable, par exemple. Pour en savoir plus sur les méthodes de calcul de la complexité, rendez-vous ici.

Onglet « Code »

Cet onglet est particulièrement pratique. Il permet en effet de visualiser, fichier par fichier, les problèmes identifiés par SonarQube. Le code est intégralement affiché, avec des icônes au niveau des lignes posant problème.

Onglet « Tableau de bord »

Sur cette page sont rassemblées un grand nombre de métriques utiles pour communiquer sur la qualité du code. Les dashboards sont configurables selon un grand nombre de paramètres.

Penchons-nous maintenant sur le cœur de SonarQube, à savoir la définition des règles de qualité du code.

Gestion des règles SonarQube

Liste des règles

La liste exhaustive des règles associées aux défauts est disponible à cette adresse : http://localhost:9000/sonar/coding_rules.

Dans cet espace, il est possible de modifier la sévérité que SonarQube attribue à chaque défaut. La détection de certains défauts peut aussi être désactivée. Lors des analyses suivantes, ils seront donc ignorés.

Adapter les règles SonarQube existantes

Le contenu de certaines règles peut être configuré. Par exemple, la règle de nommage des variables locales en Java est vérifiée grâce à une expression régulière qui peut être changée :

Créer de nouvelles règles SonarQube

SonarQube a prévu une documentation pour créer de nouvelles règles.

7. Comment lancer une analyse SonarQube depuis Jenkins ?

Pour intégrer pleinement SonarQube à votre démarche d’intégration continue, nous vous suggérons de déclencher des lancements automatiques de l’analyse du code depuis Jenkins.

Comment faire ? C’est simple :

  1. Installez le plugin SonarQube
  2. Générez un token dans l’interface SonarQube. Pour ce faire, une fois connecté, cliquez sur votre profil, puis sur « My account » et « Generate tokens ».
  3. Cliquez sur « Administrer Jenkins » puis sur « Configurer le système ». Dans la partie « SonarQube servers », entrez le token précédemment généré.
  4. Créez un job et configurez-le. Créez une étape de build « Lancer une analyse avec SonarQube Scanner ». Si vous ne remplissez pas les champs, ce sont les informations présentes dans le fichier sonar-project.properties qui prévaudront.

SonarQube et Jenkins Pipeline

Comme nous sommes de plus en plus nombreux à mettre en place ce type de jobs, voici un exemple de pipeline très simple réalisant une analyse SonarQube :

node {

// Lors de cette phase de setup, nous récupérons dans le workspace de Jenkins les sources à analyser.
stage(‘Setup’) {
checkout([$class: ‘GitSCM’, branches: [[name: ‘*/master’]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: ‘***clé générée par le plugin Credentials de Jenkins***’, url: ‘http://votresuperdepot.git’]]])
}

stage(‘Analyse SonarQube’) {
// Le nom du « tool » et de l’argument de « withSonarQubeEnv » correspond au nom de l’instance SonarQube telle que défini dans Jenkins, dans « Configurer le système » > « SonarQube servers » > « Installations de SonarQube » > « Nom »
def scannerHome = tool ‘Sonar’;
withSonarQubeEnv(‘Sonar’) {
sh « ${scannerHome}/bin/sonar-scanner »
}
}

}

8. Qu’est-ce qu’il ne faut pas attendre de SonarQube ?

Une exactitude indiscutable

Il est nécessaire de qualifier chaque défaut que SonarQube identifie ; nul logiciel de test automatisé n’est à l’abri d’un faux positif. Pour reprendre la métaphore du roman, qui oserait « refactorer » les romans de Proust sous prétexte qu’il a écrit un certain nombre de trèèèèès longues phrases ?

Il ne faut pas oublier que les problèmes remontés par SonarQube sont issus de scans qui repèrent des motifs présents dans le code. Parfois, ce sont donc ces motifs qu’il faut interroger et remettre en question. Et c’est bien pour ça que SonarQube propose de pouvoir gérer les règles comme bon nous semble !

Un substitut aux revues de code

Les analyses quantitatives de SonarQube peuvent être trompeuses. En effet, ce n’est pas parce que 20% des lignes d’une application sont des commentaires que ceux-ci sont véritablement utiles et apportent de la valeur. De même, ce n’est pas parce que SonarQube n’a pas identifié de duplications que le programme ne comporte pas de redondances.

Même si SonarQube est très utile pour identifier des défauts spécifiques et donner une vision d’ensemble de la qualité du code, ses analyses gagnent à être complétées par une revue de code réalisée par un humain.

D’ailleurs, si le sujet des revues de code vous intéresse, nous vous conseillons vivement de découvrir l’outil Promyze, plateforme de gestion collaborative de la qualité de code.

Conclusion

SonarQube permet donc d’identifier très rapidement les anomalies de code d’une application. Mais c’est une solution qui doit aller de pair avec une stratégie globale de qualité de code. Il faut connaître son applicatif afin de pouvoir analyser les reportings, trancher sur ce qu’il faut ou non corriger et fixer des seuils en-deçà desquels la qualité sera jugée insuffisante.

Vous aimerez peut-être…

La qualité de code en direct avec SonarLint !

SonarQube met son grain de sel dans Gitlab !

Katalon en 12 questions – réponses

Note du 6 janvier 2020 : Veuillez noter que cet article a été publié en mai 2017 et qu’il se base donc sur une version ancienne de Katalon. Cet outil a connu un essor impressionnant et propose des fonctionnalités qui n’existaient pas auparavant. Avant de prendre une décision quant à la mise en place de cet outil dans votre organisation, il sera pertinent de se pencher aussi sur des témoignages plus récents. Bonne lecture !

1) Qu’est-ce que Katalon ?

Katalon Studio est un framework basé sur Selenium et Appium, qui permet d’automatiser les tests web et mobiles. Dans cet article, nous découvrirons ensemble comment créer un cas de test mobile sur un téléphone Android.

Nous apporterons des réponses aux questions que nous-mêmes nous nous sommes posées avant de commencer avec Katalon. Notre SUT (system under test) sera l’application Observatoire des prix, qui permet de comparer produit par produit les tarifs pratiqués par les grandes surfaces en Nouvelle Calédonie. Développée par One Shot, cette application est une commande du Gouvernement de la Nouvelle Calédonie dans le cadre de la lutte contre la vie chère.

2) Quels systèmes d’exploitation Katalon supporte-t-il ?

Même si cela paraît étonnant, à ce jour, Katalon peut être installé sur Windows, Mac… mais pas sur Linux (source).

EDIT du 3 avril 2019 : Linux est maintenant pris en charge (en bêta), merci à un de nos lecteurs de nous l’avoir signalé par commentaire !

3) Katalon est-il gratuit ?

Développé d’abord en interne par KMS Technology, le projet a ensuite été partagé avec la communauté. L’outil est donc (et a priori restera) disponible gratuitement.

4) Comment débuter avec Katalon ?

Katalon nécessite quelques pré-requis, mais le démarrage se fait facilement. C’est une des exigences du produit, qui se veut accessible à tous.

Voici votre checklist de démarrage :

  • NodeJs est installé
  • Appium est installé (cela peut se faire indifféremment avant ou après l’installation de Katalon). Il faudra ensuite, dans l’interface Katalon, déclarer l’emplacement d’Appium.
  • Votre téléphone Android est branché à votre ordinateur via un câble USB.
    • Attention, votre téléphone ne doit pas être verrouillé par un mot de passe ou autre code durant l’exécution des tests. En l’état, Katalon ne permet pas de gérer le déverrouillage.
    • Autre point à vérifier : l’écran ne doit pas s’éteindre trop vite. Configurez votre téléphone pour que son écran s’éteigne au bout du seuil maximum.
    • EDIT du 8 février 2019 : ces points semble avoir avancé, voir la documentation dédiée au déverrouillage d’écran.
  • Le mode développeur est activé sur votre téléphone. Pour ce faire, il faut cliquer 7 fois sur le numéro de version (on dirait une formule magique ce n’est pas une blague !). L’emplacement de cette information dépend du téléphone, mais on peut trouver par exemple dans Paramètres > A propos de l’appareil > Infos logiciel.
  • Le débogage USB est autorisé sur votre téléphone. Rendez-vous dans les « Option de développement » qui apparaissent dans le menu principal lorsque le mode développeur est activé. Une popup apparaît pour demander si l’on peut faire confiance à l’ordinateur connecté. Si cette popup n’apparaît pas, débrancher et rebrancher le téléphone.

5) La documentation de Katalon est-elle suffisante ?

Les quelques modes opératoires qui existent sont clairs, mais ils sont peu nombreux. Le forum Katalon comble en partie ce manque. Extrêmement réactif, il nous a à chaque fois permis d’obtenir des réponses à nos questions en quelques heures seulement !

En-dehors du site officiel, il existe peu de ressources sur cet outil. A ce jour, aucune question n’a été posée sur Katalon sur le célèbre forum StackOverflow. EDIT du 27/03/2019 : ce n’est plus le cas ! Voici différentes étapes du développement du sujet sur ce site de questions-réponses.

Avril 2017 : le désert

En avril 2017, il n'y avait aucun post StackOverflow sur Katalon

Janvier 2018 : l’éclosion

En janvier 2018, il y avait 80 posts StackOverflow sur Katalon

Mars 2019 : l’explosion

En mars 2019, nous constatons qu'il y aura bientôt 600 posts StackOverflow sur Katalon

Juin 2020

(Au passage, on admire le nouveau mode nuit de StackOverflow… synonyme de confort supplémentaire et, selon le matériel utilisé, de meilleures performances environnementales !)

En juin 2020, on approche les 1000 posts

6) Les cas de test Katalon sont-ils maintenables ?

Quel sentiment magique ressent le testeur lorsque, pour la première fois depuis le début du projet, il lance son arsenal de tests automatisés…

Hélas, cette touchante émotion peut vite laisser place au désappointement si la maintenabilité n’a pas été au coeur de la conception de l’architecture des tests.

Heureusement, Katalon répond à cette problématique essentiellement grâce à 2 fonctionnalités :

  • le dépôt d’objets (object repository)
  • les mot-clés personnalisés (custom keywords)

Reconnaissance des objets avec l’Object repository

Comme avec UFT, que nous présentions précédemment, l’object repository permet de gérer en un même lieu tous les identificateurs d’éléments de l’interface. Un atout indispensable en cas de refonte de l’ergonomie. Au lieu de modifier chacun des tests utilisant un même objet, on ne modifie que la définition de l’objet ayant subi une modification.

Pour alimenter l’object repository, il faut utiliser l’un des deux outils de capture : « Spy Web » et « Spy Mobile ». L’utilisateur sélectionne alors, en s’aidant d’une preview, les objets qui l’intéressent. Pour ceux à qui cela fait peur, pas besoin de mettre le nez dans le code.

Le testeur peut ensuite cocher ou décocher les cases qu’il trouve les plus pertinentes.

Encapsulation d’actions avec les Custom keywords

Les custom keywords sont en fait des méthodes (au sens programmatique du terme) que l’on peut appeler au sein des cas de test. Prenons par exemple l’enchaînement d’actions permettant l’authentification d’un utilisateur : au lieu de copier-coller, au sein de chaque cas de test, qu’il faut :

  1. Vérifier que l’on se trouve sur la page d’authentification
  2. Entrer tel identifiant
  3. Entrer tel mot de passe
  4. Cliquer sur le bouton « Valider »
  5. Attendre que la page d’accueil apparaisse

Il suffit de créer un custom keyword qui prenne en paramètre l’identifiant et le mot de passe.

Cela améliore à la fois la lisibilité du test, car il y a moins d’étapes, mais aussi sa maintenabilité. Par exemple, si un jour une case « Se souvenir de moi » est ajoutée à cette page de connexion, il suffira d’ajouter une étape au custom keyword, et un paramètre pour choisir si l’on souhaite cocher la case ou non.

Notre conseil : bien réfléchir à l’organisation de ces custom keywords avant de se lancer à corps perdu dans l’automatisation des scripts de test. Sans cette étape, la scalabilité de votre projet risque d’en prendre un coup.

7) Katalon s’intègre-t-il avec Jenkins ?

Oui, on peut faire de l’intégration continue avec Katalon et Jenkins. Mais souvenez-vous… pas sur une machine Linux.

Dans l’interface de Katalon, cliquez sur le bouton « Build CMD », configurez votre exécution, puis copiez la commande générée.

Sur une instance Jenkins installée une machine Windows, créez un job free-style et ajoutez une étape de build « Exécuter une ligne de commande batch Windows ».

La commande à exécuter est la suivante :

cd chemin/vers/katalon.exe
[commande générée précédemment via Katalon]

Ce qui donne quelque chose comme ça :

Une limitation à noter

Les rapports de test sont stockés dans le dossier « Reports » consultable dans Katalon, et non pas dans le workspace de Jenkins. Nativement, un tel job ne permet pas d’en déclencher un autre (un fonctionnement courant dans une démarche d’intégration continue).

8) Puis-je lancer des tests automatisés sur iOS ?

Oui, mais seulement depuis un Mac (source).

9) Katalon s’interface-t-il avec des bugtrackers ou des outils de test management ?

A l’heure actuelle, Katalon s’interface avec Jira pour la gestion des anomalies et qTest pour la gestion des cas de test.

10) L’interface de Katalon est-elle user-friendly ?

C’est assez subjectif mais nous avons trouvé que oui. L’interface rappelle beaucoup celle d’Intellij.

L’outil a été conçu pour être utilisé aussi bien par des automaticiens que par des testeurs ne sachant pas programmer. Les cas de test peuvent donc être conçus en mode « manuel » ou en mode « script » (à noter que les scripts sont en Groovy).

A notre sens, utiliser cet outil peut être un bon moyen de s’initier en douceur aux joies du code. Mais il ne faut pas oublier que certaines fonctionnalités ne peuvent être exploitées pleinement qu’en mode script, par exemple les custom keywords.

A titre d’exemple, voici à quoi ressemble un cas de test en vue manuelle :

Et le même test en vue script :

Côté automatisation web, Katalon propose une fonctionnalité de capture-rejeu (ou playback) qui pourra vous rappeler Selenium IDE. Attention, il ne faut pas en abuser, car en tant que tels ces enregistrement sont un cauchemar pour la maintenance !

11) Existe-t-il une version de Katalon en français ?

Certaines organisations mettent un point d’honneur à utiliser des outils pouvant être configurés en français. Mais en l’occurrence, la réponse est non. De manière générale, il ne fait pas bon être francophone quand on se sert de Katalon… Vous utilisez des caractères spéciaux dans le mode Script ? Vous avez tort. Vraiment.

En mode manuel, heureusement, les caractères spéciaux s’affichent correctement.

Dans le même esprit, dans la popup d’identification des objets web, le raccourci d’enregistrement est Alt + ~. Infaisable avec un clavier français, sachant que la tilde nécessite trois touches différentes… Et à l’heure actuelle, ce raccourci n’est pas configurable dans les options de Katalon. EDIT du 17 avril 2019 : des solutions semblent avoir été apportées entre temps.

Ce ne sont que des détails, mais il est bon de le savoir avant de se lancer.

12) De manière générale, l’automatisation mobile est-elle plus difficile que l’automatisation web ?

Avec Katalon, non, pas vraiment. La gestion des appareils mobiles ajoute un peu de temps de configuration, mais cela ne fait pas de grande différence.

Le problème de l’identification des objets

Mais de manière générale, une application mobile peut être plus difficile à tester si l’équipe de développement n’a pas envisagé la possibilité que des tierces personnes relisent leur code… Lors de la capture des objets, on peut en effet se retrouver face à une liste interminable d’objets aux noms peu parlants.

Super clair !…

Pourquoi est-ce un problème ?

  • Parce que l’automaticien n’est pas toujours sûr de sélectionner le bon objet. Si deux écrans sont superposés et que chacun possède un bouton positionné au même endroit, même le mode visuel ne permet pas de savoir si l’objet sélectionné dans la liste est le bon.
  • Et surtout, parce que la spécificité des identificateurs impacte la robustesse des scripts d’automatisation. Un identificateur comprenant, en dur, un nombre arbitraire (tel bouton est le 27è de la page) est moins robuste qu’un identificateur défini par un « id » unique (« btn_enregistrer » par exemple).

Ce problème peut aussi exister au sein des applications web, mais dans une moindre mesure. En effet, les « id » et les « class » utilisées entre autres pour appliquer une mise en forme CSS au document sont d’une grande aide pour l’automaticien (sauf cas particuliers d’id générés automatiquement).

Ce problème n’est pas propre à Katalon. Si possible, incitez au plus tôt dans le projet les équipes de développement à créer des identificateurs d’objets « automation-friendly ».

Conclusion

Sans conteste, Katalon est un excellent outil. Il est même étonnant qu’il soit si peu connu.

Nous pensons que son plus gros défaut est malheureusement son incompatibilité avec Linux. On peut également déplorer une intégration trop superficielle avec Jenkins. L’outil a bien évolué depuis la publication initiale de cet article ! Voir cette documentation pour l’intégration à Jenkins, via un plugin dédié.

Si ces contraintes ne vous concernent pas, nous vous le recommandons chaleureusement. Nous serons heureux d’avoir vos retours sur ce logiciel.

Et pour en savoir plus sur l’automatisation des tests, nous vous conseillons cette ressource !

JMeter + Jenkins : la performance en continu

Hier, le lundi 10 avril 2017, le cyclone Cook traverse la Nouvelle Calédonie. Inquiets, les habitants se rendent en masse sur les sites d’informations météorologiques. Malheureusement, par intermittence, il semblerait que ces sites se soient retrouvés en état d’indisponibilité…

Une charge d’utilisateurs élevée peut compromettre la disponibilité d’un site web. Heureusement, certains tests non-fonctionnels aident à anticiper ce risque. Lancés périodiquement, au sein d’un cycle d’intégration continue, ils permettent de valider que l’applicatif résiste à une certaine charge d’utilisateurs. En prévision de la prochaine intempérie, nous vous proposons donc de voir comment intégrer des tests JMeter à votre instance Jenkins

 

Vous débutez avec JMeter ?

JMeter est un logiciel libre qui permet de réaliser des tests de performance, de charge, de stress, de vieillissement et de robustesse. Notre article ne vise pas à vous apprendre à concevoir un plan de test JMeter ; pour cela, nous vous conseillons la documentation officielle, qui fournit des tutoriels très complets.

Juste un conseil : pour commencer, configurez JMeter en anglais de façon à coller au vocabulaire spécifique utilisé dans les tutoriels.

Installation de JMeter sur Linux

Attention : à ce jour, sur Linux, la commande apt-get install jmeter n’installe pas la dernière version.

Pour installer la dernière version de JMeter, récupérez le numéro de version de JMeter à cette adresse, puis lancez les commandes suivantes :

wget -c http://ftp.ps.pl/pub/apache//jmeter/binaries/apache-jmeter-NUMVERSION.tgz

tar -xf apache-jmeter-NUMVERSION.tgz

Lancer un test JMeter en ligne de commande

Jenkins va lancer le test JMeter hors-GUI, c’est pourquoi il est important de comprendre comment lancer un test en ligne de commande. Il est aussi bon à savoir que, même si l’interface JMeter est pratique pour configurer ou débugger les tests, elle est déconseillée pour les lancer car elle consomme beaucoup de ressources et cela est donc susceptible de créer des effets de sonde.

Pour lancer un test en ligne de commande, enregistrer le plan de test au format JMX, qui est un format de fichier xml propre à JMeter.

Puis, lancer la commande suivante :

chemin/vers/bin/.jmeter -n -t chemin/vers/plan-de-test.jmx

« -n » indique que l’on souhaite lancer le test hors interface,

« -t » précède le chemin du plan de test à exécuter.

Vous pouvez configurer un alias pour écrire simplement « jmeter » à la place du chemin complet, mais Jenkins ne reconnaîtra pas cet alias.

Le résultat est un peu austère… mais le plugin Jenkins est aussi là pour ça !

Lancer un test JMeter depuis Jenkins

  • Stocker le fichier JMX dans un dépôt (Git, Mercurial, SVN ou autre)
  • Créer un nouveau job. Attention, ne pas mettre d’espace dans le titre, sinon cela provoque des erreurs.
  • Configurer la gestion du code source afin de récupérer le contenu du dépôt à chaque build.
  • Dans la section « Build », ajouter une étape « Exécuter un script shell ». La compléter avec :

    chemin/vers/bin/./jmeter -n -t $JENKINS_HOME/workspace/NomDujob/plan-de-test.jmx -l $JENKINS_HOME/workspace/JMeter/plan-de-test.jtl -e

Le fichier jtl contient les informations nécessaires à la création du reporting. Il sera automatiquement généré.

  • Dans la section « Actions à la suite du build », ajouter une étape « Publish performance test result report »
  • Dans « Performance report », sélectionner « JMeter ». Ajouter la regex « **/*.jtl ». Un fichier JTL sera généré pendant le build et interprété par le plugin pour fournir des graphiques comme ceux-ci :

Il vous reste à définir les seuils relatifs ou absolus à partir desquels vous souhaitez que votre build soit déclaré instable ou en erreur. Pour cet exemple, nous avons arbitrairement choisi une définition absolue : 1 erreur = build instable, 10 erreurs = build en échec.

Conclusion

En intégrant les tests JMeter à votre chaîne d’ordonnancement, vous serez capables à tout moment de connaître, selon vos tests, les performances, la résistance ou l’endurance de votre applicatif à tester. Des indicateurs qui peuvent se révéler tout aussi critiques que ceux que l’on obtient pendant les tests fonctionnels. Attention, la phase de définition des seuils est critique ; il faut veiller à n’être ni trop permissif, ni trop sévère. Comme souvent dans le monde du test, c’est avant tout une question de compromis entre qualité et vélocité…

Dans un prochain article, nous parlerons de Gatling, un autre outil open-source concurrent de JMeter qui peut également d’intégrer avec Jenkins.

Bonne découverte, et bon courage à tous les Calédoniens qui se remettent du cyclone.

Vous aimerez peut-être…

Gérer les paramètres Jenkins quand on est maniaque (ou flemmard)

SonarQube met son grain de sel dans Gitlab !

Performance, charge, stress… quelle différence ?

Et si vous avez besoin de prendre du recul sur l’automatisation de vos tests, nous vous conseillons cette ressource !

Quand choisir HP UFT plutôt que Selenium ?

Connaissez-vous UFT ? Non ? Qu’à celà ne tienne, en voici une présentation synthétique. Testeur novice ou expert, cet article a pour but de vous aider à comprendre l’outil et à déterminer s’il peut répondre à votre besoin. 

Kesako UFT ?

UFT, pour Unified Functional Testing est la réponse d’HP aux besoins croissants des organisations en tests logiciels automatisés. Successeur du célèbre QTP, UFT est donc un outil permettant l’automatisation des tests logiciels de façon simple et intuitive pour un testeur expérimenté comme pour un débutant.

UFT se présente sous la forme d’un environnement complet de développement comportant nativement l’ensemble des outils nécessaires à la conception, à l’exécution et au reporting des tests automatisés. Les scripts de test sont écrits dans le langage Visual Basic, facilitant considérablement l’utilisation de jeux de données au format Excel, et la gestion des objets* se fait de façon très simple grâce à l’outil « Object repository ».

*Objet : Toute application comporte des éléments avec lesquels l’utilisateur peut interagir, un bouton, un champ de saisie de texte, un label, etc… Ces éléments sont appelés des objets, et ces objets doivent impérativement être identifiés pour qu’un script de test puisse interagir avec lors de son exécution.

 

« Ok, c’est bien beau tout ça, mais concrètement, pourquoi je choisirais UFT pour automatiser mes tests, alors que tout le monde me parle de Selenium  ? »

me direz-vous. Approfondissons le sujet car la réponse n’est pas si évidente qu’il n’y parait.

Quelle application dois-je tester ?

Une première approche pour apporter un élément de réponse à cet épineux problème est de se poser la question suivante : « Quelle est l’application que je dois tester » ? Selenium est d’une redoutable efficacité en matière de test d’application web mais quid des applications desktop, les clients lourds ? L’avènement des applications web n’est pas parvenu à éradiquer des applications comme Excel, Skype, des IDE comme Eclipse, des progiciel de comptabilité comme Ciel, et bien d’autres… Ces logiciels résistant encore et toujours à l’envahisseur ont également des besoins  en termes de qualité. Et bien pour ceux là, Selenium aura la même utilité qu’un toit ouvrant sur un sous-marin. En effet UFT est un logiciel d’automatisation des tests pour application clients-serveur, il permet donc comme Selenium de tester des applications web, mais également des applications client lourds, et il faut lui reconnaître son talent en la matière.

UFT peut agir sur n’importe quel logiciel, un navigateur internet, un client mail, l’invite de commande, le dernier guide Larousse de cuisine sur CD-ROM, bref tout ce qu’un utilisateur peux effectuer comme action sur une application de type client lourd, UFT peut le faire.

D’autre part, depuis que QTP répond au doux nom d’UFT, il s’est doté des fonctionnalités d’un autre logiciel proposé par HP, « HP Service Test » permettant aux utilisateurs de concevoir et d’exécuter des test de d’API et de webservices. Cerise sur le ponpon, UFT offre également la possibilité de tester ses applications mobiles IOS et Android ( avec toutefois certaines contraintes dont, la nécéssité d’utiliser une solution tierce « M-eux » ainsi que la version des appareils mobiles à tester).

« Ah d’accord, mais ça veut dire que dès que je teste un client lourd je n’ai pas d’autres alternatives qu’UFT ? C’est embêtant, je vais devoir apprendre le Visual Basic alors que je suis un pro du cobol… »

UFT is User-Friendly !

Bien sûr UFT n’est pas le seul à permettre l’automatisation de test d’applications de type client lourd, mais UFT est simple à prendre en main et dispose de nombreux outils permettant de simplifier l’écriture de scripts. Aucun besoin d’être un développeur confirmé pour écrire un scénario en VB. Quelques notions simples en informatique, les boucles, les conditions, etc.. couplées à vos talents de testeurs suffiront amplement à rédiger vos tests automatiques.

Auto-complétion

L’auto-complétion prévue par l’IDE est très confortable et vous indiquera la syntaxe des boucles, des conditions si vous ne les connaissez pas en VB.

Built-in functions

Le framework UFT comporte des fonctions pré-conçues permettant d’effectuer des actions comme des clics, ou la saisie d’un texte dans un champ en 1 ligne de code. Il comporte également une fonction appelée « point de contrôle de fichier ». Cette dernière, tenant encore sur une unique ligne de code, permet de comparer des fichiers générés ou modifiés lors de l’exécution d’un scénario, à un fichier de référence défini lors de l’écriture du scénario. Les paramètres de comparaison sont définis dans une interface dédiée pour laquelle aucune connaissance d’un langage informatique n’est requis. Cette fonctionnalité est particulièrement pratique et utile par exemple pour valider le format et l’impression de factures lors des tests d’application front office.

Identification d’objets

Selenium a ses sélecteurs JQuery, UFT quand à lui possède son object repository ! La sélection et la gestion des objets dans UFT est grandement facilitée par 2 outils intégrés que sont l’object spy et l’object repository.

Grâce à l’object spy, aucune connaissance du code source de l’application n’est requise pour identifier un objet (champs texte, bouton, menu déroulant,…). Il suffit de lancer l’application à tester, de démarrer l’object spy puis de cliquer sur l’objet sur lequel on souhaite pouvoir effectuer des actions automatiques dans son scénario, et le tour est joué ! L’objet de test est identifié et peut être enregistré dans l’object repository.

L’object repository vous l’aurez compris, est donc la bibliothèque d’objets de vos scénarios (N.B. : C’est également lui qui contient les différents points de contrôle de fichier que vous aurez définis).

Ainsi, lors de la rédaction d’un scénario dans UFT votre liste d’objets est pré-définie et il ne vous reste plus qu’à l’appeler dans votre scénario pour lui faire subir les pires épreuves qu’un testeur peut infliger à une application !

Jeux de données

Un scénario de test automatisé, c’est un script, c’est à dire une série d’actions, que l’on applique à différents objets d’une application. Mais comment indiquer à ce script combien de fois cliquer sur l’objet X ou quel texte saisir dans le champ Y ? C’est le rôle du jeu de données.

Le jeu de données d’un scénario est une liste des valeurs que le scénario peut prendre comme paramètre. Prenons un exemple :

Je dois tester une application affichant « personne majeure » si le champ de saisie contient une valeur supérieure à 18, et « personne mineure » dans le cas contraire.

Pour réaliser ce test, j’aurais besoin :

  • d’un script : permettant la saisie d’un valeur dans le champ de l’application, puis de lire le texte affiché.
  • de 2 objets : La champs de saisie de l’application et le texte affiché
  • d’un jeu de données : comportant 2 couples de valeurs : {un nombre < 18 ; « personne mineure »} et {un nombre >= 18 ; « personne majeure »} 

Pratique non ? Grâce à mon jeu de données, à partir d’un unique script décrivant le comportement d’un scénario, je peux jouer une multitude de cas de test.

UFT permet une gestion enfantine des jeux de données en s’appuyant sur l’utilisation de fichiers Excel. Il est donc très simple de remplir les cellules de son fichier Excel avec les paramètres de ses cas de test, puis d’exploiter ses données dans son scénario via le langage Visual Basic qui, étant le langage d’écriture des macros de la suite Microsoft Office, comporte d’origine toutes les fonctions nécessaires à la lecture/écriture de fichiers Excel.

Execution et reporting

Côté Exécution et reporting, aucun outil externe n’est à prévoir. La suite UFT contient tout ce dont vous avez besoin. Les campagnes de test peuvent en effet être lancées directement depuis l’IDE en constituant des suites de test. La suite logicielle met également à disposition des utilisateurs un planificateur de test, le Test Batch Runner, permettant de créer des campagnes de test ordonnancées, planifiées, et de les sauvegarder pour les ré-exécuter ultérieurement.

Ces deux modes de lancement génèrent automatiquement à l’issue des campagnes, un rapport de tests indiquant pour chaque exécution, le statut OK/KO des tests ainsi que le détail de chaque étape.

Documentation

UFT est intuitif, simple à prendre en main. Il contient même un tutoriel constitué d’une petite application et  d’exemples de scénarios associés pour pratiquer et vous faire la main. Mais si cela ne s’avérait pas suffisant, sachez qu’UFT est très bien documenté et que l’on trouve facilement de l’aide sur les forums orientés autour du test logiciel.

Bon ça va, t’as gagné, ce logiciel à l’air vraiment génial, mais… attends… que lis-je ? Une licence ?

Personne n’est parfait…

Malgré tous ses atouts, UFT présente néanmoins quelques inconvénients qu’il convient de citer.

Premier de la liste, son prix ! UFT est commercialisé sous license renouvelable par trimestre et par utilisateur.

Autre inconvénient il ne peut être installé que sous Microsoft Windows, or dans un contexte ou la tendance est à la réduction des coûts et où les organisations tentent l’expérience open source avec des OS gratuits comme Linux, il peut s’agir là d’un obstacle à l’utilisation de cette solution d’automatisation.

Sur le plan technique, UFT étant assez gourmand en ressources système, il nécessitera une machine puissante pour s’exécuter et l’exécution d’une campagne de test sera donc plus lente, à ressources égales, qu’avec un outil comme Selenium. D’autre part, UFT ne peut exécuter qu’un test sur une application à la fois quand Selenium offre la possibilité de paralléliser l’exécution des test grâce à son plugin Selenium grid.

Bon, alors je prends UFT ou je prends pas UFT ?

Adapter l’outil au contexte et au besoin.

Pour conclure sur la question du choix d’UFT pour automatiser ses tests logiciels le schéma ci-dessous illustre, selon nous comment raisonner. Gardez toutefois à l’esprit qu’UFT et Selenium ne sont pas incompatibles, et que la solution à votre besoin en test peut résider dans l’utilisation conjointe de ces deux outils.

Besoin d’y voir plus clair sur le sujet de l’automatisation des tests en général ? Pssst, voilà une antisèche !


Quelle différence entre UFT et QTP ?

[Partie ajoutée le 03/04/2018 pour clarification suite à certaines questions]

Vous avez peut-être remarqué que sur certaines sources, les noms « UFT » et « QTP » sont interchangeables. A sa création en 1998, le logiciel s’appelait Astra Quicktest. En 2003, il a pris un autre nom : QTP, qui signifie « QuickTest Professionnal« . Ce n’est qu’en 2012 que QTP est devenu UFT. C’est pourquoi on trouve toujours, sur les forums ou sur StackOverflow, des personnes qui parlent de QTP.

Comprendre Selenium 3

Note du 05/01/2026

Attention, vous consultez un article ancien qui ne répondra sans doute pas à vos questions actuelles. Si vous voulez du contenu sur Selenium toujours d’actualité, nous vous conseillons ce guide de bonnes pratiques de logs Selenium.

Une autre remarque importante : nous ne recommandons plus forcément, en première intention, de lancer des projets from scratch avec Selenium. Des frameworks plus modernes se sont imposés depuis, notamment Playwright.

Rappels sur Selenium

Créé en 2004 Selenium est un framework de tests automatisés open-source et gratuit dont le but est d’automatiser les interactions avec le navigateur et d’effectuer des checks dans les pages visitées. Très pratique pour tester les sites webs, il a inspiré de nombreux wrappers tels que Gebish, Cucumber, Serenity, Protractor, Nightwatch, Nemo… Les navigateurs pris en charge sont Firefox, Chrome, Opera, Safari et Internet Explorer. De nombreux langages sont supportés, certains bindings étant développés par l’équipe Selenium (Java, Ruby, Python, Javascript, C#), d’autres étant produits par d’autres communautés open-source (Perl, PHP, Haskell; Objective-C, R, Dart, Tcl). Le langage choisi pour développer des tests Selenium n’a aucun besoin d’être le même que celui de l’application à tester.

Au fil du temps, Selenium s’est imposé comme un standard de l’automatisation des tests open-source. Sa popularité est en constante augmentation.

Cet article s’adresse autant aux personnes qui souhaitent effectuer la migration vers Selenium 3 qu’à ceux qui souhaitent simplement comprendre la feuille de route du framework. Vous verrez, la migration demande peu d’efforts, mais vous découvrirez que c’est une version qui recèle de nombreuses promesses.

Comment migrer vers Selenium 3

La migration se fait relativement en douceur, toutefois voici la réponse à quelques questions que vous pourriez vous poser pour réaliser ce changement.

Quelle version de Java pour Selenium 3 ?

Adieu Java 7, Selenium 3 tourne uniquement avec Java 8+. Upgradez si besoin et si les autres dépendances de votre projet vous le permettent.

Attention, Squash TA nécessite encore Java 7. Si vous utilisez la suite Squash, il faudra patienter un peu.

Comment changer le POM Maven pour Selenium 3 ?

Si vous utilisez Maven, changez votre POM en remplaçant votre dépendance de Selenium par :

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.0.1</version>
</dependency>

Sinon, importez les jars dont vous avez besoin pour votre projet.

Comment lancer Firefox avec Selenium 3 ?

Pour instancier un navigateur Firefox, il est maintenant nécessaire de faire appel à un driver externe : Geckodriver, Gecko étant le nom du moteur de rendu sur lequel se base Firefox (mais aussi ThunderBird, SeaMonkey…). Ce changement correspond à une nouvelle politique de gestion des drivers. Nous y reviendrons.

Téléchargez la dernière version de Geckodriver, placez le driver dans votre répertoire projet et ajoutez la ligne suivante avant l’instanciation de votre FirefoxDriver :

System.setProperty("webdriver.gecko.driver",chemin\vers\votre\geckodriver.exe");

Cette façon d’instancier un navigateur est la même que celle utilisée jusqu’à présent par les autres navigateurs. Aucun changement n’est donc requis pour continuer à tester avec Chrome, par exemple.

Quelles versions d’Internet Explorer sont supportées par Selenium 3 ?

Désormais, il n’est plus possible d’exécuter des tests sur une version inférieure à IE9.

Mais au fait, pourquoi Selenium 3 ?

Une modernisation en profondeur

Nous venons essentiellement de lister les contraintes liées à la migration de Selenium 2 à 3. Les avantages ne sont pas encore visibles. Les APIs WebDriver n’ont pas significativement évolué ; du moins, aucune annonce n’a été faite à ce sujet. Le véritable intérêt de Selenium 3, c’est tout le contexte dont il est issu, et les changements qu’il annonce.

Tout d’abord, cette version correspond à une refonte et une simplification importante, qui accélèrera sans doute le rythme des prochaines évolutions. Tout un pan du projet (Selenium Core) est maintenant laissé de côté et relégué en legacy. Partant du constat que le simple JavaScript ne permet pas de tout automatiser, Selenium repart sur une base plus moderne.

Vers une standardisation de l’automatisation web open-source

Un aspect important à prendre en compte est le contexte de standardisation du WebDriver, étant donné qu’une spécification W3C est en cours de rédaction à ce sujet (version finalisée de la spécification W3C). Cette standardisation précède un transfert des responsabilité, de la communauté open-source Selenium vers les organisations fournissant les navigateurs. Cela se voit d’ailleurs dans les dernières release-notes de Geckodriver, où les évolutions font directement référence à la spécification W3C.

Cette évolution donne véritablement ses lettres de noblesse à Selenium. C’est une excellente nouvelle étant donné que les fournisseurs de navigateurs, connaissant leurs produits mieux que quiconque, seront à même de concevoir les meilleures implémentations de leurs webdrivers respectifs.

Une deuxième spécification est déjà en projet, « W3C WebDriver Level 2« , qui devrait permettre de résoudre un certain nombre de problèmes tout en homogénéisant les mécanismes des webdrivers. Cela impacte des actions telles que l’accès au Shadow DOM (assez casse-pied dans les projets Polymer par exemple) et les popups jusqu’alors non cliquables (par exemple la popup de demande d’autorisation de géolocalisation).

Bref, le petit monde de Selenium est en effervescence et beaucoup de bonnes choses sont à venir. Restez alertes !

Squash TM version 1.15.x : quelles évolutions ?

Attention, cet article date d’il y a plusieurs années. Squash TM a connu plusieurs nouvelles versions importantes depuis. Si vous vous intéressez à ce produit incontournable, nous vous proposons de consulter ces 8 astuces bonnes pratiques Squash TM qui, version après version, restent valables ! Bonne lecture !

Squash TM : présentation rapide

Dans le cadre de nos projets, nous avons eu plusieurs fois l’occasion de gérer nos cas de test sur l’outil Squash TM.

Ce logiciel open-source est, pour la plupart de ses fonctionnalités, gratuit. Son grand atout est de permettre de lancer des tests automatisés directement depuis son interface. Visuellement plus agréable que Testlink, il est facile à prendre en main et à configurer. En-dehors de son site officiel, il n’est quasiment pas documenté, mais ce défaut est en partie comblé par son forum assez actif.

La dernière version mineure de Squash TM est sortie le 21 décembre dernier. Pour cette version 1.15.0, qui a été presque aussitôt suivie d’un patch, le reporting et l’ergonomie ont été mis à l’honneur. Petit tour d’horizon des principales évolutions.

Tableaux de bord

Visualisation des exigences

Créer de tableaux de bord était déjà possible pour mieux visualiser le patrimoine de cas de test et le déroulement des campagnes. Cette fonctionnalité graphique, qui fait partie des atouts de Squash TM, est maintenant également proposée dans l’espace des exigences.

Ce nouveau tableau de bord permet en un coup d’œil d’évaluer l’étendue de la couverture de tests. Il permet de répondre aux questions suivantes : où en est le travail de rédaction des exigences ? Sont-elles toutes décrites ? Sont-elles toutes associées à des cas de test ? Une bonne aide pour le test manager.

Un exemple de tableau de bord Squash TM :

Personnalisation des paramètres des tableaux de bord

Les champs personnalisés étaient déjà présents dans les versions antérieures. Il est désormais possible de les utiliser lors de la génération de graphiques et de tableaux de bord.

Avant :

Maintenant :

Création et affichage de tableaux de bord « favoris »

Dans l’espace pilotage (voir ci-dessous), les dashboards générés peuvent être sélectionnés pour être affichés en tant que « dashboard préféré » des espaces d’exigences, de cas de test ou de campagnes de test. Dans ces espaces, il est donc maintenant possible d’afficher des graphiques personnalisés, ou de revenir aux graphiques par défaut.

Sélection du dashboard favori dans l’espace cas de test :

Et si besoin, retour au graphique par défaut :

Ergonomie : des petits plus confidentiels

Drag’n’drop

La release note de la version 1.15.0 indique : « [Cas de test] Drag’n drop pour l’appel de cas de test »… et heureusement, car sans cela nous n’aurions jamais découvert cette fonctionnalité. Dans l’espace « Cas de test », sélectionnez un cas, ouvrez l’onglet des pas de test. A ce moment-là, au lieu de cliquer sur le bouton « Appeler un cas de test », cliquez sur un autre cas et glissez-le dans la zone des pas de test. Un petit tooltip serait le bienvenu pour les utilisateurs qui ne lisent pas les release notes… Ni ce blog !

Jeux de données

Les plus observateurs remarqueront le nom du jeu de données qui apparaît maintenant dans le titre de la popup d’exécution et dans le bandeau du titre du préambule.

Avant

Maintenant

Champs personnalisés de type numérique

Une petite évolution qui ne paye pas de mine, mais qui permet de se rapprocher d’une fonctionnalité présente sur un autre logiciel de test management open source, TestLinkOuvre un nouvel onglet

Ecran Testlink

Ecran Squash TM

Et rien n’empêche maintenant de faire un graphique incorporant la notion de temps d’exécution des tests, comme ci-dessous :

Focus sur le champ

Autre amélioration sympathique : lorsque l’utilisateur clique sur le bouton « Ajouter un autre » (cas de test, par exemple), sur la popup suivante son curseur est directement positionné dans le premier champ à éditer ; plus besoin de cliquer dessus.

Ce sont ces petits détails qui rendent un logiciel agréable à utiliser.

Pour en savoir plus

  • Sur les fonctionnalités prévues pour les prochaines version, voir la roadmap de Squash TMOuvre un nouvel onglet .
  • Pour tester vous-mêmes les nouvelles fonctionnalités de Squash TM, rendez-vous sur leur démo en ligneOuvre un nouvel onglet .