Un ouvrier au lieu d'un testeur? Vaut-il la peine d'étudier le sélénium en 2020?



Suite de l'entretien «Qui d'autre a besoin de sélénium? Quelqu'un utilise-t-il BDD en 2020? Machine Learning chez Selenium »

Le dialogue a impliqué:

  • Vsevolod Brekelov et Daria Manukhina (comité de programme de la conférence de Heisenbug);
  • Anna Chernyshova, développeur de la bibliothèque Akita et du nouvel outil Healenium ;
  • Ivan Krutov, développeur de Selenoid .

À la fin de l'article, vous pouvez trouver la conclusion partagée par Ivan et Anna, à savoir la réponse à la question: "Dois-je étudier le sélénium ou choisir autre chose?". De plus, nous avons réussi à parler de:

  • Marker Man et découvrez qui il est;
  • Employés précieux dans les entreprises;
  • Boîte à outils de testeur;
  • Infrastructure pour les tests de sélénium;
  • Concurrents de sélénium.

Si vous n'avez pas lu la première partie de l'interview, voici quelques captures d'écran de ce dont les lecteurs se souviennent le plus:



l'article précédent a coupé court à la question de l'apprentissage automatique. Commençons par lui.

- Si l'apprentissage automatique est vraiment si cool, quelle partie restera vivante pour les gens, les testeurs?

Anya : Au début, tout devra être validé d'une manière ou d'une autre. Cela fonctionne bien lorsque nous avons une réponse claire à la question que résout l'apprentissage automatique: oui ou non. En fonction de ces oui ou non, la machine prend une décision. Quand il n'y a pas de réponse claire à cette question, elle est déjà nécessaire là-bas ...

- Un homme marqueur spécial.

Ivan : Tout apprentissage automatique se compose de deux parties.

Tout d'abord, c'est la formation elle-même, lorsque l'algorithme reçoit une sorte d'échantillon des données correctes sur lesquelles il apprend, puis l'application de l'algorithme. Le stade d'application de l'algorithme est lorsque la machine nous aide à résoudre un grand nombre de problèmes en se basant sur les solutions correctes à un petit nombre de problèmes. Au stade actuel, la formation de ces algorithmes sera en tout cas du côté humain.

Deuxièmement, l'apprentissage automatique concerne principalement la recherche, tous les moteurs de recherche sur Internet y sont très actifs. Afin d'améliorer la qualité de ces algorithmes, il faut traiter d'énormes quantités de données. Le rôle d'une personne peut être réduit à soutenir une infrastructure incroyablement grande qui analysera efficacement ces données. Peut-être que l'algorithme lui-même fera le travail lui-même. Mais pour assurer toutes les conditions pour que cet algorithme puisse fonctionner et qu'il soit de bonne qualité, ce sera toujours du travail humain.
Fournir toutes les conditions pour que l'algorithme puisse fonctionner et qu'il soit de bonne qualité, ce sera toujours du travail humain.
Par exemple, pour former un grand nombre, un bon algorithme, vous avez besoin d'un cluster distribué de calculs, d'une sorte de MapReduce fou . Pour que cela fonctionne, vous avez toujours besoin de personnes qui le configurent et le cherchent à fonctionner normalement, ou qui l'écrivent également spécifiquement pour cette tâche. L'apprentissage automatique n'est pas un sujet très simple. Plus vous voulez qu'il fonctionne mieux, plus vous devez investir. Chaque prochain pourcentage de qualité, c'est une sorte d'énorme augmentation incroyable non pas en pourcentage, mais par ordre de grandeur.
Au stade initial, vous pouvez le démarrer sur votre ordinateur portable, puis, mieux vous voulez qu'il fonctionne, plus vous devez investir.
- Autrement dit, même avec de telles machines, nous ne nous éloignerons toujours pas des tests en cours sur une sorte d'infrastructure, sur certaines machines. Ce CI / CD avec des tests n'ira nulle part. Par conséquent, par exemple, Selenoid ne sera certainement pas une chose du passé, mais la même chose ne peut pas être dite pour l'IDE Selenium.

Vanya : Selenium IDE n'est plus sujet à l'extinction, mais au fait qu'il deviendra un outil plus niche, comme tout ce que j'ai dit auparavant. Il a des équipes à qui c'est vraiment pratique. Quelqu'un est à l'aise d'écrire des autotests à partir de zéro, quelqu'un est à l'aise pour enregistrer et reproduire. Je ne suis pas enclin à tout enterrer comme ça, il me semble que c'est un processus évolutif.

- Hé bien oui. "Cobol" est même en test, il s'avère.

Vanya : Je parle de mainframes! Quelqu'un Cobol, les mainframes et tout fonctionne. Il me semble que nous parlons davantage de toutes sortes de problèmes technologiques, et il y a une autre nuance. Au final, tout se résume à de l'argent quand tout commence à gonfler.

Si tout a en quelque sorte augmenté énormément pour nous, par exemple, les coûts de l'apprentissage automatique, alors à un moment donné, la question se posera généralement: "Ces dépenses sont-elles généralement justifiées?"

Quelle est notre tâche si nous utilisons du sélénium? Tester. Il peut s'avérer qu'à un moment donné, les coûts de ce développement d'apprentissage automatique seront plus élevés que l'embauche de personnes qui s'assoient et appellent leurs mains.

Pourquoi les équipes existent-elles toujours, y a-t-il des tests manuels, des tests automatiques? Pourquoi les testeurs manuels n’ont-ils pas disparu? Parce qu'il y a une certaine classe de tâches qui est moins chère à prendre et pour les gens de la tester avec leurs mains. C'est moins cher que d'écrire des autotests. De toute façon, tout dépend de l'économie et il n'y a pas de solution.

Si tout a en quelque sorte augmenté énormément pour nous, par exemple, les coûts de l'apprentissage automatique, alors à un moment donné, la question générale se posera: "Ces dépenses sont-elles généralement justifiées?"


Qu'est-ce qu'un «employé utile»?


"Mais la rapidité avec laquelle un produit atteint un utilisateur affecte l'économie." L'automatisation tente simplement de raccourcir le délai de livraison pour augmenter les bénéfices et l'avantage concurrentiel, non?

Vanya : D'accord. Et un employé qui perçoit les activités de son entreprise, comme s'il s'agissait de son entreprise personnelle. Il compte l'argent, pense au moins à ce sujet, ne les compte pas en unités réelles, mais pense que cela nous coûtera probablement moins cher. Un tel employé sera toujours précieux pour une entreprise qui le dira à chaque réunion: «Écoutez, les gars, nous économiserons maintenant, par exemple, et donc nous obtiendrons plus de bénéfices.» Même s'il est développeur junior.

- Il semble que j'ai rarement rencontré de telles personnes sur le marché.

Vanya : Eh bien! Ils sont peu nombreux.Peu de gens pensent .

- Il s'avère que tout le monde est habitué à résoudre le problème et avec l'ensemble d'outils ou les approches qui existent déjà, mais peu se demandent s'ils sont vraiment optimaux du point de vue de l'entreprise.

Anya : Cela dépend du développement de l'organisation, de la culture qu'elle promeut pour ses employés. J'ai récemment lu le livre "Découvrir les organisations du futur" , il existe différentes catégories d'organisations, elles sont divisées par couleur.

Les organisations du futur sont des entreprises turquoise, où chaque employé est malade et inquiet afin que nous fassions le plus grand bien aux utilisateurs, et que tout le monde soit inclus dans le processus. Il n'y a pas de gradation stricte de ce qu'est la gestion, il y a des employés inférieurs, des employés seniors, chacun a son propre domaine de responsabilité, pour ainsi dire, cela ne semble aller nulle part dans d'autres domaines connexes - ce n'est pas le cas. La responsabilité entre tous les employés est partagée. Si une entreprise commence à s'orienter dans cette direction, elle commence à promouvoir des valeurs similaires auprès de ses employés, et même si une personne qui n'a pas une idée dans sa tête que c'est ainsi qu'il faut le faire, racine pour cette entreprise, pour les affaires, regarde ses collègues, commence à d'étudier plus avant, s'il change de lieu de travail, alors cela aussi commencera à se développer. Cela vient du nombre d'organisations similaires qui sont maintenant,et combien apparaîtront.

Utilisation du sélénium en 2020


- Comment le sélénium est-il utilisé maintenant?

Vanya : Il y a plusieurs applications de base dont j'ai entendu parler. La première chose que je sais, ce sont les tests fonctionnels. C'est son utilisation prévue: pour ouvrir un site, exécuter certains scripts utilisateur, vérifier que tout fonctionne comme il se doit.
La deuxième chose que j'ai entendue est l'utilisation des moteurs de recherche (exploration de pages sur Internet et analyse de leur contenu, captures d'écran). Cela vous permet de comprendre si ce site est bon ou mauvais.

Anya : Vous pouvez également l'utiliser comme test de charge d'interface utilisateur.

Vania: C'est un peu cher. Il y a probablement des gens qui font ça, mais en principe c'est cher. Au moins, ce n'est pas une application, pas seulement des tests fonctionnels. Il existe encore diverses tâches qui nécessitent un travail simplement automatisé avec le navigateur. Certains utilisent cette approche, par exemple, pour envoyer du spam.

En fait, Selenium n'est qu'une API qui permet au code de fonctionner avec les navigateurs, c'est tout. N'importe quelle tâche pour laquelle un tel outil convient peut l'utiliser, pas nécessairement tester, tout peut l'être.

Boîte à outils de testeur


- Pour résoudre les problèmes d'autotest, quels outils en plus du sélénium les ingénieurs choisissent-ils habituellement? Ils prennent Java, Allure, Selenoid, Selenide, tournent le tout ensemble et obtiennent une bonne mitrailleuse pour résoudre leurs tâches quotidiennes. Ou y a-t-il autre chose?




Anya : Ici, vous devez comprendre les niveaux de cette approche de l'automatisation. À chaque niveau, vous pouvez remonter un instrument.

Le premier niveau consiste à choisir sur quoi écrire; est-ce Java, .NET, JS? J'ai plus travaillé avec Java et j'en parlerai. En fait, sur quoi construire le projet - Java. Vous pouvez l'assembler en utilisant Maven ou Gradle. Maintenant, Maven a un surnom de pom qui est cool dans YAML, il est pratique de travailler avec lui.

Ensuite, choisissez comment exécuter ces tests - il s'agit de JUnit ou TestNG. J'ai récemment travaillé avec JUnit 5.

Choisissez ensuite le niveau d'interaction avec les éléments. C'est du sélénium, ou une sorte d'enveloppe, par exemple, du séléniure. Avec lui, vous pouvez raccourcir le temps d'écriture des tests.

Ensuite, vous devez vérifier les résultats du test. Voici une très large sélection d'outils. Vous pouvez utiliser les mêmes assertions de JUnit 5 , elles y sont maintenant très commodément faites. Ou la bibliothèque Hamcrest , je l'aime vraiment. Ou AssertJ est également une chose pratique. Lorsque vous sélectionnez ce runner pour exécuter les tests, vous devez penser à l'exécution parallèle des tests, à la façon dont il sera mieux organisé. Dans JUnit 5, c'est pratique; l'annotation y est simplement effectuée.

Ensuite, le test écrit lui-même, il pourrait s'agir d'un emballage BDD, le même concombre. Si vous choisissez JUnit, des éléments supplémentaires lui seront nécessaires.

Plus une infrastructure. Je travaille avec Selenoid récemment, c'était le plus pratique pour moi.

Plus de rapports.

- Eh bien, les rapports sont, bien sûr, Allure ?

Anya : Eh bien, ou ReportPortal .
Je peux expliquer quand Allure est meilleur, quand ReportPortal est meilleur. L'attrait est bon quand un petit projet, alors idéalement il entre généralement. S'il s'agit d'une sorte de grand projet, où 100 500 000 tests ou il s'agit d'une solution d'entreprise, ou s'il est entendu qu'il devrait y avoir beaucoup de tests et qu'ils devraient tous s'additionner dans une sorte de rapport, alors ReportPortal est bon, il est plus pratique de traiter les résultats d'un grand nombre d'entre eux tests. Lorsqu'il y a peu de tests, alors Allure est plus pratique.

Vania: Je ne sais pas si vous savez ou non que j'ai également participé au premier Allure. Au départ, Allure est apparu sur Yandex, comme tout le monde le sait, mais à la fin, il s'est avéré que les gars sont allés séparément pour le faire. En conséquence, ce ne sont que les fonctionnalités de ReportPortal, toutes sortes de choses complexes: le stockage de l'historique, etc., ils ont commencé à le faire en tant que produit commercial distinct, donc cela n'apparaît pas dans l'Allure habituel. Et ils essaient de le vendre. Si vous voulez un rapport open source pour un grand nombre de tests, alors probablement ReportPortal, bien que moi-même je ne l'ai jamais essayé. Pour les petits projets en quelque sorte Allure, il me semble, c'est pour les yeux.

Tous ces outils ont été écrits pour des tests complexes avec des scénarios assez longs, où il était nécessaire de bien visualiser toutes les étapes qui sont effectuées pendant le test. Ces rapports ne conviennent pas particulièrement aux tests unitaires, car il n'y a que la réponse «oui / non», est tombé - n'est pas tombé.

Infrastructure pour les tests de sélénium


- Vanya, pouvez-vous nous en dire plus sur la partie serveur et à quelle fréquence les gens doivent-ils la toucher? (aux ingénieurs QA, DevOps).


Image: Unsplash

Vanya : Quel est le côté serveur? Il doit s'agir d'une sorte d'application Web qui implémente la norme Selenium. Afin que nous puissions envoyer des commandes selon les normes Selenium à notre client, et ce serveur effectue toutes les vérifications que nous voulons faire pour nous. Pour Selenium, il existe désormais plusieurs outils qui l'implémentent.

Il existe le même Selenium regular old, Selenium ou Selenium Grid, ou Selenium Server - c'est une application écrite en Java, qui est la plus ancienne et la plus simple en termes de fonctionnalités. Il y a trois ans du standard Selenium, du Selenium Grid, le projet Zalenium a bourgeonné. Il sait déjà comment exécuter des navigateurs dans des conteneurs Docker. Ce projet met en œuvre l'ensemble de la norme, prend en charge la possibilité d'enregistrement vidéo, la possibilité de stocker des journaux, a une interface meilleure que le sélénium standard.

Nous avons fait un projet à partir de zéro appelé Selenoid . Il s'agit également d'une implémentation totalement indépendante du protocole Selenium. Il est écrit en Go, l'installation de Java n'est pas requise, rien n'est nécessaire, il démarre juste dans le binaire et a besoin de Docker.

En plus de l'open source, nous faisons une implémentation pour Kubernetes, c'est Moon . Il s'agit également d'une implémentation complètement indépendante, qui est nécessaire si vous disposez de Kubernetes. Nous avons souligné que le déploiement de l'infrastructure était simple avec quelques équipes. Les gens aiment ça parce que vous avez intégré deux équipes et que tout fonctionne déjà pour vous.

Il existe toutes sortes de plates-formes en ligne pour Selenium, si vous ne souhaitez pas déployer Selenium lui-même. Vous pouvez utiliser les services cloud, ils sont assez chers, mais néanmoins ils le sont, ils sont assez populaires.

Anya : J'avais de l'expérience avec SauceLabs , tout y est également très pratique. Vous indiquez simplement dans quel navigateur exécuter, ils prennent même en charge les tests mobiles. Et vous lancez. Mais ils sont chers.

Test de navigateur croisé et de navigateur mobile


- Comment, du point de vue de la compatibilité entre les navigateurs et des téléphones portables, Selenium fonctionne-t-il et y a-t-il des problèmes avec l'infrastructure? Je sais que certaines personnes testent certains navigateurs sur téléphones mobiles. Heureusement, je ne l'ai pas testé avec mes mains au sélénium, je ne sais pas combien il est difficile de tout mettre en place.

Vanya : C'est hémorroïde et assez cher. Le but est de tester que si nous ouvrons notre application sur un téléphone, sur un mobile Chrome, tout fonctionne de la même manière pour nous. Naturellement, nous voulons, comme avec les navigateurs de bureau, le faire avec du code.

L'idée simple initiale est d'acheter des téléphones de différents modèles, de les mettre sur la table. Il existe des outils prêts à l'emploi, par exemple Appiumqui mettent en œuvre la norme Selenium. Il s'agit également d'une implémentation de l'extension Selenium, qui vous permet de travailler uniquement avec un mobile. Initialement, cela a été fait uniquement pour la ferme de vrais téléphones et tablettes. Le problème est que seule l'expérience de fonctionnement de ces fermes de téléphones montre que cela coûte très cher. Il tombe constamment en panne, vous devez remplacer ces téléphones, leurs batteries gonflent, cela nécessite des systèmes assez spéciaux qui chargent ces téléphones, vous devez y mettre des mises à jour, assurez-vous que rien ne casse là-bas.

Maintenant, tout progresse lentement vers le lancement de tout dans les émulateurs. Il existe des programmes spéciaux - des émulateurs qui montrent exactement la même chose qu'un utilisateur voit sur son téléphone ou sa tablette sur l'écran d'un ordinateur ou d'un serveur ordinaire. Il existe des émulateurs pour Android et iOS. Le problème est que, du point de vue d'Android, ce sont des machines virtuelles, de tels émulateurs ne peuvent être exécutés sur aucun matériel. Si vous voulez des émulateurs Android, vous devez prendre des serveurs de fer, c'est cher.

Si vous voulez tester des émulateurs pour iOS, vous devez prendre du matériel Apple, c'est-à-dire MacMini, MacPro, MacBook ou quelque chose comme ça, c'est aussi cher. Cela est dû aux restrictions de licence d'Apple. Par conséquent, les tests sur mobile sont en principe possibles, il est clair comment faire l'infrastructure. Même dans Docker, vous pouvez exécuter Android, mais c'est assez cher. Si les gens veulent faire cela, ils doivent réfléchir sérieusement.

La tâche principale des tests sur mobile est de trouver des bogues qui ne jouent que sur mobile. Il existe différentes façons de le rendre moins cher. Il est possible de lancer des navigateurs de bureau comme Chrome, dans lesquels l'agent utilisateur est piqué, la résolution d'écran souhaitée est piquée. La décision de tester ou non sur de vrais émulateurs, sur les téléphones, doit être prise selon que vous pouvez attraper des bogues uniquement sur l'émulateur ou sur le téléphone.
La décision de tester sur de vrais émulateurs ou sur des téléphones doit être prise selon que vous pouvez attraper des bogues uniquement sur l'émulateur ou sur le téléphone.

Concurrents de sélénium


- Soit dit en passant, il existe divers outils comme Puppeteer, Playwright, qui vous permettent d'émuler avec précision et d'effectuer des tests inter-navigateurs, y compris dans les navigateurs mobiles. Peut-être que pendant longtemps, ils ont tous déménagé ou transplanté?

Vanya : Frontenders, personne d'autre n'a bougé.

Anya : Ce sont des choses intéressantes, mais elles ont des limites en termes de compatibilité entre les navigateurs. Cypress pour Firefox semble être mis à jour bientôt. Vous pouvez écrire des tests très cool très rapidement, tout est pratique, mais vous n'êtes limité que par le Chrome.

Vanya : Commençons par Cypress . En 2004-2005, Selenium a fonctionné comme suit.

Le navigateur a été lancé, une extension spéciale a été chargée, dans laquelle les commandes d'automatisation du navigateur ont été poussées. Après 15 ans, des gars sont apparus qui l'ont regardé. Selenium a abandonné cette approche, car tout ne peut pas être fait à l'aide d'une extension. Depuis Javascript, il n'est pas possible de tout exécuter dans le navigateur; vous ne pouvez pas accéder aux fichiers sur le système de fichiers. Selenium est passé à une approche native, a commencé à écrire des binaires séparés, séparés du navigateur. 15 ans se sont écoulés. Les gars de JavaScript ont créé un outil similaire.

Le marionnettiste est exactement le même. Puppeteer est Google Chrome, Chromium, qui implémente un protocole spécial pour travailler avec ce panneau de débogage. Chrome a un panneau de débogage pour que vous puissiez regarder les messages dans la console, les requêtes réseau, etc.

- Les outils de développement sont bien sûr très cool.

Vanya : Oui, c'est pratique pour le développeur. Il s'est avéré que cette chose interagit avec le navigateur à l'aide d'un protocole spécial. L'idée principale est de ne pas cliquer sur la souris dans ce protocole, mais d'envoyer des commandes de la même manière que dans Selenium. Les gars viennent d'écrire une bibliothèque Javascript qui implémente le protocole.

Anya : Ces outils, il me semble, peuvent être bien adaptés aux tests de composants, que les frontends couvriraient eux-mêmes. Je connais de tels cas d'application, ils se sont très bien passés à droite.

Vania: Dans l'ensemble, ces outils sont bons, ils sont normaux. Ils ne sont que des créneaux, ils sont bien adaptés aux fournisseurs frontaux, car ils ont leurs propres tâches, ils exécutent rapidement certains tests localement, mais le problème est qu'ils ne couvrent pas les exigences qui existent déjà.

Il y a un tas de tests, par exemple, écrits en Java - un volume fou, ils doivent être exécutés rapidement, ils doivent être rapidement mis à l'échelle et ainsi de suite. Ce problème n'est pas résolu.

Je ne dis pas que ces outils sont mauvais. En fait, même les équipes qui fabriquent Cypress, ou les équipes qui fabriquent Puppeteer, disent que c'est la même chose que Selenium. Il y a Gleb Bakhmutovqui fait Cypress, on lui a demandé: Cypress Selenium est-il ou non? Il a répondu qu'il s'agit d'un outil de niche normal pour les développeurs front-end, et je suis d'accord. Il me semble qu'ils ont une sorte de fonctionnalité commune, résolvent un problème commun, mais ils ont toujours différents domaines d'application.

- Les gars, vous avez une grande expérience de l'utilisation de Selenium, si vous venez de commencer les tests d'interface utilisateur maintenant, quel outil choisiriez-vous maintenant? Par où est-il préférable de commencer?

Anya : Je commencerais par le sélénium de toute façon. Parce que c'est une norme.

- Java et sélénium, non?

Anya : Eh bien, vous ne pouvez pas Java, vous pouvez .NET, Python, mais toujours Selenium pour eux, car il a vécu, vit et vivra.

Le sélénium a vécu, vit et vivra.


Ivan : Supposons que nous devions couper une planche et qu'une personne soit charpentière.
Tout d'abord, il doit apprendre à travailler avec quelque chose de standard, à apprendre à scier avec une scie, puis à prendre une sorte de machine-outil spécialisée complexe.

Le sélénium est un outil simple qui peut être utilisé par tout le monde. Il y a 100 500 millions de personnes qui vous diront comment scier une bûche avec une scie. Quelque chose de niche, d'une part, ce sera cool de couper dans ce créneau, mais pour les tâches générales, le sélénium est toujours le meilleur qui soit en ce moment.

Anya : Le sélénium est une base que vous devez connaître pour pouvoir continuer à développer et y ajouter des petits pains intéressants.

- Merci! J'espère que les informations reçues seront utiles à nos lecteurs.

Nous vous rappelons que la conférence Heisenbug 2020 Piter se tiendra en ligne . Là, vous pouvez parler avec Vanya et Anya et en savoir plus sur Healenium, Selenoid et l'utilisation du protocole Chrome DevTools dans le cluster Kubernetes.

Pour ceux qui veulent élargir leurs horizons et assister à plus d'une conférence, mais immédiatement 8, nous avons préparé quelque chose .

All Articles