6
votes

Selenium Automation: Quelle devrait être la plage acceptable de cas de test ayant échoué en dehors des échecs valides lors de l'exécution d'une suite de tests?

Notre société développe un framework avec Selenium, POM, Maven et Java pour une application Web et nous avons environ 35 cas de test. Lorsque nous exécutons testng.xml , il y a au moins 4 à 5 cas de test qui échouent de manière aléatoire en raison d'une exception d'élément périmé ou d'un élément non cliquable à ce stade, etc.

Est-il courant que certains cas de test échouent lorsque nous exécutons testng.xml ? Combien de cas de test sont exécutés dans votre organisation et quelle est l'estimation du nombre d'échecs?


1 commentaires

Si le test échoue, cela signifie soit que votre code testé ne fonctionne pas comme prévu, soit que votre test est mauvais. Il ne devrait pas y avoir de tests ratés du tout


5 Réponses :


1
votes

Les échecs dus à des éléments périmés, à un élément non cliquable à un moment donné, à des problèmes de synchronisation, etc. doivent être traités et traités dans votre cadre d'automatisation - les méthodes que vous créez et utilisez pour construire le cas.
Ils ne doivent pas se propager et conduire à des échecs de cas - ce sont des problèmes techniques, pas un problème de produit ou un cas de test. En tant que tels, ils doivent être pris en compte (blocs try / catch par exemple) et traités (mécanismes de relance, ou réobtention d'un élément Web) rapidement.

Essentiellement - traitez ces types d’échecs de la même manière que vous traitez les erreurs de syntaxe - il ne devrait pas y en avoir .


Dans le même temps - et pour parler simplement de mon expérience - les cas traitant de données en direct / dynamiques peuvent parfois échouer de manière aléatoire.

Par exemple, un SUT sur lequel je travaille affiche des métriques et des agrégations basées sur des données et des actions hors de mon contrôle (trafic de vie des systèmes en amont). Il y a des cas vérifiant qu'un artefact généré particulier se comporte selon les attentes définies (imaginez un graphique mensuel par exemple, qui n'a tout simplement pas un certain nombre de points de données - il n'y avait tout simplement aucune activité ces jours-là) - les cas où cela échouera, non pas parce qu'ils ont été construits de manière incorrecte, et certainement pas parce qu'il y a un bogue du produit - mais à cause de la combinaison du temps d'exécution et du jeu de données.

Au fil du temps, j'en suis venu à la conclusion que ces échecs étaient acceptables, les «réparer» - resélectionner des ensembles de données, contourner ces fluctuations extérieures, etc. est une activité dont la valeur diminue et le retour sur investissement est discutable. Sur les quelque 10 000 cas actuels pour ce système, environ 1,5% échouent à cause de cela (avertissement: le SUT travaille exclusivement avec des données en direct / de production).
Ce n’est guère une règle empirique - c’est juste un nombre que j’ai jugé acceptable compte tenu du contexte.

Et note importante - si j'avais eu le contrôle total de ces mêmes données, je me serais débarrassé de ces échecs "aléatoires" également . J'ai choisi d'utiliser délibérément les données réelles - ainsi mes cas vérifient également leur intégrité; avec cet effet secondaire négatif.


1 commentaires

Merci Todor, ces erreurs disparaîtront dans mon cadre



1
votes

Il vous suffit d'ajouter un peu d'attente avant votre driver.findElement (). Selenium fonctionne très rapidement et c'est pourquoi vous obtenez cet élément périmé ou cet élément non visible des exceptions. L'ajout de wait devrait résoudre le problème.


0 commentaires

1
votes

L'automatisation des tests est liée à la répétabilité des tests et à la vitesse à laquelle les tests peuvent être exécutés. Il existe un certain nombre d'outils commerciaux et open source disponibles pour aider au développement de Test Automation et Selenium est probablement la solution open source la plus largement utilisée parmi eux.

Plage acceptable d'échecs de tests

Cette matrice peut varier d'une organisation à l'autre ou selon les Exigences du Client spécifiques. Toutefois, Critères de sortie doit tenir la clé de cette limite. Cela dit, comme l ' automatisation des tests via Selenium automatise les tests de régression , il devrait donc idéalement y avoir zéro échecs. Je connais une organisation adhérant à la politique Zero Defect .

Erreurs auxquelles vous faites face

Conclusion

Les erreurs que vous avez mentionnées ne sont donc pas des erreurs en tant que telles, mais peuvent survenir lors de l ' exécution du test pour les raisons suivantes:

  • Non-concordance dans la compatibilité entre la version des binaires que vous utilisez.
  • Non-concordance de synchronisation entre l'instance WebDriver et l'instance Navigateur Web .

Ces erreurs peuvent être facilement résolues en suivant les meilleures pratiques mentionnées ci-dessus.


0 commentaires

0
votes

Exceptions d'élément périmé - Cette exception peut apparaître lorsque l'élément n'est plus dans le DOM. Le principal contributeur à ce problème est la page qui se charge lorsque l'élément est recherché. La meilleure façon de gérer cela est d'attraper l'exception. Comme suggéré précédemment, il devrait être conçu dans le cadre du cadre pour gérer ces cas

Élément non cliquable au point - Ce problème peut survenir pour plusieurs raisons

  1. La page est toujours en cours de chargement
  2. Il y a une superposition au-dessus de l'élément sur lequel nous voulons cliquer, le bloquant ainsi

Meilleure approche La meilleure façon de résoudre les défauts dans les tests est de capturer les captures d'écran en cas d'échec et de travailler dessus. Un cadre de test doit être conçu pour gérer tous ces scénarios de cas extrêmes


0 commentaires

0
votes

Merci les gars, je pourrais résoudre le problème

Étapes suivies 1) Exception d'élément périmé: Scénario: Sur la base d'un critère de recherche, la table des matières se chargerait avec le bouton Modifier et supprimer. La recherche était lente et le bouton des éléments à modifier devenait obsolète Solution: utiliser l'exemple de code d'attente personnalisé ci-dessous à partir d'articles précédents et le mettre en veille a fonctionné

public void getVisibilityAllTableAddressBook() 
{
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.cssSelector("#data-table-items"))));

}

Le code ci-dessous a été utilisé précédemment mais n'a pas fonctionné

public static void customewait(int seconds)
    {        Date start = new Date();
             Date end = new Date();
             while(end.getTime() - start.getTime() < seconds * 1000){
                 end = new Date();
             }
    }


0 commentaires