Question

D'accord, peut-être qu'il me manque quelque chose, mais je ne vois vraiment pas l'intérêt de Sélénium. Quel est l’intérêt d’ouvrir le navigateur avec du code, de cliquer sur des boutons avec du code et de rechercher du texte avec du code? J'ai lu le site Web et je vois qu'en théorie, il serait bien de tester automatiquement vos applications Web, mais cela ne prend pas beaucoup plus de temps pour écrire tout ce code plutôt que de simplement cliquer et vérifier visuellement que tout fonctionne. ?

Je ne comprends pas ...

Était-ce utile?

La solution

Il vous permet d’écrire des tests fonctionnels dans votre "unité". cadre de test (le problème est de nommer le plus tard).

Lorsque vous testez votre application via le navigateur, vous testez généralement le système entièrement intégré. Considérez que vous devez déjà tester vos modifications avant de les valider (tests de fumée), vous ne voulez pas les tester manuellement encore et encore.

Quelque chose de vraiment sympa, c’est que vous pouvez automatiser vos tests de fumée, et l’AQ peut les augmenter. Assez efficace, car cela réduit le dédoublement des efforts et rapproche toute l’équipe.

Ps comme toute pratique que vous utilisez la première fois, elle a une courbe d’apprentissage, elle prend donc généralement plus de temps. Je vous suggère également de consulter le modèle Objet de page pour vous aider à conserver les tests. propre.

Mise à jour 1: notez que les tests exécutent également le javascript sur les pages, ce qui facilite le test des pages très dynamiques. Notez également que vous pouvez l'exécuter avec différents navigateurs afin de pouvoir vérifier les problèmes entre navigateurs (du moins sur le plan fonctionnel, car vous devez toujours vérifier le visuel).

Notez également qu'à mesure que le nombre de pages couvertes par les tests augmente, vous pouvez créer rapidement des tests avec des cycles d'interactions complets. En utilisant le modèle d'objet de page, ils ressemblent à:

   LastPage aPage = somePage
      .SomeAction()
      .AnotherActionWithParams("somevalue")
      //... other actions
      .AnotherOneThatKeepsYouOnthePage(); 
  // add some asserts using methods that give you info
  // on LastPage (or that check the info is there).
  // you can of course break the statements to add additional 
  // asserts on the multi-steps story.

Il est important de comprendre que vous y allez progressivement. S'il s'agit d'un système déjà construit, vous ajoutez des tests pour les fonctionnalités / modifications sur lesquelles vous travaillez. Ajout de plus en plus de couverture en cours de route. En mode manuel, vous masquez généralement ce que vous n'aviez pas testé. Par conséquent, si vous apportez une modification qui affecte chaque page et que vous vérifiez un sous-ensemble (le temps ne le permet pas), vous savez quels tests vous avez réellement testés et le contrôle qualité peut fonctionner. là (j'espère en ajoutant encore plus de tests).

Autres conseils

C’est une chose commune à propos des tests unitaires en général. "J'ai besoin d'écrire deux fois plus de code pour le test?" Les mêmes principes s'appliquent ici. Le gain est la possibilité de changer votre code et de savoir que vous ne cassez rien.

Vous pouvez répéter le test SAME plusieurs fois.

Si votre application compte même plus de 50 pages et que vous devez effectuer des constructions fréquentes et la tester contre un nombre X de navigateurs majeurs, cela n'a aucun sens.

Imaginez que vous avez 50 pages, toutes avec 10 liens chacune, et certaines avec des formulaires à plusieurs étapes qui vous obligent à les parcourir, en fournissant environ 100 ensembles d'informations différents pour vérifier qu'ils fonctionnent correctement avec tous les numéros de carte de crédit. , toutes les adresses dans tous les pays, etc.

C'est pratiquement impossible à tester manuellement. Cela devient tellement sujet aux erreurs humaines que vous ne pouvez pas garantir que les tests ont été faits correctement, peu importe ce que les tests ont prouvé sur la chose testée.

De plus, si vous suivez un modèle de développement moderne, avec de nombreux développeurs travaillant tous sur le même site de manière déconnectée et distribuée (certains travaillent sur le site à partir de leur ordinateur portable alors qu’ils sont dans un avion, par exemple), alors les testeurs humains ne sera même pas capable d'y accéder, et encore moins d'avoir la patience de retester chaque fois qu'un même développeur essaie quelque chose de nouveau.

Quelle que soit la taille de votre site Web, les tests DOIVENT être automatisés.

Le point est le même que pour n'importe quel type de test automatisé: l'écriture du code peut prendre plus de temps que "cliquer simplement et vérifier visuellement que tout fonctionne", peut-être 10 ou même 50 fois plus.

Mais toute application non triviale devra être testée plus de 50 fois au final, et les tests manuels sont une corvée ennuyeuse qui sera probablement omise ou mal faite sous pression, ce qui fera que des bugs resteront inconnus jusqu’à tout juste (ou après). des échéances importantes, qui entraînent des sessions de codage nocturnes stressantes ou même une perte monétaire totale en raison de pénalités contractuelles.

Selenium (ainsi que des outils similaires, tels que Watir) vous permet d'exécuter des tests sur l'interface utilisateur de votre application Web de manière à ce que les ordinateurs soient performants: des milliers de fois pendant la nuit ou quelques secondes après chaque enregistrement source. (Notez qu’il existe de nombreux autres outils de test d’interface utilisateur pour lesquels les humains sont bien meilleurs, notamment en remarquant que quelque chose de bizarre qui n’est pas directement lié au test est faux.)

Il existe d'autres moyens d'impliquer l'intégralité de la pile de votre application en consultant le code HTML généré au lieu de lancer un navigateur pour le rendre, tel que Webrat et Mécaniser . La plupart d'entre eux ne disposent pas d'un moyen d'interagir avec des interfaces utilisateur lourdes en JavaScript; Le sélénium vous a quelque peu couvert ici.

Selenium enregistre et réexécute tous les clics et tapages manuels effectués pour tester votre application Web. Encore et encore.

Au fil du temps, des études sur moi-même m'ont montré que j'avais tendance à faire moins de tests et à commencer à en sauter ou à les oublier.

Au lieu de cela, Sélénium prendra chaque test, exécutez-le. S'il ne vous renvoie pas ce que vous attendez, il peut vous en informer.

Il y a un coût en temps initial pour enregistrer tous ces tests. Je le recommanderais comme des tests unitaires - si vous ne l'avez pas déjà, commencez à l'utiliser avec les parties les plus complexes, les plus sensibles ou les plus à jour de votre code.

Et si vous enregistrez ces tests en tant que classes JUnit, vous pouvez les réexécuter à votre guise, dans le cadre de votre construction automatisée ou dans le test de charge d'un homme pauvre avec JMeter.

Dans un travail précédent, nous avions l'habitude de tester notre application Web. Si l'apparence de l'application Web change, les tests n'ont pas besoin d'être réécrits. Les tests de type enregistrement et relecture doivent tous être refaits.

Pourquoi avez-vous besoin de sélénium? Parce que les testeurs sont des êtres humains. Ils rentrent chez eux tous les jours, ne peuvent pas toujours travailler les week-ends, prendre des maladies, prendre des congés, prendre des vacances de temps en temps, s'ennuyer à faire des tâches répétitives et ne pas toujours compter sur eux quand vous en avez besoin.

Je ne dis pas que vous devriez vous débarrasser des testeurs, mais un outil de test d'interface utilisateur automatisé complète les testeurs de système.

Il s’agit de la possibilité d’automatiser ce qui était avant un test manuel et fastidieux. Oui, il faut du temps pour écrire les tests, mais une fois écrits, ils peuvent être exécutés aussi souvent que l'équipe le souhaite. Chaque fois qu'ils sont exécutés, ils vérifient que le comportement de l'application Web est cohérent. Selenium n'est pas un produit parfait, mais il est très efficace pour automatiser les interactions réalistes de l'utilisateur avec un navigateur.

Si vous n’aimez pas l’approche Selenium, vous pouvez essayer HtmlUnit , je la trouve plus utile et facile à intégrer dans les tests unitaires existants.

Pour les applications dotées d'interfaces Web riches (comme de nombreux projets GWT), Selenium / Windmill / WebDriver / etc est le moyen de créer des tests d'acceptation. Dans le cas de GWT / GXT, le code d'interface utilisateur final est en JavaScript; par conséquent, la création de tests d'acceptation à l'aide de scénarios de test junit normaux est en principe hors de question. Avec Selenium, vous pouvez créer des scénarios de test correspondant aux actions réelles des utilisateurs et aux résultats attendus.

D'après mon expérience avec Selenium, il peut révéler des erreurs dans la logique de l'application et dans l'interface utilisateur (si vos scénarios de test sont bien écrits). Faire face aux frontaux AJAX nécessite un effort supplémentaire, mais cela reste réalisable.

Je l'utilise pour tester des formulaires de plusieurs pages, car cela évite d'avoir à taper la même chose encore et encore. Et avoir la possibilité de vérifier si certains éléments sont présents est excellent. Encore une fois, en utilisant le formulaire comme exemple, votre test de sélénium final pourrait vérifier si quelque chose comme: "Merci, M. Rogers, d'avoir commandé ...". apparaît à la fin du processus de commande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top