[Test] : Cacique + Selenium IDE + Selenium-Grid : pour des tests automatisés et industrialisés
Par François Lasselin le lundi, février 13 2012, 23:59 - Génie Logiciel - Lien permanent
- Selenium IDE (plug-in de firefox), facile a utiliser mais ne permettant pas d'industrialiser les tests.
- Selenium-grid, permettant l’exécution de tests sur différentes plateforme (OS/ navigateurs) mais sans aucune interface utilisateur.
Dans ce blog, lisez également:
On a déjà présenté Selenium IDE dans un billet précédent (Stratégie de tests: Automatisation de tests fonctionnels de non-regression. PHP-unit Selenium et PHP). Ce même billet présentait un développement PHP un peu lourd pour réussir à obtenir des tests multiplate-forme et viabilisé.La solution était basée sur l'utilisation de PHP-UNIT. Ce n'est plus le cas ici.
Cacique
Cacique a été créé et est maintenu par Mercadolibre. Mercadolibre est le e-bay sud-américain créé en Argentine en 1999. En 2008 Mercadolibre employait 1300 collaborateurs et a réalisé un chiffre d'affaire de 825 millions de dollar (wikipedia). Il y a donc une organisation solide derrière Cacique.
Cacique est développé en Ruby, la documentation existe en anglais et en espagnol. Ce projet est open-source et gratuit.
Installation & Architecture
L'installation suppose la mise en place d'une panoplie de service:
- MySQL
- Apache
- Ruby + passenger pour Apache
- Cacique + les service starling, workling et le job work.
- Selenium Grid
- les seleniumRC
A noter: Tout ces services et les composants nécessaires à la solution décrite dans ce billet sont open-source et gratuit.
On peut faire tourner l'ensemble de la plate-forme sur une même machine. Tous les services peuvent être lancé sur une machine et permettent d'utiliser le logiciel. Il est toutefois préférable d'avoir plusieurs plate formes pour dispatcher les seleniumRC et bénéficier environnement de test variés.
Lancement du serveur d’exécution
Pour faire tourner un test, il faut lancer plusieurs serveur à la main (ou configurer leur lancement automatique dans le cas d'une plateforme dédiée). Ces commandes se retrouvent dans la documentation.
sudo ./script/starling.rb (en root)
ensuite, il faut lancer workling:
./script/workling_client start
enfin lancer selenium grid
cd extras/selenium-grid-1.0.8/ant launch-hub
java -jar selenium-server-standalone-2.16.1.jar firefox -port 4443 -trustAllSSLCertificates
rake jobs:work RAILS_ENV=production
Utilisation interface
Si l'installation et le lancement de Cacique nécessitent des compétences techniques certaines, l'utilisation de la solution de test est nettement plus abordable. Cacique est une application web qui se pilote via le navigateur. Après un écran de login on arrive donc sur un écran comportant 3 diapositives présentant les premières étapes.
On sent bien l'utilisation des bibliothèques ajax de ruby on rails, il y a beaucoup d’interaction à la "web 2.0". Notamment, la création de l'arborescence du projet (dans la partie gauche de l'écran) se fait au clic droit:
|
puis ... |
|
|
On passe ensuite à la création du script de test en tant que tel. Cacique prend en entrée un script issue de Selenium IDE et exporté au format Ruby TestSuite. |
Une fois l'import effectué, on constate la première grande valeur ajouté de Cacique: il détecte les chaines de caractères contenues dans le script et va les viabiliser. Il affiche donc le liste des champs et demande à l'utilisateur de nommer ces variables:
La fin du processus de création affiche l'écran d'édition du script.
On peut alors regarder dans l'onglet "Data Set":
Dans la barre de bouton, on trouve les boutons d'import et export: C'est le deuxième effet magique!
On télécharge un modèle à remplir dans Excel directement au format xls (mais ça marche aussi avec OpenOffice...)
On complète :
On réupload et on obtient les données rempli dans Excel:
Les données importées s'ajoutent aux données existantes (d'où le doublon des 2 premières lignes).
Selenium embarquait déjà la notion de TestSuite. Une suite de test c'est un ensemble de plusieurs scénario chacun avec leur jeux de données.
Jusqu'ici, les écrans et leurs enchaînements sont relativement intuitifs. Généralement, c'est pour l’exécution et le recueil des résultats que ça se complique. Non que les manipulations soient complexes ou nécessitent des compétences techniques mais plutôt que l'ergonomie est déplorable. On se perd facilement dans les menus, la navigation est vraiment pas claire du tout.
Quelques exemples (listes non-exhaustive):
- Le bouton actualiser envoi systématiquement sur l'écran d'erreur 500 ci contre.
- sur l'écran de suite (non présenté ici), il n'y a pas de case à cocher pour sélectionner un élément. Il faut deviner qu'il faut cliquer dessus pour le sélectionner.
- les icônes disparaissent derrière le panneau "project" quand le navigateur n'est pas en plein écran.
Cet écueil passé on arrive quand même à exécuter son travail. D'abord en configurant environnement d’exécution.Il faut donc choisir les éléments correspondant à votre Selenium Grid et aux serveurs selenium RC correspondant.
On lance l’exécution de la suite de test:
En cliquant sur output, on obtient le détail de ce qui a été effectivement joué. Ce résultat n'est accessible que là.
Tandis que sur un autre écran, dans l'onglet "history", on retrouve l'historique des exécutions mais impossible de retrouver cet output. Par contre, sur cet écran on peut générer un rapport PDF.
On peut produire un export / rapport PDF en sélectionnant les tirs à intégrer.
Pour aller plus loin
Quelques commandes utiles pour compléter les script:
- selenium_stop() pour fermer les navigateurs à la fin d'un script.
- selenium_html_snapshot("titre") Pour enregistrer le code HTML de la page courrante. Un lien vers ce fichier apparait ensuite dans le
- selenium.capture_entire_page_screenshot "/somewhere/screenshot1.png" pour enregistrer un screenshot de la page courante
- Lancer java -jar selenium-server-standalone-2.16.1.jar firefox -port 4443 -trustAllSSLCertificates pour que le navigateur n'affiche pas d'avertissement sur le https.
- Des champs d'autocomplétion ou des actions javascrit réagissent à l'événement "key up": selenium.key_up "id=textfield2", "A"
- utiliser :
begin
(...)
rescue
selenium_stop()
exit(0)
end
Pour fermer les navigateurs quand un cas de test échoue (Sinon les navigateurs s'empilent) - La liste des comandes ruby utilisable dans Cacique : http://selenium.rubyforge.org/
rdoc/classes/Selenium/ SeleniumDriver.html
Limites de la solution
Cacique est encore en bêta. Il n'est pas rare de se heurter à des bugs, des messages non-traduits ou à des problèmes ergonomiques. On se perd facilement!Certaines fonctionnalités sont un peu obscures. De plus, la sortie, le rapport de tests est quasi inexistant. Les captures html ou les captures écrans ne sont pas liées au rapport de test. On n'accède pas non plus à une liste synthétique des acceptions testées.
Conclusion
Toutefois, l'outil tel qu'il est aujourd'hui apporte une réelle valeur ajoutée et permet facilement d'automatiser des tests en variabilisant les scénarios et en exploitant plusieurs plateformes différentes. Tout cela basé sur un enregistrement d'une navigation dans Firefox. Bravo !La discussion continue ailleurs
URL de rétrolien : http://blog.nalis.fr/index.php?trackback/123
Commentaires
Pas mal !
J'ai passé un moment pour rechercher "THE" outil open source pour concurrencer QC et QTP et j'ai donc eu à tester CACIQUE. Pense tu honnêtement qu'il peut être utiliser dans un projet de TNR automatisé sur un projet de grande taille ?
Bonjour Nicolas,
> Peut-on utiliser Cacique dans un projet de TNR automatisé sur un projet de grande taille ?
Cacique n'est jamais qu'une couche au dessus Selenium et Selenium est déjà présent sur des projets Web chez plusieurs grands comptes français.
Perso, j'ai mis en oeuvre du Cacique pour un grand compte français. Les faiblesses de l'outil sont présentées dans le billet mais cela n’empêche pas Cacique d'être très stable.
De mon point de vue, le principal problème pour les tests automatisés n'est pas tant cacique que la méthodologie et l'organisation humaine à mettre en place pour les tests automatisés. L'essentiel du travail est en amont.
En effet, sans stratégie de test, sans spécification, plan de validation et cahier de tests, ... difficile d'automatiser.
Cordialement,