Simple Science

La science de pointe expliquée simplement

# Informatique# Génie logiciel

S'attaquer aux tests instables dans les applications web

Une nouvelle approche pour réduire les problèmes de fiabilité dans les tests UI grâce à la génération automatique d'attentes.

― 7 min lire


Réparer les tests UIRéparer les tests UIinstablesfiabilité et l'efficacité des tests.Les attentes automatiques améliorent la
Table des matières

Les applications web doivent être testées pour s'assurer qu'elles fonctionnent comme prévu. Un moyen important de faire ça, c'est d'utiliser les tests de bout en bout, qui vérifient tout le flux de travail d'une appli. Ça veut dire simuler comment de vrais utilisateurs interagiraient avec l'appli pour voir si tout roule bien. Mais beaucoup de gens savent que ces tests peuvent parfois donner des résultats inconsistants. Cette inconsistance, on l'appelle "flakiness."

Les tests flaky, c'est un gros problème parce qu'ils peuvent passer une fois et échouer la suivante, même s'il n'y a pas eu de changements dans le code. Ça peut mener à de la confusion et à du temps perdu pour les développeurs qui essaient de comprendre ce qui ne va pas. Une raison courante de la flakiness, c'est l'ordre imprévisible dans lequel le code de test et le code de l'application web s'exécutent. Ce souci est particulièrement visible dans les tests qui vérifient l'interface utilisateur (UI).

Le Problème de la Flakiness dans les Tests UI

La flakiness basée sur l'UI, c'est un vrai défi. Les tests doivent savoir exactement quand les éléments de l'UI sont prêts pour la prochaine commande. Ça peut être délicat parce que le code qui exécute les tests ne comprend pas toujours comment l'interface utilisateur se comporte. Souvent, quand une commande s'exécute, elle déclenche des changements dans l'UI qui peuvent ne pas se produire tout de suite. Si une commande de test passe avant que l'UI soit complètement mise à jour, le test peut échouer de manière inattendue.

Avant, certains développeurs essayaient de corriger la flakiness en ajoutant des délais dans les scripts de test. Ces délais attendaient un temps fixe avant de passer à la commande suivante. Cette méthode voulait souvent dire attendre plus longtemps que nécessaire, ce qui ralentissait les tests.

Le Besoin de Meilleurs Délais

Avec les défis des longs délais fixes, une approche plus efficace impliquerait d'attendre juste le temps nécessaire pour que l'UI se mette à jour. C'est là que l'idée des "attentes explicites" entre en jeu. Au lieu d'attendre un temps défini, les attentes explicites vérifient des conditions spécifiques qui doivent être remplies avant de passer à l'étape suivante. Ça peut faire gagner beaucoup de temps et rendre les tests plus fluides.

Cependant, décider quand et où ajouter ces attentes peut être très compliqué pour les développeurs. Ils doivent souvent deviner où la flakiness pourrait se produire ou quelles conditions devraient être en place avant de continuer. Ça laisse place à l'erreur humaine et complique le processus d'écriture des tests.

Solution Proposée : Génération Automatique d'Attentes

Pour faire face à ces défis, on propose une nouvelle technique qui peut ajouter automatiquement ces attentes explicites aux bons endroits. L'idée, c'est de surveiller les changements dans l'UI du navigateur quand les commandes sont exécutées et d'utiliser cette info pour décider quand attendre.

Comment Ça Marche

  1. Enregistrement des Changements : La première étape, c'est d'observer les changements dans le Document Object Model (DOM), qui représente la structure de la page web. Quand une commande s'exécute, elle peut provoquer divers changements dans le DOM. En suivant ces changements avec un outil, on peut recueillir des infos sur ce qui se passe en temps réel.

  2. Génération des Conditions d'Attente : Une fois qu'on a ces infos, on peut créer des conditions spécifiques qui doivent être remplies avant que la prochaine commande ne s'exécute. Par exemple, si une commande met à jour un élément de l'UI, la condition d'attente peut vérifier si cet élément a la valeur prévue avant de passer à la suite.

  3. Implémentation des Attentes : Enfin, l'outil insère automatiquement les conditions d'attente générées dans le code de test original. Ça veut dire que les développeurs peuvent se concentrer sur la construction de leurs applications sans s'inquiéter que des tests flaky perturbent leur avancée.

Évaluation de l'Efficacité

Pour voir comment notre solution fonctionne, on l'a testée sur 122 tests flaky différents provenant de divers projets réels. On a examiné sept projets populaires, et les résultats étaient prometteurs. Notre méthode a réussi à corriger un pourcentage élevé des tests flaky tout en réduisant significativement le temps perdu par rapport à l'utilisation de simples attentes fixes.

Résultats

  1. Commandes Flakies : On a trouvé que beaucoup de commandes dans les tests étaient flaky. Ça veut dire qu'un grand nombre d'entre elles pourraient causer des résultats inconsistants pendant les tests.

  2. Surcharge d'Exécution : On a comparé notre méthode avec les attentes implicites traditionnelles. Alors que les attentes implicites ralentissent souvent le processus de test dans son ensemble, notre méthode a gardé la surcharge d'exécution beaucoup plus basse. C'est crucial pour les environnements de développement où le temps est précieux.

  3. Taux de Correction : Notre solution a réussi à corriger presque tous les tests flaky (taux de réussite de 98 %), tandis que les méthodes traditionnelles ont fourni des résultats moins cohérents.

Avantages de la Nouvelle Approche

Les avantages de notre technique de génération automatique d'attentes incluent :

  1. Efficacité : Les tests s'exécutent beaucoup plus rapidement, car les attentes ne sont ajoutées que quand c'est vraiment nécessaire. Il n'y a plus besoin de délais inutiles.

  2. Précision Supérieure : Avec des conditions spécifiques vérifiées, la flakiness des tests est grandement réduite. Ça veut dire que les développeurs peuvent faire davantage confiance à leurs tests.

  3. Moins de Travail Manuel : En automatisant le processus d'insertion des attentes, les développeurs gagnent du temps et réduisent les chances d'erreur humaine dans leurs scripts de test.

Défis et Limitations

Bien que cette solution montre un grand potentiel, il reste des défis à considérer :

  1. Complexité des Applications Web : Certaines applications web sont très complexes, et les interactions à l'intérieur peuvent mener à des comportements inattendus. Ça pourrait rendre plus difficile le suivi précis des changements et la détermination des meilleures conditions d'attente.

  2. Limitations du Framework : L'implémentation actuelle supporte principalement des frameworks de test populaires comme Selenium et Cypress. Élargir cela pour soutenir d'autres frameworks serait une étape essentielle.

  3. Intégration avec des Bibliothèques Tierces : Certains tests flaky peuvent provenir de soucis sans rapport avec les changements d'UI, comme des problèmes dans des bibliothèques tierces. Notre méthode se concentre principalement sur la surveillance des changements dans le DOM et pourrait ne pas prendre en compte les changements d'état internes dans ces bibliothèques.

Travail Futur

En regardant vers l'avenir, il y a plusieurs pistes pour des améliorations futures :

  1. Support de Frameworks Plus Larges : Élargir l'outil pour fonctionner avec d'autres frameworks de test permettrait à plus de développeurs de bénéficier de cette solution.

  2. Collaboration avec l'Industrie : Travailler aux côtés de grandes entreprises qui gèrent des applications web complexes peut donner des insights plus profonds sur les défis du monde réel et affiner l'outil davantage.

  3. Collecte de Données Plus Large : Rassembler plus de données provenant de divers projets peut aider à rendre l'outil encore plus efficace en l'entraînant à reconnaître différents types de comportements d'UI.

Conclusion

Les défis posés par les tests flaky dans les applications web peuvent ralentir le développement et introduire de la confusion. En générant automatiquement des attentes explicites, on peut rendre les tests de bout en bout de web beaucoup plus fiables et efficaces. Ça aide non seulement les développeurs à gagner du temps, mais ça booste aussi leur confiance dans le processus de test. Même s'il y a des obstacles à surmonter, le potentiel pour un cycle de développement plus fluide est évident.

Source originale

Titre: WEFix: Intelligent Automatic Generation of Explicit Waits for Efficient Web End-to-End Flaky Tests

Résumé: Web end-to-end (e2e) testing evaluates the workflow of a web application. It simulates real-world user scenarios to ensure the application flows behave as expected. However, web e2e tests are notorious for being flaky, i.e., the tests can produce inconsistent results despite no changes to the code. One common type of flakiness is caused by nondeterministic execution orders between the test code and the client-side code under test. In particular, UI-based flakiness emerges as a notably prevalent and challenging issue to fix because the test code has limited knowledge about the client-side code execution. In this paper, we propose WEFix, a technique that can automatically generate fix code for UI-based flakiness in web e2e testing. The core of our approach is to leverage browser UI changes to predict the client-side code execution and generate proper wait oracles. We evaluate the effectiveness and efficiency of WEFix against 122 web e2e flaky tests from seven popular real-world projects. Our results show that WEFix dramatically reduces the overhead (from 3.7$\times$ to 1.25$\times$) while achieving a high correctness (98%).

Auteurs: Xinyue Liu, Zihe Song, Weike Fang, Wei Yang, Weihang Wang

Dernière mise à jour: 2024-02-15 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2402.09745

Source PDF: https://arxiv.org/pdf/2402.09745

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires