{"id":78676,"date":"2020-04-21T07:42:22","date_gmt":"2020-04-21T05:42:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya"},"modified":"2020-04-21T07:42:22","modified_gmt":"2020-04-21T05:42:22","slug":"devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d'une infrastructure d'automatisation des tests \u00e0 partir de z\u00e9ro","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Partie 1 : Web \/ Android<\/h1>\n<p>\n <u>Remarque<\/u>: <i>cet article est une traduction en fran\u00e7ais de l'article original\u00a0<\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@altunin.alexey.a\/devops-tools-are-not-only-for-devops-building-test-automation-infrastructure-from-scratch-18e351dde938?source=friends_link&amp;sk=54dcbf6ab96c5592d093b50e441f942e\"><i>\u00ab Les outils DevOps ne sont pas r\u00e9serv\u00e9s \u00e0 DevOps. Construire une infrastructure d'automatisation des tests \u00e0 partir de z\u00e9ro \u00bb.<\/i><\/a><\/noindex><i> Cependant, toutes les illustrations, r\u00e9f\u00e9rences, citations et termes sont conserv\u00e9s dans leur langue d'origine pour \u00e9viter toute d\u00e9formation de sens lors de la traduction en fran\u00e7ais. Je vous souhaite une bonne \u00e9tude\u00a0!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/3d2ffb8331713a18755213cafac02144.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n Actuellement, le m\u00e9tier DevOps est l'un des plus recherch\u00e9s dans l'industrie informatique. Si vous consultez les sites web populaires de recherche d'emploi et appliquez un filtre sur les salaires, vous constaterez que les offres d'emploi li\u00e9es \u00e0 DevOps figurent en t\u00eate de liste. Cependant, il est important de comprendre que cela s'applique principalement au poste de 'Senior', ce qui implique que le candidat poss\u00e8de un haut niveau de comp\u00e9tences ainsi qu'une connaissance des technologies et des outils. Cela s'accompagne \u00e9galement d'un haut degr\u00e9 de responsabilit\u00e9, li\u00e9 \u00e0 un fonctionnement ininterrompu de la production. Cependant, nous avons tendance \u00e0 oublier ce qu'est DevOps. \u00c0 l'origine, ce n'\u00e9tait pas une personne ou un d\u00e9partement sp\u00e9cifique. Si nous cherchons des d\u00e9finitions de ce terme, nous trouverons de nombreux substantifs \u00e9l\u00e9gants et corrects, tels que m\u00e9thodologie, pratiques, philosophie culturelle, ensemble de concepts, etc.<\/p>\n<p>Ma sp\u00e9cialit\u00e9 est ing\u00e9nieur en automatisation des tests (QA automation engineer), mais je consid\u00e8re qu'elle ne doit pas \u00eatre seulement li\u00e9e \u00e0 l'\u00e9criture de tests automatis\u00e9s ou \u00e0 la conception de l'architecture d'un framework de tests. En 2020, les connaissances en infrastructure d'automatisation sont \u00e9galement n\u00e9cessaires. Cela permet d'organiser le processus d'automatisation de mani\u00e8re autonome, depuis le lancement des tests jusqu'\u00e0 la communication des r\u00e9sultats \u00e0 toutes les parties prenantes conform\u00e9ment aux objectifs fix\u00e9s. En cons\u00e9quence, les comp\u00e9tences en DevOps sont un facteur essentiel pour accomplir ce travail. Et tout cela est tr\u00e8s bien, mais malheureusement, il y a un probl\u00e8me (<i>spoiler : cet article tente de simplifier ce probl\u00e8me<\/i>). Il s'agit du fait que DevOps est complexe. Et c'est \u00e9vident, car les entreprises ne paient pas cher pour quelque chose qui est facile \u00e0 faire\u2026 Dans le monde de DevOps, il existe un grand nombre d'outils, de termes et de pratiques \u00e0 ma\u00eetriser. Cela est particuli\u00e8rement difficile au d\u00e9but de la carri\u00e8re et d\u00e9pend de l'exp\u00e9rience technique accumul\u00e9e.<\/p>\n<p><img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSource : <noindex><a rel=\"nofollow\" href=\"http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html\"> http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html<\/a><\/noindex><\/p>\n<p>Nous allons donc conclure avec cette introduction et nous concentrer sur l'objectif de cet article.\u00a0<\/p>\n<h3>De quoi parle cet article<\/h3>\n<p>\nDans cet article, je vais partager mon exp\u00e9rience dans la cr\u00e9ation d'une infrastructure d'automatisation des tests. Il existe de nombreuses sources d'information sur les diff\u00e9rents outils et leur utilisation sur Internet, mais je voudrais les examiner exclusivement dans le contexte de l'automatisation. Je pense que de nombreux ing\u00e9nieurs en automatisation connaissent la situation o\u00f9 les tests d\u00e9velopp\u00e9s ne sont ex\u00e9cut\u00e9s et maintenus que par vous-m\u00eame. En cons\u00e9quence, les tests deviennent obsol\u00e8tes et vous passez du temps \u00e0 les mettre \u00e0 jour. De plus, au d\u00e9but de votre carri\u00e8re, il peut \u00eatre assez difficile de d\u00e9terminer quels outils devraient aider \u00e0 r\u00e9soudre ce probl\u00e8me, comment les choisir, les configurer et les maintenir. Certains testeurs se tournent vers DevOps (les personnes) et, soyons honn\u00eates, cette approche fonctionne. Dans de nombreux cas, cela peut \u00eatre la seule option, car nous n'avons pas de visibilit\u00e9 sur toutes les d\u00e9pendances. Mais, comme nous le savons, les DevOps sont des gars tr\u00e8s occup\u00e9s, car ils doivent penser \u00e0 l'infrastructure de toute l'entreprise, au d\u00e9ploiement, \u00e0 la surveillance, aux microservices et \u00e0 d'autres t\u00e2ches similaires en fonction de l'organisation\/de l'\u00e9quipe. Comme c'est souvent le cas, l'automatisation n'est pas une priorit\u00e9. Dans ce cas, nous devons essayer de faire tout ce qui est en notre pouvoir, du d\u00e9but \u00e0 la fin. Cela r\u00e9duira les d\u00e9pendances, acc\u00e9l\u00e9rera le flux de travail, am\u00e9liorera nos comp\u00e9tences et nous permettra d'avoir une vue d'ensemble de la situation.<\/p>\n<p>Cet article pr\u00e9sente les outils les plus demand\u00e9s et populaires et montre comment les utiliser pour construire, \u00e9tape par \u00e9tape, une infrastructure d'automatisation. Chaque groupe est repr\u00e9sent\u00e9 par des outils qui ont \u00e9t\u00e9 test\u00e9s sur la base d'exp\u00e9riences personnelles. Mais cela ne signifie pas que vous devez utiliser exactement les m\u00eames outils. Les outils eux-m\u00eames ne sont pas importants, ils apparaissent et deviennent obsol\u00e8tes. Notre t\u00e2che d'ing\u00e9nieur est de comprendre les principes de base : pourquoi avons-nous besoin de ce groupe d'outils et quelles t\u00e2ches pouvons-nous r\u00e9soudre gr\u00e2ce \u00e0 eux. C'est pourquoi, \u00e0 la fin de chaque section, je laisse des liens vers des outils similaires qui peuvent \u00eatre utilis\u00e9s dans votre organisation.<\/p>\n<h3>Ce que cet article ne couvre pas<\/h3>\n<p>\nJe le r\u00e9p\u00e8te encore, cet article n'est pas sur des outils sp\u00e9cifiques, donc il n'y aura pas d'extraits de code de la documentation ni de descriptions de commandes sp\u00e9cifiques. Mais \u00e0 la fin de chaque section, je laisse des liens pour une \u00e9tude approfondie.<\/p>\n<p>C'est fait pour la raison suivante :\u00a0<\/p>\n<ul>\n<li>ce mat\u00e9riel est tr\u00e8s facile \u00e0 trouver dans diverses sources (documentation, livres, cours vid\u00e9o);<\/li>\n<li>si nous commen\u00e7ons \u00e0 approfondir, il nous faudra \u00e9crire 10, 20, 30 parties de cet article (alors que le plan est de 2-3);<\/li>\n<li>je ne veux tout simplement pas perdre votre temps, car, peut-\u00eatre, vous souhaitez utiliser d'autres outils pour atteindre les m\u00eames objectifs.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Pratique<\/h3>\n<p>\nJ'esp\u00e8re vraiment que ce mat\u00e9riel sera utile pour chaque lecteur, et ne sera pas juste lu et oubli\u00e9. Dans tout apprentissage, la pratique est une composante tr\u00e8s importante. Pour cela, j'ai pr\u00e9par\u00e9<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> un d\u00e9p\u00f4t GitHub avec un guide \u00e9tape par \u00e9tape sur comment tout faire depuis le d\u00e9but<\/a><\/noindex>. Vous aurez \u00e9galement des devoirs pour vous assurer que vous n'avez pas simplement copi\u00e9 des lignes de commandes \u00e0 l'aveugle. <\/p>\n<h3>Plan<\/h3>\n<p><\/p>\n<p><strong>\u00c9tape<\/strong><br \/>\n<strong>Technologie<\/strong><br \/>\n<strong>Outils<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nEx\u00e9cution locale (pr\u00e9parer des tests de d\u00e9monstration web \/ android et les ex\u00e9cuter localement)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nSyst\u00e8mes de contr\u00f4le de version\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nConteneurisation<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<p><strong>5<\/strong><br \/>\nPlateformes cloud<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrchestration<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructure en tant que code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Structure de chaque section<\/h3>\n<p>\nPour maintenir le r\u00e9cit de mani\u00e8re visuelle, chaque section est d\u00e9crite selon le plan suivant :<\/p>\n<ul>\n<li>une br\u00e8ve description de la technologie,<\/li>\n<li>la valeur pour l'infrastructure d'automatisation,<\/li>\n<li>une illustration de l'\u00e9tat actuel de l'infrastructure,<\/li>\n<li>des liens pour l'\u00e9tude,<\/li>\n<li>des outils similaires.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Ex\u00e9cution locale des tests<\/h2>\n<p><\/p>\n<h3>Br\u00e8ve description de la technologie<\/h3>\n<p>\nC'est simplement une \u00e9tape pr\u00e9paratoire pour ex\u00e9cuter des tests de d\u00e9monstration localement et pour v\u00e9rifier qu'ils passent avec succ\u00e8s. Dans la partie pratique, Node.js est utilis\u00e9 mais le langage de programmation et la plateforme ne sont pas n\u00e9cessaires, vous pouvez utiliser ceux qui sont utilis\u00e9s dans votre entreprise.\u00a0<\/p>\n<p>Cependant, pour les outils d'automatisation, je recommande d'utiliser Selenium WebDriver pour les plateformes web et Appium pour la plateforme Android respectivement, car dans les \u00e9tapes suivantes, nous utiliserons des images Docker qui sont sp\u00e9cifiquement con\u00e7ues pour travailler avec ces outils. De plus, en se r\u00e9f\u00e9rant aux exigences dans les annonces d'emploi, ces outils sont les plus demand\u00e9s sur le march\u00e9.<\/p>\n<p>Comme vous l'avez peut-\u00eatre remarqu\u00e9, nous ne consid\u00e9rons que les tests web et Android. Malheureusement, iOS est une toute autre histoire (merci Apple). Je pr\u00e9vois de d\u00e9montrer les solutions et les pratiques li\u00e9es \u00e0 iOS dans les prochaines parties.<\/p>\n<h3>Valeur pour l'infrastructure d'automatisation<\/h3>\n<p>\nD'un point de vue infrastructurel, l'ex\u00e9cution locale n'a aucune valeur. Vous v\u00e9rifiez simplement que les tests fonctionnent sur la machine locale dans les navigateurs et simulateurs locaux. Mais c'est n\u00e9anmoins un point de d\u00e9part n\u00e9cessaire.<\/p>\n<h3>Illustration de l'\u00e9tat actuel de l'infrastructure<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Liens \u00e0 explorer<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/selenium.dev\/\">Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/appium.io\/docs\/en\/about-appium\/getting-started\/\">Appium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator\">\u00c9mulateur Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/tree\/master\/javascript\/node\/selenium-webdriver\/example\">Exemples GitHub de Selenium JS<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Exemples GitHub d'Appium JS<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Outils similaires<\/h3>\n<p><\/p>\n<ul>\n<li>n'importe quel langage de programmation que vous aimez, associ\u00e9 \u00e0 Selenium\/Appium - des tests;<\/li>\n<li>tous les tests;<\/li>\n<li>n'importe quel framework de test.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Syst\u00e8mes de contr\u00f4le de version (Git)<\/h2>\n<p><\/p>\n<h3>Br\u00e8ve description de la technologie<\/h3>\n<p>\n Il ne sera pas surprenant pour quiconque que je dise que le syst\u00e8me de contr\u00f4le de version est une partie extr\u00eamement importante de la d\u00e9veloppement, tant en \u00e9quipe qu'individuellement. En se basant sur diverses sources, on peut affirmer avec confiance que Git est le repr\u00e9sentant le plus populaire. Le syst\u00e8me de contr\u00f4le de version offre de nombreux avantages, tels que le partage de code, le stockage de versions, la r\u00e9version vers des branches pr\u00e9c\u00e9dentes, le suivi de l'historique du projet, les sauvegardes. Nous ne discuterons pas de chaque point en d\u00e9tail, car je suis s\u00fbr que vous \u00eates bien familiaris\u00e9 avec cela et l'utilisez dans votre travail quotidien. Mais si ce n'est pas le cas, je vous recommande de suspendre la lecture de cet article et de combler ce manque d\u00e8s que possible.<\/p>\n<h3>Valeur pour l'infrastructure d'automatisation<\/h3>\n<p>\n Et ici, vous pourriez poser une question l\u00e9gitime : \u00ab Pourquoi nous parle-t-il de Git ? Tout le monde le conna\u00eet et l'utilise tant pour le d\u00e9veloppement de code que pour le code des tests automatis\u00e9s \u00bb. Vous aurez absolument raison, mais dans cet article, nous parlons d'infrastructure et cette section sert de pr\u00e9ambule \u00e0 la section 7 : \u00ab Infrastructure en tant que Code (IaC) \u00bb. Pour nous, cela signifie que toute l'infrastructure, y compris celle des tests, est d\u00e9crite sous forme de code, ce qui nous permet \u00e9galement d'appliquer des syst\u00e8mes de versioning et d'obtenir des avantages similaires \u00e0 ceux du code de d\u00e9veloppement et d'automatisation.<\/p>\n<p>Nous examinerons IaC plus en d\u00e9tail \u00e0 l'\u00e9tape 7, mais d\u00e8s maintenant, vous pouvez commencer \u00e0 utiliser Git localement en cr\u00e9ant un r\u00e9f\u00e9rentiel local. La vue d'ensemble sera \u00e9largie lorsque nous ajouterons un r\u00e9f\u00e9rentiel distant \u00e0 l'infrastructure.<\/p>\n<h3>Illustration de l'\u00e9tat actuel de l'infrastructure<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Liens \u00e0 explorer<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Qu'est-ce que le contr\u00f4le de version<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/\">Git<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/book\/en\/v2\/Getting-Started-About-Version-Control\">Prise en main \u2014 \u00c0 propos du contr\u00f4le de version<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Outils similaires<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/subversion.apache.org\/\">SVN<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mercurial-scm.org\/guide\">Mercurial<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/server\/\">Microsoft TFS (qui fait maintenant partie d'Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Conteneurisation (Docker)<\/h2>\n<p><\/p>\n<h3>Br\u00e8ve description de la technologie<\/h3>\n<p>\n Pour d\u00e9montrer comment la conteneurisation a chang\u00e9 la donne, retournons quelques d\u00e9cennies en arri\u00e8re. \u00c0 l'\u00e9poque, les gens achetaient et utilisaient des serveurs pour ex\u00e9cuter des applications. Mais dans la plupart des cas, les ressources n\u00e9cessaires pour faire fonctionner les applications n'\u00e9taient pas connues \u00e0 l'avance. En cons\u00e9quence, les entreprises d\u00e9pensaient de l'argent pour acheter des serveurs puissants co\u00fbteux, mais une partie de ces capacit\u00e9s n'\u00e9tait pas pleinement utilis\u00e9e.<\/p>\n<p>L'\u00e9tape suivante de l'\u00e9volution a \u00e9t\u00e9 l'\u00e9mergence des machines virtuelles (VM), qui ont r\u00e9solu le probl\u00e8me des d\u00e9penses pour des ressources inutilis\u00e9es. Cette technologie a permis d'ex\u00e9cuter des applications de mani\u00e8re ind\u00e9pendante les unes des autres au sein d'un m\u00eame serveur, en allouant un espace compl\u00e8tement isol\u00e9. Mais, malheureusement, toute technologie a ses inconv\u00e9nients. Le lancement de VM n\u00e9cessite un syst\u00e8me d'exploitation complet qui consomme CPU, RAM, stockage et, selon l'OS, il faut prendre en compte les frais de licence. Ces facteurs affectent la vitesse de d\u00e9marrage et compliquent la portabilit\u00e9.<\/p>\n<p>Et voil\u00e0, nous sommes arriv\u00e9s \u00e0 la conteneurisation. Encore une fois, cette technologie a r\u00e9solu le probl\u00e8me pr\u00e9c\u00e9dent, car les conteneurs n'utilisent pas de syst\u00e8me d'exploitation complet, ce qui permet de lib\u00e9rer une grande quantit\u00e9 de ressources et offre une solution rapide et flexible pour la portabilit\u00e9.<\/p>\n<p>Bien s\u00fbr, la technologie de conteneurisation n'est pas nouvelle et a \u00e9t\u00e9 introduite pour la premi\u00e8re fois \u00e0 la fin des ann\u00e9es 70. \u00c0 cette \u00e9poque, de nombreuses recherches, travaux et tentatives \u00e9taient men\u00e9es. Mais c'est Docker qui a adapt\u00e9 cette technologie et l'a rendue facilement accessible au grand public. Aujourd'hui, lorsque nous parlons de conteneurs, nous faisons g\u00e9n\u00e9ralement r\u00e9f\u00e9rence \u00e0 Docker. Quand nous \u00e9voquons les conteneurs Docker, nous pensons aux conteneurs Linux. Nous pouvons utiliser des syst\u00e8mes Windows et macOS pour ex\u00e9cuter des conteneurs, mais il est important de comprendre que dans ce cas, une couche suppl\u00e9mentaire appara\u00eet. Par exemple, Docker sur Mac ex\u00e9cute discr\u00e8tement des conteneurs \u00e0 l'int\u00e9rieur d'une VM Linux l\u00e9g\u00e8re. Nous reviendrons sur ce sujet lorsque nous aborderons l'ex\u00e9cution d'\u00e9mulateurs Android dans des conteneurs, car il y a une nuance tr\u00e8s importante \u00e0 traiter plus en d\u00e9tail.<\/p>\n<h3>Valeur pour l'infrastructure d'automatisation<\/h3>\n<p>\n Nous avons d\u00e9couvert que la conteneurisation et Docker, c'est g\u00e9nial. Voyons cela dans le contexte de l'automatisation, car chaque outil ou technologie doit r\u00e9soudre un probl\u00e8me. Identifions les probl\u00e8mes \u00e9vidents de l'automatisation des tests dans le contexte des tests UI :<\/p>\n<ul>\n<li>un grand nombre de d\u00e9pendances lors de l'installation de Selenium et en particulier d'Appium ;<\/li>\n<li>des probl\u00e8mes de compatibilit\u00e9 entre les versions des navigateurs, des simulateurs et des pilotes ;<\/li>\n<li>l'absence d'un espace isol\u00e9 pour les navigateurs\/simulateurs, ce qui est particuli\u00e8rement critique pour les ex\u00e9cutions parall\u00e8les ;<\/li>\n<li>il est difficile \u00e0 g\u00e9rer et \u00e0 maintenir s'il est n\u00e9cessaire de lancer 10, 50, 100 ou m\u00eame 1000 navigateurs \u00e0 la fois.<\/li>\n<\/ul>\n<p>\nMais \u00e9tant donn\u00e9 que Selenium est l'outil d'automatisation le plus populaire et que Docker est l'outil de conteneurisation le plus utilis\u00e9, il ne devrait surprendre personne que quelqu'un ait essay\u00e9 de les combiner pour obtenir un outil puissant pour r\u00e9soudre les probl\u00e8mes mentionn\u00e9s ci-dessus. Examinons de plus pr\u00e8s de telles solutions.\u00a0<\/p>\n<p><u>Selenium grid dans Docker<\/u><\/p>\n<p>Cet outil est le plus populaire au monde pour Selenium, permettant de lancer plusieurs navigateurs sur plusieurs machines et de les g\u00e9rer depuis un n\u0153ud central. Pour d\u00e9marrer, il est n\u00e9cessaire de configurer au minimum 2 parties : Hub et Node(s). Le Hub est le n\u0153ud central qui re\u00e7oit toutes les requ\u00eates des tests et les r\u00e9partit entre les Nodes correspondants. Pour chaque Node, nous pouvons configurer une configuration sp\u00e9cifique, par exemple, en sp\u00e9cifiant le navigateur requis et sa version. Cependant, nous devons toujours nous occuper nous-m\u00eames des pilotes compatibles pour les navigateurs et les installer sur les Nodes n\u00e9cessaires. Pour cette raison, le Selenium grid n'est pas utilis\u00e9 dans sa forme pure, sauf dans les cas o\u00f9 nous devons travailler avec des navigateurs qui ne peuvent pas \u00eatre install\u00e9s sur Linux OS. Pour tous les autres cas, une solution beaucoup plus flexible et appropri\u00e9e serait d'utiliser des images Docker pour lancer le Selenium grid Hub et les Nodes. Cette approche facilite \u00e9norm\u00e9ment la gestion des n\u0153uds, car nous pouvons choisir l'image souhait\u00e9e avec les versions de navigateurs et de pilotes compatibles d\u00e9j\u00e0 install\u00e9es.<\/p>\n<p>Malgr\u00e9 les critiques n\u00e9gatives concernant la stabilit\u00e9, en particulier lors du lancement d'un grand nombre de Nodes en parall\u00e8le, le Selenium grid demeure l'outil le plus populaire pour l'ex\u00e9cution parall\u00e8le des tests Selenium. Il est important de noter que dans le monde de l'open-source, diverses am\u00e9liorations et modifications de cet outil continuent d'\u00e9merger, visant \u00e0 r\u00e9soudre divers goulets d'\u00e9tranglement.<\/p>\n<p><u>Selenoid pour le Web<\/u><\/p>\n<p>Cet outil est r\u00e9volutionnaire dans le monde de Selenium, car il fonctionne imm\u00e9diatement sans configuration et a consid\u00e9rablement simplifi\u00e9 la vie de nombreux ing\u00e9nieurs en automatisation. Tout d'abord, ce n'est pas une simple modification de Selenium Grid. Au lieu de cela, les d\u00e9veloppeurs ont cr\u00e9\u00e9 une toute nouvelle version de Selenium Hub en langage Golang, ce qui, combin\u00e9 avec des images Docker l\u00e9g\u00e8res pour diff\u00e9rents navigateurs, a propuls\u00e9 le d\u00e9veloppement de l'automatisation des tests. De plus, dans le cas de Selenium Grid, nous devons d\u00e9finir tous les navigateurs n\u00e9cessaires et leurs versions \u00e0 l'avance, ce qui n'est pas un probl\u00e8me lorsque le travail se fait avec un seul navigateur. Mais quand il s'agit de plusieurs navigateurs pris en charge, Selenoid est la solution num\u00e9ro un gr\u00e2ce \u00e0 la fonctionnalit\u00e9 'navigateur \u00e0 la demande'. Tout ce que nous avons \u00e0 faire est de pr\u00e9charger les images n\u00e9cessaires avec les navigateurs et de mettre \u00e0 jour le fichier de configuration avec lequel Selenoid interagit. Une fois que Selenoid re\u00e7oit une demande des tests, il lance automatiquement le conteneur avec le navigateur demand\u00e9. Lorsque le test est termin\u00e9, Selenoid va arr\u00eater le conteneur, lib\u00e9rant ainsi des ressources pour les demandes suivantes. Cette approche \u00e9limine compl\u00e8tement le probl\u00e8me bien connu de 'd\u00e9gradation des n\u0153uds', que nous rencontrons souvent dans Selenium Grid.<\/p>\n<p>Mais, h\u00e9las, Selenoid n'est toujours pas une solution miracle. Nous avons obtenu la fonctionnalit\u00e9 'navigateur \u00e0 la demande', mais la fonction 'ressources \u00e0 la demande' n'est toujours pas disponible. Pour utiliser Selenoid, nous devons le d\u00e9ployer sur du mat\u00e9riel physique ou sur une VM, ce qui signifie que nous devons savoir \u00e0 l'avance combien de ressources doivent \u00eatre allou\u00e9es. Je pense que cela ne pose pas de probl\u00e8me pour les petits projets qui ex\u00e9cutent 10, 20 ou m\u00eame 30 navigateurs en parall\u00e8le. Mais que faire si nous avons besoin de 100, 500, 1000 ou plus ? Il n'a aucun sens de maintenir et de payer pour autant de ressources en permanence. Dans les sections 5 et 6 de cet article, nous discuterons des solutions qui permettent de scaler, r\u00e9duisant ainsi significativement les co\u00fbts de l'entreprise.<\/p>\n<p><u>Selenoid pour Android<\/u><\/p>\n<p>Apr\u00e8s le succ\u00e8s de Selenoid en tant qu'outil d'automatisation web, les gens souhaitaient quelque chose de similaire pour Android. Et cela a \u00e9t\u00e9 r\u00e9alis\u00e9 : Selenoid a \u00e9t\u00e9 lanc\u00e9 avec le support d'Android. Du point de vue de l'utilisateur, le principe de fonctionnement est similaire \u00e0 l'automatisation web. La seule diff\u00e9rence est qu'au lieu de conteneurs avec des navigateurs, Selenoid ex\u00e9cute des conteneurs avec des \u00e9mulateurs Android. \u00c0 mon avis, c'est actuellement l'outil gratuit le plus puissant pour ex\u00e9cuter des tests Android en parall\u00e8le.<\/p>\n<p>Je pr\u00e9f\u00e9rerais ne pas parler des aspects n\u00e9gatifs de cet outil, car je l'appr\u00e9cie vraiment beaucoup. Cependant, il existe certains des m\u00eames inconv\u00e9nients li\u00e9s \u00e0 l'automatisation web, notamment en ce qui concerne l'\u00e9volutivit\u00e9. En plus, il convient de mentionner une autre limitation qui pourrait \u00eatre une surprise si nous configurons l'outil pour la premi\u00e8re fois. Pour ex\u00e9cuter des images Android, nous avons besoin d'une machine physique ou d'une VM avec la prise en charge de la virtualisation imbriqu\u00e9e. Dans le guide pratique, je montre comment activer cela sur une VM Linux. Cependant, si vous \u00eates un utilisateur de macOS et souhaitez d\u00e9ployer Selenoid localement, il sera impossible d'ex\u00e9cuter des tests Android. Mais vous pouvez toujours ex\u00e9cuter une VM Linux localement avec la 'virtualisation imbriqu\u00e9e' configur\u00e9e et d\u00e9ployer Selenoid \u00e0 l'int\u00e9rieur.<\/p>\n<h3>Illustration de l'\u00e9tat actuel de l'infrastructure<\/h3>\n<p>\n Dans le contexte de cet article, nous ajouterons 2 outils pour illustrer l'infrastructure. Il s'agit de Selenium grid pour les tests web et Selenoid pour les tests Android. Dans le guide sur GitHub, je montrerai \u00e9galement comment utiliser Selenoid pour ex\u00e9cuter des tests web.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Liens \u00e0 explorer<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker : quel conteneur est<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker : commencer<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 alternatives aux conteneurs Docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Grid2\">Selenium Grid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/docker-selenium\">Docker Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/selenoid\/latest\/\">Selenoid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aerokube\/selenoid\">Selenoid Github<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator-acceleration#vm-linux\">Configuration KVM pour \u00e9mulateurs Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Docker-Deep-Dive-Nigel-Poulton-ebook\/dp\/B01LXWQUFF\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B01LXWQUFF&amp;pd_rd_r=f8dcd666-e707-4f85-99c6-24ecec56ea74&amp;pd_rd_w=rMnHL&amp;pd_rd_wg=u17vC&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=KN6EXNGBWJ6B9QNJE4M2&amp;psc=1&amp;refRID=KN6EXNGBWJ6B9QNJE4M2\">Livre Docker Deep Dive<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Outils similaires<\/h3>\n<p><\/p>\n<ul>\n<li>Il existe d'autres outils de conteneurisation, mais Docker est le plus populaire. Si vous voulez essayer autre chose, sachez que les outils que nous avons examin\u00e9s pour l'ex\u00e9cution parall\u00e8le des tests Selenium ne fonctionneront pas imm\u00e9diatement.\u00a0\u00a0<\/li>\n<li>Comme d\u00e9j\u00e0 mentionn\u00e9, il existe de nombreuses modifications de Selenium grid, par exemple,<noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.zalando.com\/zalenium\/\"> Zalenium<\/a><\/noindex>. <\/li>\n<\/ul>\n<p><\/p>\n<h2>4. CI \/ CD<\/h2>\n<p><\/p>\n<h3>Br\u00e8ve description de la technologie<\/h3>\n<p>\n La pratique de l'int\u00e9gration continue est assez populaire dans le d\u00e9veloppement et se situe au m\u00eame niveau que les syst\u00e8mes de contr\u00f4le de version. Pourtant, je sens qu'il existe une certaine confusion terminologique. Dans ce paragraphe, j'aimerais d\u00e9crire trois modifications de cette technologie selon mon point de vue. Sur Internet, vous trouverez de nombreux articles avec diff\u00e9rentes interpr\u00e9tations, et c'est tout \u00e0 fait normal si votre opinion diff\u00e8re. L'essentiel est d'\u00eatre sur la m\u00eame longueur d'onde que vos coll\u00e8gues.<\/p>\n<p>Ainsi, il existe trois termes : CI \u2014 Continuous Integration (int\u00e9gration continue), CD \u2014 Continuous Delivery (livraison continue) et \u00e0 nouveau CD \u2014 Continuous Deployment (d\u00e9ploiement continu). (<i>Ensuite, je vais utiliser ces termes en anglais<\/i>). Chaque modification ajoute plusieurs \u00e9tapes suppl\u00e9mentaires \u00e0 votre pipeline de d\u00e9veloppement. Mais le mot <u>continuous<\/u> (continu) est le plus important. Dans ce contexte, cela signifie quelque chose qui se produit du d\u00e9but \u00e0 la fin, sans interruptions ni interventions manuelles. Examinons CI &#038; CD et CD dans ce contexte.<\/p>\n<ul>\n<li><strong>L'int\u00e9gration continue \u2013<\/strong> c'est la premi\u00e8re \u00e9tape de l'\u00e9volution. Apr\u00e8s avoir envoy\u00e9 du nouveau code sur le serveur, nous nous attendons \u00e0 recevoir un retour rapide indiquant que nos modifications sont correctes. En g\u00e9n\u00e9ral, le CI implique l'ex\u00e9cution d'outils d'analyse statique de code et de tests API internes\/modulaires. Cela permet d'obtenir des informations sur notre code quelques secondes\/minutes apr\u00e8s.<\/li>\n<li><strong>Livraison continue<\/strong> est une \u00e9tape plus avanc\u00e9e, o\u00f9 nous ex\u00e9cutons des tests d'int\u00e9gration\/UI. Cependant, \u00e0 ce stade, nous n'obtenons pas de r\u00e9sultats aussi rapidement que pour le CI. Premi\u00e8rement, ces types de tests n\u00e9cessitent plus de temps pour \u00eatre ex\u00e9cut\u00e9s. Deuxi\u00e8mement, avant le lancement, nous devons d\u00e9ployer nos modifications dans un environnement test\/staging. De plus, si nous parlons de d\u00e9veloppement mobile, une \u00e9tape suppl\u00e9mentaire est n\u00e9cessaire pour cr\u00e9er une version de notre application.<\/li>\n<li><strong>D\u00e9ploiement continu<\/strong> sous-entend que nous d\u00e9ployons automatiquement nos modifications en production si tous les tests d'acceptation ont \u00e9t\u00e9 valid\u00e9s lors des \u00e9tapes pr\u00e9c\u00e9dentes. En compl\u00e9ment de cela, apr\u00e8s l'\u00e9tape de d\u00e9ploiement, il est possible de configurer diff\u00e9rentes \u00e9tapes, telles que le lancement de tests de validation (smoke tests) en production et la collecte de m\u00e9triques pertinentes. Le d\u00e9ploiement continu n'est possible qu'avec une bonne couverture de tests automatis\u00e9s. Si des interventions manuelles sont n\u00e9cessaires, y compris des tests, alors cela ne fait plus partie du <u>Continu<\/u> (continu). Dans ce cas, nous pouvons dire que notre pipeline correspond uniquement \u00e0 la pratique de la Livraison Continue.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Valeur pour l'infrastructure d'automatisation<\/h3>\n<p>\n Dans cette section, je dois pr\u00e9ciser que lorsque nous parlons de tests UI de bout en bout, cela implique que nous devons d\u00e9ployer nos modifications et les services associ\u00e9s dans des environnements de test. L'int\u00e9gration continue \u2014 le processus n'est pas applicable \u00e0 cette t\u00e2che et nous devons veiller \u00e0 mettre en \u0153uvre au moins des pratiques de Livraison Continue. Le d\u00e9ploiement continu a \u00e9galement du sens dans le contexte des tests UI, si nous pr\u00e9voyons de les ex\u00e9cuter en production.<\/p>\n<p>Et avant que nous examinions l'illustration des changements d'architecture, je voudrais dire quelques mots sur GitLab CI. Contrairement \u00e0 d'autres outils CI\/CD, GitLab offre un d\u00e9p\u00f4t distant et de nombreuses autres fonctionnalit\u00e9s suppl\u00e9mentaires. Ainsi, GitLab est plus qu'un simple CI. Il inclut par d\u00e9faut la gestion du code source, la gestion Agile, les pipelines CI\/CD, les outils de journalisation et la collecte de m\u00e9triques. L'architecture de GitLab se compose de GitLab CI\/CD et de GitLab Runner. Voici une br\u00e8ve description provenant du site officiel :<\/p>\n<blockquote><p>GitLab CI\/CD est une application web avec une API qui stocke son \u00e9tat dans une base de donn\u00e9es, g\u00e8re des projets\/compilations et fournit une interface utilisateur. GitLab Runner est une application qui traite les compilations. Il peut \u00eatre d\u00e9ploy\u00e9 s\u00e9par\u00e9ment et fonctionne avec GitLab CI\/CD via une API. Pour l'ex\u00e9cution des tests, vous avez besoin \u00e0 la fois d'une instance GitLab et d'un Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Illustration de l'\u00e9tat actuel de l'infrastructure<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Liens \u00e0 explorer<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html\">Martin Fowler : Int\u00e9gration Continue<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\">GitLab CI\/CD<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Integration-Improving-Software-Reducing\/dp\/0321336380\">Livre sur l'int\u00e9gration continue<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Delivery-Deployment-Automation-Addison-Wesley-ebook-dp-B003YMNVC0\/dp\/B003YMNVC0\/ref=mt_kindle?_encoding=UTF8&amp;me=&amp;qid=\">Livre sur la livraison continue<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Outils similaires<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/\">Jenkins<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/teamcity\/\">TeamCity<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/travis-ci.com\/\">Travis<\/a><\/noindex>\u00a0<\/li>\n<li>Et bien d'autres encore<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Plateformes Cloud<\/h2>\n<p><\/p>\n<h3>Br\u00e8ve description de la technologie<\/h3>\n<p>\n Dans cette section, nous allons parler d'une tendance populaire appel\u00e9e \u00ab nuages publics \u00bb. Malgr\u00e9 les \u00e9normes avantages offerts par les technologies de virtualisation et de containerisation \u00e9voqu\u00e9es pr\u00e9c\u00e9demment, nous avons toujours besoin de ressources informatiques. Les entreprises acqui\u00e8rent des serveurs co\u00fbteux ou louent des centres de donn\u00e9es, mais dans ce cas, il est n\u00e9cessaire d'effectuer des calculs (parfois irr\u00e9alistes) pour d\u00e9terminer combien de ressources nous aurons besoin, si nous allons les utiliser 24\/7 et pour quel type d'objectifs. Par exemple, pour la production, un serveur op\u00e9rationnel 24 heures sur 24 est requis, mais avons-nous besoin de ressources similaires pour les tests en dehors des heures de travail ? Cela d\u00e9pend \u00e9galement du type de tests r\u00e9alis\u00e9s. Prenons l'exemple des tests de charge\/stress que nous pr\u00e9voyons de faire en dehors des heures de travail pour obtenir des r\u00e9sultats le lendemain. Cependant, il est \u00e9vident que la disponibilit\u00e9 24 heures sur 24 des serveurs n'est pas n\u00e9cessaire pour les tests automatiques end-to-end, et encore moins pour les environnements de test manuel. Pour de telles situations, il serait id\u00e9al de b\u00e9n\u00e9ficier de ressources en fonction des besoins, de les utiliser et de cesser de payer lorsque nous n'en avons plus besoin. De plus, il serait merveilleux de pouvoir les obtenir instantan\u00e9ment, en effectuant quelques clics de souris ou en lan\u00e7ant quelques scripts. C'est pr\u00e9cis\u00e9ment l'utilit\u00e9 des nuages publics. Examinons la d\u00e9finition :<\/p>\n<blockquote><p>\u00ab Le nuage public est d\u00e9fini comme des services de calcul offerts par des fournisseurs tiers via Internet public, les rendant disponibles \u00e0 quiconque souhaite les utiliser ou les acheter. Ils peuvent \u00eatre gratuits ou vendus \u00e0 la demande, permettant aux clients de ne payer que pour l'utilisation des cycles CPU, du stockage ou de la bande passante consomm\u00e9e. \u00bb<\/p><\/blockquote>\n<p>\n Il est souvent dit que les nuages publics sont co\u00fbteux. Mais leur id\u00e9e cl\u00e9 est de r\u00e9duire les d\u00e9penses des entreprises. Comme mentionn\u00e9 pr\u00e9c\u00e9demment, les nuages publics permettent d'obtenir des ressources \u00e0 la demande et de ne payer que pour le temps d'utilisation. De plus, nous oublions parfois que les employ\u00e9s re\u00e7oivent un salaire et que les experts sont \u00e9galement une ressource co\u00fbteuse. Il est crucial de consid\u00e9rer que les nuages publics facilitent grandement le soutien de l'infrastructure, permettant ainsi aux ing\u00e9nieurs de se concentrer sur des t\u00e2ches plus importantes.\u00a0<\/p>\n<h3>Valeur pour l'infrastructure d'automatisation<\/h3>\n<p>\n Quelles ressources sp\u00e9cifiques sont n\u00e9cessaires pour des tests UI de bout en bout ? Principalement, ce sont des machines virtuelles ou des clusters (nous parlerons de Kubernetes dans la section suivante) pour ex\u00e9cuter des navigateurs et des \u00e9mulateurs. Plus nous souhaitons ex\u00e9cuter de navigateurs et d'\u00e9mulateurs en m\u00eame temps, plus nous avons besoin de CPU et de m\u00e9moire, et plus cela co\u00fbtera cher. Ainsi, les clouds publics dans le contexte de l'automatisation des tests nous permettent d'ex\u00e9cuter un grand nombre (100, 200, 1000\u2026) de navigateurs\/\u00e9mulateurs \u00e0 la demande, d'obtenir des r\u00e9sultats de test aussi rapidement que possible et de cesser de payer pour de telles ressources excessivement co\u00fbteuses.\u00a0<\/p>\n<p>Les fournisseurs de cloud les plus populaires sont Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). Le guide pratique pr\u00e9sente des exemples d'utilisation de GCP, mais au final, peu importe ce que vous allez utiliser pour les t\u00e2ches d'automatisation. Tous offrent des fonctionnalit\u00e9s \u00e0 peu pr\u00e8s identiques. En g\u00e9n\u00e9ral, lors du choix d'un fournisseur, le guide se concentre sur l'ensemble de l'infrastructure de l'entreprise et sur les exigences commerciales, ce qui d\u00e9passe le cadre de cet article. Pour les ing\u00e9nieurs en automatisation, il sera plus int\u00e9ressant de comparer l'utilisation des fournisseurs de cloud avec celle des plateformes cloud sp\u00e9cifiquement pour les tests, comme Sauce Labs, BrowserStack, BitBar, etc. Alors faisons cela ! \u00c0 mon avis, Sauce Labs est la ferme de tests cloud la plus connue, c'est pourquoi je l'ai choisie pour la comparaison.\u00a0<\/p>\n<p><u>GCP contre Sauce Labs pour les objectifs d'automatisation :<\/u><\/p>\n<p>Imaginons que nous devons ex\u00e9cuter simultan\u00e9ment 8 tests web et 8 tests Android. Pour cela, nous allons utiliser GCP et lancer 2 machines virtuelles avec Selenoid. Sur la premi\u00e8re, nous d\u00e9ploierons 8 conteneurs avec des navigateurs. Sur la seconde, 8 conteneurs avec des \u00e9mulateurs. Regardons les prix :\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Pour ex\u00e9cuter un conteneur avec Chrome, nous aurons besoin de <strong>n1-standard-1 <\/strong>machine. Dans le cas d'Android, ce sera <strong>n1-standard-4 <\/strong>pour un \u00e9mulateur. En r\u00e9alit\u00e9, un moyen plus flexible et \u00e9conomique consiste \u00e0 sp\u00e9cifier des valeurs utilisateur pour le CPU\/M\u00e9moire, mais pour le moment, cela n'est pas fondamental pour comparer avec Sauce Labs.<\/p>\n<p>Voici les tarifs d'utilisation de Sauce Labs :<\/p>\n<p><img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJe suppose que vous avez d\u00e9j\u00e0 remarqu\u00e9 la diff\u00e9rence, mais je vais tout de m\u00eame fournir un tableau avec des calculs pour notre t\u00e2che :<\/p>\n<p><strong>Ressources requises<\/strong><br \/>\n<strong>Mensuel<\/strong><br \/>\n<strong>Heures de travail<\/strong><strong>(8 h \u2014 20 h)<\/strong><br \/>\n<strong>Heures de travail<\/strong><strong>+ Pr\u00e9emptible<\/strong><\/p>\n<p><strong>GCP pour le Web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 jours * 12h * 0,38 = 104,88\u20ac\u00a0<br \/>\n23 jours * 12h * 0,08 = 22,08\u20ac<\/p>\n<p><strong>Sauce Labs pour le Web<\/strong><br \/>\nTests parall\u00e8les Virtual Cloud8<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p><strong>GCP pour Android<\/strong><br \/>\nn1-standard-4 x 8 : n1-standard-16<br \/>\n$776.72<br \/>\n23 jours * 12h * 1,52 = 419,52\u20ac\u00a0<br \/>\n23 jours * 12h * 0,32 = 88,32\u20ac<\/p>\n<p><strong>Sauce Labs pour Android<\/strong><br \/>\nTests parall\u00e8les sur des appareils r\u00e9els Cloud 8<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\nComme vous pouvez le voir, la diff\u00e9rence de co\u00fbt est \u00e9norme, surtout si vous ex\u00e9cutez des tests uniquement pendant la p\u00e9riode de travail de douze heures. Mais vous pouvez r\u00e9duire encore plus les co\u00fbts en utilisant des machines pr\u00e9emptibles. Qu'est-ce que c'est ?<\/p>\n<blockquote><p>Une VM pr\u00e9emptible est une instance que vous pouvez cr\u00e9er et ex\u00e9cuter \u00e0 un prix beaucoup plus bas que les instances normales. Cependant, Compute Engine peut interrompre (pr\u00e9empter) ces instances si elle a besoin d'acc\u00e9der \u00e0 ces ressources pour d'autres t\u00e2ches. Les instances pr\u00e9emptibles sont une capacit\u00e9 exc\u00e9dentaire de Compute Engine, donc leur disponibilit\u00e9 varie en fonction de l'utilisation.<\/p>\n<p>Si vos applications sont tol\u00e9rantes aux pannes et peuvent supporter d'\u00e9ventuelles interruptions d'instances, alors les instances pr\u00e9emptibles peuvent r\u00e9duire consid\u00e9rablement vos co\u00fbts sur Compute Engine. Par exemple, les t\u00e2ches de traitement par lots peuvent s'ex\u00e9cuter sur des instances pr\u00e9emptibles. Si certaines de ces instances se terminent pendant le traitement, la t\u00e2che ralentit mais ne s'arr\u00eate pas compl\u00e8tement. Les instances pr\u00e9emptibles compl\u00e8tent vos t\u00e2ches de traitement par lots sans alourdir vos instances existantes et sans exiger que vous payiez le prix fort pour des instances normales suppl\u00e9mentaires.<\/p><\/blockquote>\n<p>\n Et ce n'est toujours pas fini ! En r\u00e9alit\u00e9, je suis convaincu que personne ne lance des tests pendant 12 heures sans interruption. Et si c'est le cas, vous pouvez automatiser le d\u00e9marrage et l'arr\u00eat des machines virtuelles lorsqu'elles ne sont pas n\u00e9cessaires. Le temps d'utilisation r\u00e9el peut \u00eatre r\u00e9duit \u00e0 6 heures par jour. Dans ce cas, le paiement dans le contexte de notre t\u00e2che peut descendre \u00e0 11\u20ac par mois pour 8 navigateurs. N'est-ce pas merveilleux ? Mais avec des machines pr\u00e9emptibles, nous devons \u00eatre prudents et pr\u00e9par\u00e9s aux interruptions et \u00e0 un fonctionnement instable, bien que ces situations puissent \u00eatre anticip\u00e9es et g\u00e9r\u00e9es par programmation. \u00c7a en vaut la peine !<\/p>\n<p>Mais je ne dis en aucun cas 'ne jamais utiliser des fermes de tests dans le cloud'. Elles ont plusieurs avantages. Tout d'abord, ce n'est pas simplement une machine virtuelle, mais une solution compl\u00e8te pour l'automatisation des tests avec un ensemble de fonctionnalit\u00e9s pr\u00eates \u00e0 l'emploi : acc\u00e8s \u00e0 distance, journaux, captures d'\u00e9cran, enregistrement vid\u00e9o, diff\u00e9rents navigateurs et appareils mobiles physiques. Dans de nombreuses situations, cela peut \u00eatre une alternative magnifique et indispensable. En particulier, les plateformes de test sont utiles pour l'automatisation iOS, lorsque les clouds publics ne peuvent offrir que des syst\u00e8mes Linux\/Windows. Mais la discussion sur l'iOS viendra dans les prochains articles. Je recommande toujours d'\u00e9valuer la situation et de partir des t\u00e2ches : dans certains cas, il est moins cher et plus efficace d'utiliser des clouds publics, tandis que dans d'autres, les plateformes de test valent d\u00e9finitivement l'argent d\u00e9pens\u00e9.<\/p>\n<h3>Illustration de l'\u00e9tat actuel de l'infrastructure<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Liens \u00e0 explorer<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/gcp\/\">GCP<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/instances\/preemptible\">GCP : Pr\u00e9emptible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/vm-instance-pricing\">GCP : Tarification des VM<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saucelabs.com\/pricing\">SauceLabs<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.inovex.de\/blog\/comparing-cloud-providers\/\">Comparer les fournisseurs de cloud<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Outils similaires :<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/\">AWS<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/\">Azure<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>6. Orchestration<\/h2>\n<p><\/p>\n<h3>Br\u00e8ve description de la technologie<\/h3>\n<p>\n J'ai de bonnes nouvelles \u2013 nous avons presque atteint la fin de l'article ! Actuellement, notre infrastructure d'automatisation se compose de tests web et Android que nous ex\u00e9cutons via GitLab CI en parall\u00e8le, en utilisant des outils compatibles avec Docker : Selenium grid et Selenoid. De plus, nous utilisons des machines virtuelles cr\u00e9\u00e9es via GCP pour h\u00e9berger des conteneurs avec des navigateurs et des \u00e9mulateurs. Pour r\u00e9duire les co\u00fbts, nous lan\u00e7ons ces machines virtuelles uniquement \u00e0 la demande et les arr\u00eatons lorsque les tests ne sont pas effectu\u00e9s. Y a-t-il autre chose qui pourrait am\u00e9liorer notre infrastructure ? La r\u00e9ponse est oui ! Accueillons Kubernetes (K8s) !<\/p>\n<p>Pour commencer, examinons comment les mots orchestration, cluster et Kubernetes sont li\u00e9s. \u00c0 un niveau \u00e9lev\u00e9, l'orchestration est un syst\u00e8me qui d\u00e9ploie et g\u00e8re des applications. Pour automatiser les tests, les applications conteneuris\u00e9es sont Selenium grid et Selenoid. Docker et K8s se compl\u00e8tent. Le premier est utilis\u00e9 pour d\u00e9ployer des applications, le second pour l'orchestration. En retour, K8s est un cluster. La t\u00e2che du cluster est d'utiliser des VMs comme Nodes, ce qui permet d'installer diff\u00e9rentes fonctionnalit\u00e9s, programmes et services sur un m\u00eame serveur (cluster). Si un Node \u00e9choue, d'autres Nodes prennent le relais, ce qui garantit un fonctionnement continu de notre application. De plus, K8s poss\u00e8de une fonctionnalit\u00e9 importante li\u00e9e \u00e0 la mise \u00e0 l'\u00e9chelle, ce qui nous permet d'obtenir automatiquement la quantit\u00e9 optimale de ressources, en fonction de la charge et des limites \u00e9tablies.<\/p>\n<p>En r\u00e9alit\u00e9, le d\u00e9ploiement manuel de Kubernetes depuis z\u00e9ro est une t\u00e2che tout sauf triviale. Je laisserai un lien vers le c\u00e9l\u00e8bre guide pratique \"Kubernetes The Hard Way\", et si cela vous int\u00e9resse, vous pouvez vous entra\u00eener. Mais heureusement, il existe des m\u00e9thodes et des outils alternatifs. La plus simple consiste \u00e0 utiliser Google Kubernetes Engine (GKE) dans GCP, ce qui permet d'obtenir un cluster pr\u00eat apr\u00e8s quelques clics. Pour commencer votre apprentissage, je recommande d'utiliser cette approche, car elle vous permettra de vous concentrer sur l'apprentissage de l'utilisation de K8s pour vos t\u00e2ches plut\u00f4t que sur l'exploration de l'int\u00e9gration des composants internes.\u00a0<\/p>\n<h3>Valeur pour l'infrastructure d'automatisation<\/h3>\n<p>\nExaminons quelques fonctionnalit\u00e9s significatives offertes par K8s :<\/p>\n<ul>\n<li>d\u00e9ploiement d'applications : utilisation d'un cluster multi-n\u0153uds au lieu de VMs ;<\/li>\n<li>scalabilit\u00e9 dynamique : r\u00e9duit les co\u00fbts des ressources utilis\u00e9es uniquement \u00e0 la demande ;<\/li>\n<li>auto-r\u00e9cup\u00e9ration (Self-healing) : restauration automatique des pods (entrainant la restauration des conteneurs) ;<\/li>\n<li>d\u00e9ploiement d'une mise \u00e0 jour et retour en arri\u00e8re sans temps d'arr\u00eat : la mise \u00e0 jour des outils, navigateurs et \u00e9mulateurs ne perturbe pas le travail des utilisateurs actuels.<\/li>\n<\/ul>\n<p>\n Mais K8s n'est toujours pas une solution miracle. Pour comprendre tous les avantages et les limitations dans le contexte des outils que nous examinons (Selenium grid, Selenoid), discutons bri\u00e8vement de la structure de K8s. Le cluster contient deux types de n\u0153uds : les Master Nodes et les Workers Nodes. Les Master Nodes sont responsables de la gestion, du d\u00e9ploiement et des d\u00e9cisions de planification. Les Workers nodes sont l\u00e0 o\u00f9 les applications sont ex\u00e9cut\u00e9es. Les n\u0153uds contiennent \u00e9galement l'environnement d'ex\u00e9cution des conteneurs. Dans notre cas, c'est Docker, qui g\u00e8re les op\u00e9rations li\u00e9es aux conteneurs. Mais il existe aussi des solutions alternatives, par exemple<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. Il est important de comprendre que la scalabilit\u00e9 ou l'auto-r\u00e9cup\u00e9ration ne concerne pas directement les conteneurs. Cela se r\u00e9alise par l'ajout ou la r\u00e9duction du nombre de pods, qui contiennent \u00e0 leur tour des conteneurs (g\u00e9n\u00e9ralement un conteneur par pod, mais selon la t\u00e2che, il peut y en avoir plusieurs). La hi\u00e9rarchie de haut niveau se compose de n\u0153uds workers, \u00e0 l'int\u00e9rieur desquels se trouvent des pods, et \u00e0 l'int\u00e9rieur desquels sont lanc\u00e9s des conteneurs.<\/p>\n<p>La fonction de mise \u00e0 l'\u00e9chelle est essentielle et peut \u00eatre appliqu\u00e9e aussi bien aux n\u0153uds \u00e0 l'int\u00e9rieur d'un pool de n\u0153uds de cluster qu'aux pods \u00e0 l'int\u00e9rieur d'un n\u0153ud. Il existe deux types de mise \u00e0 l'\u00e9chelle, qui concernent \u00e0 la fois les n\u0153uds et les pods. Le premier type, horizontal, consiste \u00e0 augmenter le nombre de n\u0153uds\/pods. Ce type est pr\u00e9f\u00e9r\u00e9. Le second type, vertical, consiste \u00e0 augmenter la taille des n\u0153uds\/pods, plut\u00f4t que leur nombre.<\/p>\n<p>Examinons maintenant nos outils dans le contexte des termes mentionn\u00e9s ci-dessus.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, Selenium grid est un outil tr\u00e8s populaire, et il n'est pas surprenant qu'il ait \u00e9t\u00e9 containeris\u00e9. Il n'est donc pas surprenant que Selenium grid puisse \u00eatre d\u00e9ploy\u00e9 dans K8s. Un exemple de la mani\u00e8re de proc\u00e9der se trouve dans le d\u00e9p\u00f4t officiel de K8s. Comme d'habitude, je joins des liens \u00e0 la fin de la section. En outre, un guide pratique montre comment proc\u00e9der avec Terraform. Il y a \u00e9galement des instructions sur la fa\u00e7on de mettre \u00e0 l'\u00e9chelle le nombre de pods contenant des conteneurs avec des navigateurs. Cependant, la fonction de mise \u00e0 l'\u00e9chelle automatique dans le contexte de K8s reste une t\u00e2che encore peu \u00e9vidente. Lorsque j'ai commenc\u00e9 \u00e0 \u00e9tudier, je n'ai trouv\u00e9 aucun guide pratique ou recommandations. Apr\u00e8s plusieurs recherches et exp\u00e9rimentations avec le soutien de l'\u00e9quipe DevOps, nous avons opt\u00e9 pour l'approche consistant \u00e0 faire fonctionner les conteneurs avec les navigateurs requis dans un seul pod, situ\u00e9 dans un seul n\u0153ud de travail. Cette m\u00e9thode nous permet d'appliquer une strat\u00e9gie de mise \u00e0 l'\u00e9chelle horizontale des n\u0153uds en augmentant leur nombre. J'esp\u00e8re qu'\u00e0 l'avenir, la situation changera et que nous verrons de plus en plus de descriptions des meilleures approches et solutions pr\u00eates \u00e0 l'emploi, surtout apr\u00e8s la sortie de Selenium grid 4 avec une architecture interne modifi\u00e9e.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>Actuellement, le d\u00e9ploiement de Selenoid dans K8s est une grande d\u00e9ception. Ils ne sont pas compatibles. Th\u00e9oriquement, nous pouvons lancer un conteneur Selenoid \u00e0 l'int\u00e9rieur d'un pod, mais lorsque Selenoid commence \u00e0 ex\u00e9cuter des conteneurs avec des navigateurs, ceux-ci seront toujours \u00e0 l'int\u00e9rieur de ce m\u00eame pod. Cela rend l'\u00e9volutivit\u00e9 impossible et, par cons\u00e9quent, le fonctionnement de Selenoid \u00e0 l'int\u00e9rieur du cluster ne sera pas diff\u00e9rent de celui \u00e0 l'int\u00e9rieur d'une machine virtuelle. Fin de l'histoire.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>Connaissant ce goulet d'\u00e9tranglement lors de l'utilisation de Selenoid, les d\u00e9veloppeurs ont lanc\u00e9 un outil plus puissant appel\u00e9 Moon. Cet outil a \u00e9t\u00e9 initialement con\u00e7u pour fonctionner avec Kubernetes et, par cons\u00e9quent, il est possible et n\u00e9cessaire d'utiliser la fonction d'auto-scaling. De plus, je dirais qu'\u00e0 l'heure actuelle, c'est <u>seule<\/u> l'outil dans le monde de Selenium qui prend en charge nativement le cluster K8s d\u00e8s sa sortie de bo\u00eete (<i>ce n'est plus le cas, voir l'outil suivant <\/i>). La caract\u00e9ristique cl\u00e9 de Moon qui permet cette prise en charge est :\u00a0<\/p>\n<blockquote><p>Compl\u00e8tement sans \u00e9tat. Selenoid stocke en m\u00e9moire des informations sur les sessions de navigateur actuellement en cours. Si, pour une raison quelconque, son processus plante, alors toutes les sessions en cours sont perdues. Moon, en revanche, n'a pas d'\u00e9tat interne et peut \u00eatre r\u00e9pliqu\u00e9 \u00e0 travers les centres de donn\u00e9es. Les sessions de navigateur restent actives m\u00eame si une ou plusieurs r\u00e9pliques tombent.<\/p><\/blockquote>\n<p>Ainsi, Moon est une solution formidable, mais avec un probl\u00e8me, il n'est pas gratuit. Le prix d\u00e9pend du nombre de sessions. Vous pouvez ex\u00e9cuter gratuitement seulement 0 \u00e0 4 sessions, ce qui n'est pas tr\u00e8s utile. Mais \u00e0 partir de la cinqui\u00e8me session, il faudra payer 5 $ pour chacune. La situation peut varier d'une entreprise \u00e0 l'autre, mais dans notre cas, l'utilisation de Moon n'est pas pertinente. Comme je l'ai d\u00e9crit ci-dessus, nous pouvons lancer des VMs avec Selenium Grid \u00e0 la demande ou augmenter le nombre de n\u0153uds dans le cluster. Environ un pipeline ex\u00e9cute 500 navigateurs et arr\u00eate toutes les ressources une fois les tests termin\u00e9s. Si nous utilisions Moon, nous devrions payer un suppl\u00e9ment de 500 x 5 = 2500 $ par mois peu importe la fr\u00e9quence \u00e0 laquelle nous ex\u00e9cutons les tests. Et encore une fois, je ne dis pas \u00ab ne pas utiliser Moon \u00bb. Pour vos t\u00e2ches, cela peut \u00eatre une solution indispensable, en particulier si vous avez de nombreux projets ou \u00e9quipes dans votre organisation et besoin d'un \u00e9norme cluster commun pour tous. Comme toujours, je laisse un lien \u00e0 la fin et recommande de faire tous les calculs n\u00e9cessaires dans le contexte de votre t\u00e2che.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Attention ! Cela n'est pas dans l'article original et est uniquement contenu dans la traduction russe.<\/strong><\/i>)<\/p>\n<p>Comme je l'ai dit, Selenium est un outil tr\u00e8s populaire et le domaine de l'informatique \u00e9volue tr\u00e8s rapidement. Pendant que je travaillais sur la traduction, un nouvel outil prometteur, Callisto (salut \u00e0 Cypress et aux autres concurrents de Selenium), est apparu sur le web. Il fonctionne nativement avec K8s et permet de lancer des conteneurs Selenoid dans des pods, r\u00e9partis sur des nodes. Tout fonctionne tout de suite, y compris l'auto-scaling. Fantastique, mais il faut tester. J'ai d\u00e9j\u00e0 r\u00e9ussi \u00e0 d\u00e9ployer cet outil et \u00e0 mener quelques exp\u00e9riences. Mais il est trop t\u00f4t pour tirer des conclusions, apr\u00e8s avoir obtenu des r\u00e9sultats sur le long terme, il est possible que je fasse une revue dans les prochains articles. Pour l'instant, je laisse juste des liens pour des recherches individuelles.\u00a0\u00a0<\/p>\n<h3>Illustration de l'\u00e9tat actuel de l'infrastructure<\/p>\n<h3><img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Liens \u00e0 explorer<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes : configuration<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes : la m\u00e9thode difficile<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/examples\/tree\/master\/staging\/selenium\">Kubernetes : Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\">GCP : moteur Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/moon\/latest\/\">Moon<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Kubernetes-Book-Version-November-2018-ebook\/dp\/B072TS9ZQZ\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B072TS9ZQZ&amp;pd_rd_r=489f0d27-dd2c-4e33-b23c-a420affcba5d&amp;pd_rd_w=HLjs5&amp;pd_rd_wg=eGbU7&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=G71DN3V8127KHPXQ6JFN&amp;psc=1&amp;refRID=G71DN3V8127KHPXQ6JFN\">Le livre de Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Automatisation distribu\u00e9e avec Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Selenium-Grid-4\">Selenium Grid 4<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrike\/callisto\">Callisto GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/software-testing.ru\/events\/review\/3317-wrike-techclub\">Wrike TechClub (Callisto)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Outils similaires<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/get-started\/swarm-deploy\/\">Docker swarm<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mesosphere.github.io\/marathon\/\">Marathon<\/a><\/noindex>\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h2>7. Infrastructure comme code (IaC)<\/h2>\n<p><\/p>\n<h3>Br\u00e8ve description de la technologie<\/h3>\n<p>\n Et nous sommes arriv\u00e9s \u00e0 la derni\u00e8re section. Habituellement, cette technologie et les t\u00e2ches qui y sont li\u00e9es ne rel\u00e8vent pas de la responsabilit\u00e9 des ing\u00e9nieurs en automatisation. Et il y a de bonnes raisons pour cela. Tout d'abord, dans de nombreuses organisations, les questions d'infrastructure sont sous le contr\u00f4le du d\u00e9partement DevOps et l'\u00e9quipe de d\u00e9veloppement ne se soucie pas vraiment de la mani\u00e8re dont fonctionne le pipeline et de la fa\u00e7on dont il faut maintenir tout ce qui y est associ\u00e9. Deuxi\u00e8mement, soyons honn\u00eates, la pratique \u00ab Infrastructure comme code (IaC) \u00bb n'est pas encore appliqu\u00e9e dans de nombreuses entreprises. Mais cela reste d\u00e9finitivement une tendance populaire et il est important d'essayer d'\u00eatre impliqu\u00e9 dans les processus, approches et outils qui y sont li\u00e9s. Ou, au moins, de rester inform\u00e9 des \u00e9v\u00e9nements.<\/p>\n<p>Commen\u00e7ons par la motivation d'utiliser cette approche. Nous avons d\u00e9j\u00e0 discut\u00e9 qu'il nous fallait, pour ex\u00e9cuter des tests dans GitlabCI, au moins des ressources pour lancer Gitlab Runner. Et pour d\u00e9marrer des conteneurs avec des navigateurs\/\u00e9mulateurs, nous devons r\u00e9server une VM ou un cluster. En plus des ressources pour les tests, nous avons besoin d'une puissance significative pour maintenir les environnements de d\u00e9veloppement, de staging et de production, ce qui inclut \u00e9galement des bases de donn\u00e9es, des programmes automatiques, des configurations r\u00e9seau, un \u00e9quilibre de charge, des droits d'utilisateur, et ainsi de suite. Le principal probl\u00e8me r\u00e9side dans les efforts n\u00e9cessaires pour soutenir tout cela. Il existe plusieurs m\u00e9thodes par lesquelles nous pouvons apporter des modifications et d\u00e9ployer des mises \u00e0 jour. Par exemple, dans le contexte de GCP, nous pouvons utiliser la console UI dans le navigateur et effectuer toutes les actions en cliquant sur des boutons. Un autre moyen pourrait \u00eatre d'utiliser des appels API pour interagir avec des entit\u00e9s cloud ou d'utiliser l'outil en ligne de commande gcloud pour effectuer les manipulations n\u00e9cessaires. Mais avec un grand nombre d'entit\u00e9s et d'\u00e9l\u00e9ments d'infrastructure, il devient difficile, voire impossible, d'effectuer toutes les op\u00e9rations manuellement. De plus, toutes ces actions manuelles ne sont pas contr\u00f4l\u00e9es. Nous ne pouvons pas les soumettre \u00e0 une revue avant l'ex\u00e9cution, utiliser un syst\u00e8me de contr\u00f4le de version et revenir rapidement sur des modifications qui ont conduit \u00e0 un incident. Pour r\u00e9soudre ces probl\u00e8mes, les ing\u00e9nieurs ont cr\u00e9\u00e9 et continuent de cr\u00e9er des scripts bash\/shell automatiques, ce qui n'est gu\u00e8re mieux que les m\u00e9thodes pr\u00e9c\u00e9dentes, car il est assez difficile de les lire rapidement, de les comprendre, de les maintenir et de les modifier dans un style proc\u00e9dural.<\/p>\n<p>Dans cet article et ce guide pratique, j'utilise deux outils li\u00e9s \u00e0 la pratique de l'IaC. Ce sont Terraform et Ansible. Certains estiment qu'il n'est pas utile de les utiliser simultan\u00e9ment, car leurs fonctionnalit\u00e9s sont similaires et elles sont interchangeables. Cependant, la r\u00e9alit\u00e9 est qu'ils sont con\u00e7us pour r\u00e9pondre \u00e0 des t\u00e2ches totalement diff\u00e9rentes. Le fait que ces outils doivent se compl\u00e9ter a \u00e9t\u00e9 confirm\u00e9 lors d'une pr\u00e9sentation conjointe par des d\u00e9veloppeurs repr\u00e9sentant les entreprises HashiCorp et RedHat. La diff\u00e9rence conceptuelle r\u00e9side dans le fait que Terraform est un outil de provisioning pour g\u00e9rer les serveurs eux-m\u00eames. Pendant que Ansible est un outil de gestion de configurations, dont la t\u00e2che est d'installer, configurer et g\u00e9rer le logiciel sur ces serveurs.<\/p>\n<p>Une autre caract\u00e9ristique cl\u00e9 qui distingue ces outils est le style d\u2019\u00e9criture du code. Contrairement \u00e0 bash et Ansible, Terraform utilise un style d\u00e9claratif, bas\u00e9 sur la description de l'\u00e9tat final souhait\u00e9 qui doit \u00eatre atteint \u00e0 l\u2019issue de l'ex\u00e9cution. Par exemple, si l\u2019on souhaite cr\u00e9er 10 VMs et appliquer des modifications via Terraform, nous obtiendrons 10 VMs. Si le script est r\u00e9appliqu\u00e9, rien ne se produira, car nous avons d\u00e9j\u00e0 10 VMs, et Terraform en a connaissance, car il conserve l'\u00e9tat actuel de l'infrastructure dans un fichier d'\u00e9tat. En revanche, Ansible utilise une approche proc\u00e9durale et, si on lui demande de cr\u00e9er 10 VMs, lors de la premi\u00e8re ex\u00e9cution nous obtiendrons 10 VMs, tout comme avec Terraform. Mais apr\u00e8s une nouvelle ex\u00e9cution, nous aurons d\u00e9j\u00e0 20 VMs. C'est l\u00e0 qu'est la diff\u00e9rence importante. Dans le style proc\u00e9dural, nous ne conservons pas l'\u00e9tat actuel et d\u00e9crivons simplement la s\u00e9quence des \u00e9tapes \u00e0 r\u00e9aliser. Bien s\u00fbr, nous pouvons g\u00e9rer diff\u00e9rentes situations, ajouter plusieurs v\u00e9rifications sur l'existence des ressources et de l'\u00e9tat actuel, mais il est inutile de perdre notre temps et de faire des efforts pour contr\u00f4ler cette logique. De plus, cela augmente le risque d'erreurs.\u00a0<\/p>\n<p>Pour r\u00e9sumer tout ce qui pr\u00e9c\u00e8de, on peut conclure que pour le provisioning de serveurs, l'outil le mieux adapt\u00e9 est Terraform avec une notation d\u00e9clarative. Tandis que la gestion des configurations est mieux d\u00e9l\u00e9gu\u00e9e \u00e0 Ansible. Cela \u00e9tant clair, examinons des exemples d'utilisation dans le contexte de l'automatisation.<\/p>\n<h3>Valeur pour l'infrastructure d'automatisation<\/h3>\n<p>\n Il est important de comprendre que l'infrastructure d'automatisation des tests doit \u00eatre consid\u00e9r\u00e9e comme une partie de l'ensemble de l'infrastructure de l'entreprise. Cela signifie que toutes les pratiques IaC doivent \u00eatre appliqu\u00e9es de mani\u00e8re globale aux ressources de l'ensemble de l'organisation. La responsabilit\u00e9 de cela d\u00e9pend de vos processus. L'\u00e9quipe DevOps a plus d'exp\u00e9rience sur ces questions, elle voit l'ensemble du tableau. Cependant, les ing\u00e9nieurs QA sont plus impliqu\u00e9s dans le processus de construction de l'automatisation et la structure du pipeline, ce qui leur permet de mieux voir tous les changements n\u00e9cessaires et les possibilit\u00e9s d'am\u00e9lioration. Le meilleur choix est de travailler ensemble, d'\u00e9changer des connaissances et des id\u00e9es pour atteindre le r\u00e9sultat attendu.\u00a0<\/p>\n<p>Voici quelques exemples d'utilisation de Terraform et d'Ansible dans le contexte de l'automatisation des tests et des outils que nous avons discut\u00e9s pr\u00e9c\u00e9demment :<\/p>\n<p>1. D\u00e9crire via Terraform les caract\u00e9ristiques et param\u00e8tres n\u00e9cessaires des VMs et des clusters.<\/p>\n<p>2. Installer avec Ansible les outils n\u00e9cessaires pour les tests : docker, Selenoid, Selenium Grid et charger les versions n\u00e9cessaires des navigateurs\/\u00e9mulateurs.<\/p>\n<p>3. D\u00e9crire via Terraform les caract\u00e9ristiques de la VM sur laquelle le GitLab Runner sera ex\u00e9cut\u00e9.<\/p>\n<p>4. Installer avec Ansible GitLab Runner et les outils associ\u00e9s n\u00e9cessaires, d\u00e9finir les param\u00e8tres et configurations.<\/p>\n<h3>Illustration de l'\u00e9tat actuel de l'infrastructure<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Liens pour \u00e9tude :<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">Terraform<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\/\">Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.hashicorp.com\/resources\/ansible-terraform-better-together\">Ansible et Terraform mieux ensemble<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">Un Guide Complet sur Terraform<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c\">Pourquoi nous utilisons Terraform plut\u00f4t que Chef, Puppet, Ansible, SaltStack ou CloudFormation<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/solutions\/infrastructure-as-code\">GCP : IaC<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Outils similaires<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.chef.io\/\">Chef<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/\">Puppet<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saltstack.com\/\">SaltStack<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex><\/li>\n<\/ul>\n<h2>R\u00e9capitulons !<\/h2>\n<p><\/p>\n<p><strong>\u00c9tape<\/strong><br \/>\n<strong>Technologie<\/strong><br \/>\n<strong>Outils<\/strong><br \/>\n<strong>Valeur pour l'infrastructure d'automatisation<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nEx\u00e9cution locale<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>Outils les plus populaires pour le web et le mobile<\/li>\n<li>Support de nombreux langages et plateformes (y compris Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nSyst\u00e8mes de contr\u00f4le de version\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Avantages similaires avec le code de d\u00e9veloppement<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nConteneurisation<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Ex\u00e9cution parall\u00e8le des tests<\/li>\n<li>Environnements isol\u00e9s<\/li>\n<li>Mise \u00e0 jour des versions simple et flexible<\/li>\n<li>Arr\u00eat dynamique des ressources inutilis\u00e9es<\/li>\n<li>Facilit\u00e9 de configuration<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Les tests font partie du pipeline<\/li>\n<li>Retour d'information rapide<\/li>\n<li>Visibilit\u00e9 pour l'ensemble de l'entreprise \/ de l'\u00e9quipe<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nPlateformes cloud<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Ressources \u00e0 la demande (nous payons uniquement quand n\u00e9cessaires)<\/li>\n<li>Facile \u00e0 g\u00e9rer et \u00e0 mettre \u00e0 jour<\/li>\n<li>Visibilit\u00e9 et contr\u00f4le de toutes les ressources<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrchestration<br \/>\nKubernetes<br \/>\nDans le contexte des conteneurs avec navigateurs\/\u00e9mulateurs \u00e0 l'int\u00e9rieur des pods :<\/p>\n<ul>\n<li>Mise \u00e0 l'\u00e9chelle \/ autoscaling<\/li>\n<li>Auto-r\u00e9cup\u00e9ration<\/li>\n<li>Mises \u00e0 jour et retours en arri\u00e8re sans interruptions<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructure en tant que code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Avantages similaires avec l'infrastructure de d\u00e9veloppement<\/li>\n<li>Tous les avantages de la versionnage du code<\/li>\n<li>Facilit\u00e9 d'apporter des modifications et de maintenir<\/li>\n<li>Enti\u00e8rement automatis\u00e9<\/li>\n<\/ul>\n<p><\/p>\n<h2>Diagrammes de cartes heuristiques : l'\u00e9volution de l'infrastructure<\/h2>\n<p>\n\u00e9tape 1 : Local<br \/>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00e9tape 2 : VCS<br \/>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00e9tape 3 : Conteneurisation\u00a0<br \/>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00e9tape 4 : CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00e9tape 5 : Plateformes Cloud<br \/>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00e9tape 6 : Orchestration<br \/>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00e9tape 7 : IaC<br \/>\n<img decoding=\"async\" alt=\"Les outils DevOps ne sont pas seulement pour DevOps. Le processus de construction d&#039;une infrastructure d&#039;automatisation des tests \u00e0 partir de z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Et apr\u00e8s ?<\/h2>\n<p>\nAinsi, c'est la fin de l'article. Mais en conclusion, j'aimerais \u00e9tablir avec vous quelques accords.<\/p>\n<p><u>De votre part<\/u><br \/>\n Comme mentionn\u00e9 au d\u00e9but, je souhaite que l'article soit utile et vous aide \u00e0 appliquer les connaissances acquises dans le travail r\u00e9el. Je pense \u00e0 nouveau \u00e0<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> un lien vers un guide pratique<\/a><\/noindex>.<\/p>\n<p>Mais m\u00eame apr\u00e8s cela, ne vous arr\u00eatez pas, pratiquez, \u00e9tudiez les liens pertinents et les livres, d\u00e9couvrez comment cela fonctionne dans votre entreprise, trouvez des domaines \u00e0 am\u00e9liorer et participez-y. Bonne chance !<\/p>\n<p><u>De ma part<\/u><\/p>\n<p>Comme le titre l'indique, ce n'\u00e9tait que la premi\u00e8re partie. Bien que ce soit assez long, d'importants sujets demeurent \u00e0 explorer. Dans la deuxi\u00e8me partie, je pr\u00e9vois d'examiner l'infrastructure d'automatisation dans le contexte d'IOS. En raison des restrictions d'Apple concernant le lancement des simulateurs IOS uniquement sur des syst\u00e8mes macOS, notre ensemble de solutions est limit\u00e9. Par exemple, nous ne pouvons pas utiliser Docker pour ex\u00e9cuter le simulateur ni des clouds publics pour lancer des machines virtuelles. Mais cela ne signifie pas qu'il n'y a pas d'autres alternatives. Je vais essayer de vous tenir inform\u00e9s des solutions de pointe et des outils modernes !<\/p>\n<p>Je n'ai \u00e9galement pas mentionn\u00e9 certains sujets assez vastes li\u00e9s \u00e0 la surveillance. Dans la partie 3, je vais examiner les outils de surveillance les plus populaires pour l'infrastructure, ainsi que les donn\u00e9es et m\u00e9triques \u00e0 prendre en compte.<\/p>\n<p>Et enfin. \u00c0 l'avenir, je pr\u00e9vois de publier un cours vid\u00e9o sur la construction d'une infrastructure de test et des outils populaires. Actuellement, il y a pas mal de cours et de conf\u00e9rences sur le DevOps sur Internet, mais tout le contenu est pr\u00e9sent\u00e9 dans le contexte du d\u00e9veloppement, pas de l'automatisation des tests. J'ai vraiment besoin de retours sur l'int\u00e9r\u00eat et la valeur d'un tel cours pour la communaut\u00e9 des testeurs et des automatiseurs. Merci d'avance !<\/h3>\n<\/h3>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497918\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\u00a0\u00abDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0438, \u0446\u0438\u0442\u0430\u0442\u044b \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a. \u0416\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f! \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78677,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-21T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-21T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Outils DevOps pas seulement pour DevOps. Le processus de construction d'une infrastructure d'automatisation des tests \u00e0 partir de z\u00e9ro | ProHoster","description":"Partie 1 : Web \/ Android Remarque : cet article est une traduction en russe de l'article original","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster","og:description":"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-21T05:42:22+00:00","article:modified_time":"2020-04-21T05:42:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78676","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:53:59","updated":"2022-10-05 06:14:03","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}