{"id":895,"date":"2015-03-16T14:23:58","date_gmt":"2015-03-16T12:23:58","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=895"},"modified":"2015-03-17T13:14:30","modified_gmt":"2015-03-17T11:14:30","slug":"mise-en-place-dune-plateforme-dintegration-continue","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2015\/03\/16\/mise-en-place-dune-plateforme-dintegration-continue\/","title":{"rendered":"Mise en place d&rsquo;une plateforme d&rsquo;int\u00e9gration continue ( Partie 1 )"},"content":{"rendered":"<p>Afin de suivre le bon d\u00e9roulement de vos projets, il est important de pouvoir tester de mani\u00e8re r\u00e9guli\u00e8re que votre applications fonctionne bien.<br \/>\nCeci peut \u00eatre r\u00e9alis\u00e9 via la mise en place de tests unitaires et fonctionnels, d\u2019analyse de code etc&#8230;<\/p>\n<p>Pour suivre cela de mani\u00e8re optimale, la mise en place d&rsquo;une plateforme d&rsquo;int\u00e9gration continue est la suite logique de l&rsquo;\u00e9volution de votre projet d\u00e8s lors qu&rsquo;il atteint une taille importante, ou qu&rsquo;il comporte de nombreuses fonctionnalit\u00e9s sp\u00e9cifiques.<\/p>\n<p>Il existe plusieurs plateforme pour r\u00e9aliser cela, mais je vais me baser sur la plus connue : <strong>Jenkins<\/strong> (ex Hudson )<\/p>\n<p>L&rsquo;objectif \u00e0 la fin de ce guide est d&rsquo;avoir une plateforme de tests fonctionnels op\u00e9rationnelle.<br \/>\nCelle ci-sera bas\u00e9e sur <strong>phpunit<\/strong> et <strong>selenium<\/strong> et <strong>firefox<\/strong> en mode headless<br \/>\nLa proc\u00e9dure \u00e9tant assez longue, ce sujet va \u00eatre s\u00e9par\u00e9 en 2 articles :<\/p>\n<p>&#8211; Installation des \u00e9l\u00e9ments n\u00e9cessaires aux tests fonctionnels<br \/>\n&#8211; Installation et configuration de jenkins pour l\u2019ex\u00e9cution des tests fonctionnels<\/p>\n<p><strong>Installation des \u00e9l\u00e9ments n\u00e9cessaires aux tests fonctionnels.<\/strong><\/p>\n<p>( Nous partons du principe que la plateforme lamp est d\u00e9j\u00e0 install\u00e9e sur votre serveur, ainsi que git )<\/p>\n<p><strong>Phpunit<br \/>\n<\/strong><br \/>\n<em>PHPUnit est un framework de tests unitaires open source d\u00e9di\u00e9 au langage de programmation PHP. Cr\u00e9\u00e9 par Sebastian Bergmann, il int\u00e8gre les concepts communs aux biblioth\u00e8ques de tests unitaires xUnit.<\/em><\/p>\n<pre lang=\"bash\">#T\u00e9l\u00e9chargement de phpunit\r\nwget https:\/\/phar.phpunit.de\/phpunit.phar\r\n#Droits d'\u00e9x\u00e9cution sur le fichier\r\nchmod +x phunit.phar\r\n#D\u00e9placement dans les binaires locaux\r\nsudo mv phpunit.phar \/usr\/local\/bin\/phpunit\r\n<\/pre>\n<p>Pour v\u00e9rifier que Phpunit est fonctionnel, saisissez la commande suivante :<\/p>\n<pre lang=\"bash\">phpunit --version<\/pre>\n<p>Ceci doit vous afficher :<br \/>\n<em>PHPUnit 4.5.0 by Sebastian Bergmann and contributors.<\/em><\/p>\n<p><strong>Java<\/strong><br \/>\nSi java n&rsquo;est pas encore install\u00e9 sur votre poste vous pouvez l&rsquo;installer via la commande suivante :<\/p>\n<pre lang=\"bash\">sudo apt-get install default-jdk<\/pre>\n<p><strong>Selenium<\/strong><\/p>\n<p><em>Selenium est un outil d&rsquo;automatisation de tests navigateurs, il va nous permettre simuler les comportements utilisateurs.<\/em><\/p>\n<p>T\u00e9l\u00e9charger la derni\u00e8re version du serveur selenium\u00a0 depuis la page <a href=\"http:\/\/selenium-release.storage.googleapis.com\/index.html\" target=\"_blank\">http:\/\/selenium-release.storage.googleapis.com\/index.html<\/a><br \/>\nActuellement la derni\u00e8re version est la version <strong>2.45.0<\/strong><\/p>\n<pre lang=\"bash\">wget http:\/\/selenium-release.storage.googleapis.com\/2.45\/selenium-server-standalone-2.45.0.jar\r\n#droits d'ex\u00e9cution\r\nchmod +x selenium-server-standalone-2.45.0.jar\r\n#d\u00e9placement dans les binaires\r\nmv selenium-server-standalone-2.45.0.jar \/usr\/local\/bin\/selenium-server-standalone-2.45.0.jar\r\n<\/pre>\n<p><strong>Firefox<br \/>\n<\/strong><em>Il est n\u00e9cessaire d&rsquo;avoir un navigateur sur votre serveur, pour que Selenium puisse interagir avec les pages web souhait\u00e9es, ce sera le r\u00f4le de firefox.<\/em><br \/>\n<em>Selenim g\u00e8re de mani\u00e8re native firefox, mais il est \u00e9galement possible d&rsquo;utiliser chrome, ou m\u00eame internet explorer ( sur les plateforme windows )<\/em><\/p>\n<pre lang=\"bash\">sudo apt-get install firefox<\/pre>\n<p><strong>Xvfb<\/strong><br \/>\n<em>Ubuntu server, ne disposant pas d&rsquo;interface graphique, il va \u00eatre n\u00e9cessaire d&rsquo;installer Xvfb qui va permettre de lancer une application graphique sans serveur X<\/em><\/p>\n<pre lang=\"bash\">sudo apt-get install xvfb\r\n\r\n<\/pre>\n<p><strong>Tests de notre installation<\/strong><\/p>\n<p>Les outils n\u00e9cessaires sont \u00e0 pr\u00e9sents install\u00e9 sur le serveur.<br \/>\nNous allons donc tester que tout fonctionne correctement.<\/p>\n<p>Pour ce la nous vous pouvez t\u00e9l\u00e9charger le projet test_phpunit_selenium via la commande suivante<\/p>\n<pre lang=\"bash\">git clone https:\/\/github.com\/nenes25\/phpunit_selenium_sample.git test_phpunit_selenium\/<\/pre>\n<p>Rendez-vous dans le dossier test_phpunit_selenium\/ et ex\u00e9cuter la commande<\/p>\n<pre lang=\"bash\">phpunit BasicTest.php<\/pre>\n<p>Si le r\u00e9sultat suivant apparait, c&rsquo;est que phpunit est op\u00e9rationnel<\/p>\n<pre lang=\"bash\">.\r\nTime: 236 ms, Memory: 2.75Mb\r\nOK (1 test, 5 assertions)\r\n<\/pre>\n<p>Passons aux tests avec selenium<br \/>\nPour commencer il faut \u00e9x\u00e9cuter xvfb pour d\u00e9terminer un \u00e9cran d&rsquo;affichage<\/p>\n<pre lang=\"bash\" escaped=\"true\">sudo \/usr\/bin\/Xvfb :99 -ac -screen 0 1024x768x8 &amp;\r\nexport DISPLAY=:99\r\n<\/pre>\n<p>Il faut ensuite lancer le serveur selenium via la commande suivante<\/p>\n<pre lang=\"bash\" escaped=\"true\">java -jar \/usr\/local\/bin\/selenium-server-standalone-2.45.0.jar &amp;<\/pre>\n<p>Puis lancer le test<\/p>\n<pre lang=\"bash\">phpunit SeleniumTest.php<\/pre>\n<p>Si le r\u00e9sultat est le suivant, tout fonctionne bien \ud83d\ude42<\/p>\n<pre lang=\"bash\">PHPUnit 4.5.0 by Sebastian Bergmann and contributors.\r\n.F\r\nTime: 14.01 seconds, Memory: 3.50Mb\r\nThere was 1 failure:\r\n1) SeleniumTest::testTitleKo\r\nFailed asserting that two strings are equal.\r\n--- Expected\r\n+++ Actual\r\n@@ @@\r\n-'Wrong Title'\r\n+'Google'\r\n#path specifique au fichier de test\r\n\/home\/jenkins\/public_html\/test_phpunit_selenium\/SeleniumTest.php:28\r\nFAILURES!\r\nTests: 2, Assertions: 2, Failures: 1.<\/pre>\n<p>Les bases de notre plateforme d&rsquo;int\u00e9gration continue sont en place, la prochaine \u00e9tape sera d&rsquo;installer et de configurer jenkins pour lancer ces tests automatiquement \u00e0 la fr\u00e9quence souhaite.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Afin de suivre le bon d\u00e9roulement de vos projets, il est important de pouvoir tester de mani\u00e8re r\u00e9guli\u00e8re que votre applications fonctionne bien. Ceci peut \u00eatre r\u00e9alis\u00e9 via la mise en place de tests unitaires et fonctionnels, d\u2019analyse de code etc&#8230; Pour suivre cela de mani\u00e8re optimale, la mise en place d&rsquo;une plateforme d&rsquo;int\u00e9gration continue [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[246,245,254,6],"tags":[336,335,333,334],"class_list":["post-895","post","type-post","status-publish","format-standard","hentry","category-magento-2","category-prestashop-2","category-serveurs-dedies","category-trucs-et-astuces","tag-integration-continue","tag-jenkins","tag-phpunit","tag-selenium"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=895"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/895\/revisions"}],"predecessor-version":[{"id":904,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/895\/revisions\/904"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}