Logo Parasoft

Correction du sélénium dans votre pipeline CI / CD

By Joseph Benken 19 mars 2020 6 min de lecture

Comment rationalisez-vous Selenium dans votre pipeline CI/CD ? Ici, nous découvrons comment vous pouvez modifier le pipeline CI/CD pour résoudre automatiquement les problèmes de test Selenium causés par CI/CD.

Correction du sélénium dans votre pipeline CI / CD

By Joseph Benken 19 mars 2020 6 min de lecture

Comment rationalisez-vous Selenium dans votre pipeline CI/CD ? Ici, nous découvrons comment vous pouvez modifier le pipeline CI/CD pour résoudre automatiquement les problèmes de test Selenium causés par CI/CD.

Exécuter des tests automatisés en continu peut sembler une évidence. Un système CI est essentiel, offrant aux équipes de développement agiles une visibilité rapide sur la santé de leurs applications. Si les tests automatisés réussissent, l'application est saine. Si les tests échouent, l'application est cassée d'une manière ou d'une autre. Ou est-ce?

La triste réalité est que les tests automatisés ne nous donnent pas toujours une telle confiance, en particulier lors de l'exécution de tests Selenium. Les tests au sélénium peuvent échouer pour de nombreuses raisons différentes, que l'application soit cassée de quelque manière que ce soit ou qu'elle ait changé. Ces problèmes sont bien détaillés dans un précédent blog. Ici, je vais expliquer comment modifier le pipeline CI / CD pour résoudre automatiquement ces problèmes, améliorant ainsi la confiance dans les résultats des tests du système CI.

Sélénium CI Sorrow

CI / CD amplifie les problèmes de test de sélénium. Regardons comment cela se produit. Premièrement, le développement entraîne des changements de code. Le système CI détecte le changement et déclenche le pipeline de construction. Les modules sont compilés, les tests unitaires sont exécutés et réussis (yay!), Puis l'application est emballée pour le déploiement. Le pipeline de déploiement se déclenche ensuite, organisant un environnement de test, déployant l'application testée, puis lance les tests d'intégration, dont beaucoup sont écrits à l'aide de Selenium. Tous les tests Selenium ne réussissent pas, à quel point le système CI notifie les échecs de test à diverses personnes par e-mail. Ces personnes réagissent, ce qui prend parfois beaucoup de temps à enquêter et à dépanner. Les propriétaires de produits, les responsables et les autres parties intéressées voient également les échecs sur leurs tableaux de bord qui détournent leur attention d'autres choses. Sachant que les tests Selenium eux-mêmes sont instables, comment peut-on être sûr que CI / CD a signalé une régression ou un défaut réel? Combien de temps faut-il perdre à résoudre les faux positifs?

Améliorer simplement les tests Selenium peut être non trivial, impliquant parfois des essais et des erreurs, en particulier lorsque les problèmes sont intermittents ou difficiles à reproduire. D'une construction à l'autre, il y a des échecs qui peuvent se déplacer, où il n'y a aucun test à blâmer. Il peut s'agir de problèmes systémiques ou environnementaux qui vont et viennent. Le système CI peut utiliser des exécuteurs virtuels ou basés sur le cloud qui ont des caractéristiques de performances incohérentes. Les tests s'exécutent et passent sur les postes de travail des développeurs, mais échouent dans l'automatisation CI. Semble familier?

Selenium CI résolu

Parasoft Sélénic a été développé pour aider à combattre de tels défis. Selenic automatise l'analyse et la correction des problèmes de test Selenium, en fournissant des correctifs ou des informations sur ces problèmes, et rend ces résultats disponibles au moment où les humains sont notifiés par leur système CI. Le fardeau est déplacé vers le système CI, loin des humains qui réagissent aux notifications du système CI. En seulement deux étapes simples, vous pouvez automatiser le processus de correction des tests Selenium dans le cadre du pipeline CI / CD à l'aide de Parasoft Selenic.

Rationalisez les tests de sélénium avec Parasoft Selenic.
Commencer votre essai gratuit

Injecter l'agent sélénique

Pour intégrer Parasoft Selenic, modifiez une ligne de votre script d'exécution de test existant. Imaginons que j'ai une étape d'exécution Maven dans le pipeline qui pilote mes tests Selenium basés sur Java. En général, je spécifie deux objectifs Maven, « clean » et « test », qui sont transmis à Maven en tant qu'arguments de ligne de commande. Ici, il suffit d'ajouter un argument de ligne de commande Maven supplémentaire :

-DargLine = -javaagent: $ {SELENIC_HOME} /selenic_agent.jar=selfHealing=true,sessionId = $ {BUILD_TAG}

Dans Jenkins CI, cela pourrait ressembler à ceci:

Capture d'écran de Jenkins CI, comment intégrer Parasoft Selenic via l'argument de ligne de commande Maven

L'agent Selenic est désormais intégré au processus d'exécution des tests, à condition que Selenic soit installé et sous licence à l'emplacement référencé par la variable « SELENIC_HOME ». L'agent Selenic peut effectuer diverses tâches, mais pour stabiliser les tests, j'active uniquement la fonctionnalité « auto-réparation », qui tente d'identifier et de corriger instantanément les problèmes de test Selenium.

Il est important de bien réfléchir à la question de savoir si vos tests Selenium sont tous regroupés dans un seul module ou s'ils sont répartis dans plusieurs modules. Il est courant que les tests soient répartis en plusieurs modules pour des raisons d'organisation. Pour que Selenic puisse agréger les informations de plusieurs modules de test, un argument « sessionId » doit être configuré. Dans l'exemple ci-dessus, j'utilise « BUILD_TAG », une variable prédéfinie dans le système d'intégration continue Jenkins, parfaitement adaptée à cet usage. Quel que soit le système d'intégration continue utilisé, je recommande de créer un identifiant de session unique à l'aide des variables fournies par votre système.

Après avoir effectué ce changement d'une ligne, Selenic identifie et corrige automatiquement les problèmes de stabilité des tests, donnant à chacun beaucoup plus de confiance dans les résultats des tests publiés par le système CI. Cependant, il y a un autre composant Selenic que je recommande d'intégrer.

Exécutez l'analyseur sélénique

Comment savons-nous quels problèmes Selenic a trouvé ou ce qu'il a corrigé? Dois-je apporter des modifications aux tests Selenium pour éviter les types de problèmes détectés par Selenic? Pour obtenir ces informations, vous exécuteriez Selenic Analyzer comme une autre étape d'exécution dans le pipeline. Il s'agit d'un deuxième changement d'une ligne mais toujours insignifiant:

java -jar $ SELENIC_HOME / selenic_analyzer.jar -report target / selenic-reports -sessionId $ {BUILD_TAG}

Dans Jenkins CI, cela pourrait ressembler à ceci:

Capture d'écran de Jenkins CI, comment exécuter l'analyseur Selenic comme une autre étape du pipeline

L'analyseur Selenic collecte les informations enregistrées précédemment par l'agent Selenic, effectue des analyses complémentaires sur les données, puis génère des rapports qui peuvent ensuite être archivés par le système d'intégration continue. Par défaut, l'analyseur traite les informations de la session la plus récente, mais pour plus de robustesse, je recommande de configurer explicitement l'argument « -sessionId » avec la même valeur que celle utilisée précédemment lors de la configuration de l'agent Selenic.

Par défaut, l'analyseur Selenic écrit les rapports dans le répertoire de travail courant. Cependant, pour faciliter l'archivage des rapports, ajoutez l'argument « -report » pour indiquer à Selenic d'écrire les rapports dans un dossier « selenic-reports » du répertoire de sortie de build de votre projet. Ensuite, ajoutez une étape supplémentaire au pipeline pour archiver « target/selenic-reports/** » :

Capture d'écran de Jenkins CI, paramètre Archiver les artefacts

Les fichiers de rapport sont désormais accessibles à tous via le système CI. Dans le cas de Jenkins CI, les rapports sont facilement accessibles aux URL stables:

http://{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.html

http://{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.json

La première URL pointe vers le rapport Selenic HTML qui peut être consulté directement dans un navigateur Web. La deuxième URL est vers le rapport JSON que les développeurs peuvent fournir au plug-in Selenic IDE pour importer les recommandations du dernier test automatisé.

Autres considérations

Selenic propose de nombreuses autres options que vous pouvez envisager d'activer en fonction de votre environnement de test et d'autres besoins spécifiques.

Selenic enregistre les données de chaque session de test. Ces données constituent une base de connaissances, permettant à Selenic d'apprendre et de prendre de meilleures décisions et recommandations d'auto-guérison au fil du temps. Par défaut, ces données sont stockées sur la machine où le test est exécuté. Par conséquent, si vous disposez d'un pool d'exécuteurs, il est préférable que ces données soient stockées dans un dossier partagé accessible à tous. L'emplacement des données peut être configuré explicitement en passant un paramètre « data={path} » à l'agent Selenic et un argument « -data {path} » à l'analyseur Selenic, où « {path} » correspond au chemin d'accès au système de fichiers d'un dossier partagé. Sous Windows, il peut s'agir d'un chemin UNC tel que \HostNameSharedFolder. Les données enregistrées s'accumulent indéfiniment, sauf restriction. Cela peut entraîner une utilisation excessive du disque. Une limite au nombre de sessions de test enregistrées peut être configurée en passant un paramètre « maxSessionDaysToKeep={num_days} » à l'agent Selenic. Le nombre de jours ({num_days}) correspond au nombre de jours d'enregistrement des données, et non aux jours calendaires. Autrement dit, Selenic ne comptabilise pas les jours où aucune donnée de session de test n'a été enregistrée. Ceci est utile si vous exécutez vos tests peu fréquemment ou à intervalles irréguliers, ou si vous avez subi une panne de serveur pendant plusieurs jours.

Selenic peut également être configuré pour capturer des informations de diagnostic supplémentaires à différents niveaux de granularité. Par exemple, Selenic peut être configuré pour capturer des captures d'écran pour chaque action Selenium ou uniquement pour les actions ayant échoué. Pour activer les captures d'écran en cas d'échec de test, vous pouvez transmettre le paramètre « screenshot=failures » à l'agent Selenic. Les captures d'écran des échecs sont disponibles dans le rapport HTML généré par Selenic Analyzer.

CI/CD + Sélénique = ❤

Parasoft Selenic a été conçu pour accélérer le développement agile grâce à Selenium dans le cadre du CI/CD. Les développeurs et les testeurs gagnent en productivité, passant moins de temps à traquer les « fantômes » Selenium et plus de temps à travailler sur des projets concrets. Améliorez la fiabilité de vos résultats de test Selenium grâce à Selenic. Téléchargez votre essai gratuit aujourd'hui.

Rationalisez les tests de sélénium avec Parasoft Selenic.
Commencer votre essai gratuit