{"id":3445,"date":"2019-09-06T09:03:44","date_gmt":"2019-09-06T07:03:44","guid":{"rendered":"http:\/\/itcraftapps.com\/pl\/?p=3445"},"modified":"2020-03-04T13:41:14","modified_gmt":"2020-03-04T12:41:14","slug":"testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium","status":"publish","type":"post","link":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/","title":{"rendered":"Testy UI w technologii Continuous Integration &#8211; Jenkins + Fastlane + Appium"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n    {\n      \"@context\": \"http:\/\/schema.org\",\n      \"@type\": \"Blog\",\n      \"name\": \"itCraftapps.com - Mobile App Development Blog\",\n      \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\"\n    }\n  <\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"http:\/\/schema.org\",\n  \"@type\": \"Article\",\n  \"mainEntityOfPage\": {\n  \"@type\": \"WebPage\",\n  \"@id\": \"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/\"\n  },\n  \"headline\": \"Co to jest Outsourcing IT i na czym polega?\",\n \n    \"image\": [\n{\n\t\n  \"@type\": \"ImageObject\", \n  \"contentUrl\": \"installing-additional-components.png\",  \"url\":\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/installing-additional-components.png\",\n  \"description\": \"Testy UI w technologii Continuous Integration \u2013 Jenkins + Fastlane + Appium\",\n  \"name\": \"Testy UI w technologii Continuous Integration\"\n\n}\n  \n  ],\n  \n  \"datePublished\": \"2019-09-06\",\n  \"dateModified\": \"2020-03-04\",\n  \"author\": {\n  \"@type\": \"Person\",\n  \"name\": \"Sobies\u0142aw Gabara\",\n  \"jobTitle\": \"iOS Developer\",\n  \"description\": \"iOS Developer at itCraft\"\n\n  },\n  \"publisher\": {\n  \"@type\": \"Organization\",\n  \"name\": \"itCraftapps.com\",\n  \"logo\": {\n  \"@type\": \"ImageObject\",\n  \"url\": \"https:\/\/wp-test.itcraft.pl\/wp-content\/uploads\/2019\/04\/placeholder-post.png\"\n  },\n  \"description\": \"itCraftapps.com - Mobile App Development\"\n}}\n<\/script>\n\n\n\n<p>Testy UI to przydatne narz\u0119dzie zw\u0142aszcza wtedy gdy mamy ju\u017c du\u017ca aplikacje i przed opublikowaniem nowej wersji zale\u017cy nam na przeprowadzeniu test\u00f3w regresyjnych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Spis tre\u015bci<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#1\">Symulatory testowe<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#2\">Narz\u0119dzia<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#3\">Zaczynamy!<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#4\">Podsumowanie<\/a><\/span><\/li><\/ol>\n\n\n\n<br \/>\n\n\n\n<p>Z naszej praktyki wynika \u017ce do\u015b\u0107 \u0142atwo jest spowodowa\u0107 sytuacj\u0119, \u017ce nowo napisany fragment kodu powoduje b\u0142\u0119dy w dzia\u0142aniu wcze\u015bniej napisanych modu\u0142\u00f3w. Teoretycznie takie sytuacje nie powinny mie\u0107 miejsca, ale jeste\u015bmy tylko lud\u017ami i pope\u0142niamy b\u0142\u0119dy, a testy UI s\u0105 jedn\u0105 z kilku warstw testowania (obok test\u00f3w jednostkowych i integracyjnych) przed uznaniem, \u017ce kolejna wersja aplikacji spe\u0142nia standardy jako\u015bci. Oczywi\u015bcie mo\u017cna takie testy przeprowadza\u0107 manualnie, ale powoduje to zu\u017cycie o wiele wi\u0119kszej ilo\u015bci czasu, zw\u0142aszcza gdy mamy do czynienia z aplikacja wieloplatformow\u0105 (<a href=\"https:\/\/itcraftapps.com\/pl\/zatrudnij-najlepszych-programistow-ios-do-swojego-projektu\/\">IOS<\/a> i Android).<\/p>\n\n\n\n<p>O wiele lepszym rozwi\u0105zaniem wydaje si\u0119 wi\u0119c po\u015bwi\u0119cenie tego czasu na napisanie test\u00f3w UI, kt\u00f3re w kolejnych update-ach aplikacji niemal bez straty czasu na ponowne testy za\u0142atwi\u0105 ten problem. Testy wykonuj\u0105 te same czynno\u015bci kt\u00f3re wykona\u0142by tester sprawdzaj\u0105c poprawno\u015b\u0107 dzia\u0142ania newralgicznych miejsc aplikacji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"1\">Symulatory testowe<\/h2>\n\n\n\n<p>W poni\u017cszym artykule skupi\u0119 si\u0119 na om\u00f3wieniu test\u00f3w UI w odniesieniu do platformy IOS. Podane szczeg\u00f3\u0142y techniczne realizacji r\u00f3\u017cni\u0105 si\u0119 nieco dla platformy Android i IOS. G\u0142\u00f3wnym celem by\u0142o stworzenie systemu potrafi\u0105cego przetestowa\u0107 obydwie te platformy, a opisane poni\u017cej techniki tycz\u0105 si\u0119 tylko jednej &#8211; IOS.<\/p>\n\n\n\n<p>Testowa\u0107 b\u0119dziemy na symulatorach &#8211; mo\u017cliwe jest podpi\u0119cie fizycznych urz\u0105dze\u0144 i testowanie na nich, ale opcja z symulatorami na pewno jest prostsza do realizacji &#8211; mo\u017cemy przetestowa\u0107 nasz\u0105 aplikacj\u0119 na dowolnym urz\u0105dzeniu Apple z praktycznie dowoln\u0105 zainstalowana wersj\u0105 systemu IOS. W przypadku testowania na fizycznych urz\u0105dzeniach mo\u017ce to by\u0107 nieco k\u0142opotliwe (ale wykonalne \ud83d\ude42 )<br \/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"2\">Narz\u0119dzia<\/h2>\n\n\n\n<p>Zak\u0142adam, \u017ce czytelnik ma podstawowa wiedz\u0119 o ka\u017cdym z narz\u0119dzi opisanych w artykule, ale tak czy tak dorzuc\u0119 par\u0119 link\u00f3w i kr\u00f3tkie opisy poszczeg\u00f3lnych element\u00f3w uk\u0142adanki :). Wszystkie opisane narz\u0119dzia mamy zainstalowane na wydzielonej maszynie MacOs, kt\u00f3ra realizuje poni\u017csze zadania. Dodatkowo mamy tam r\u00f3wnie\u017c Android Studio, kt\u00f3re zapewnia niezb\u0119dne narz\u0119dzia do budowania wersji Android oraz oczywi\u015bcie Xcode wraz z command line tools, kt\u00f3re pe\u0142ni analogiczna funkcje dla platformy IOS.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"224\" height=\"224\" src=\"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server.jpg\" alt=\"Jenkins\" class=\"wp-image-3452\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server.jpg 224w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server-150x150.jpg 150w\" sizes=\"(max-width: 224px) 100vw, 224px\" \/><\/figure><\/div>\n\n\n\n<p>Jenkis &#8211; Jenkins is an open source automation server written in Java &#8211; m\u00f3wi Wikipedia. Kiedy posiadamy oddzielna maszyn\u0119 do budowania aplikacji, Jenkins jest jednym z mo\u017cliwych softu do zastosowania. Alternatyw jest wiele &#8211; odsy\u0142am do artyku\u0142u np. <a rel=\"noreferrer noopener nofollow\" aria-label=\"tutaj (otwiera si\u0119 na nowej zak\u0142adce)\" href=\"https:\/\/www.computerworlduk.com\/galleries\/devops\/alternatives-jenkins-3666105\/\" target=\"_blank\">tutaj<\/a> &#8211; . Wszystkiego o Jenkinsie dowiesz si\u0119<a rel=\"noreferrer noopener nofollow\" aria-label=\" tutaj  (otwiera si\u0119 na nowej zak\u0142adce)\" href=\"https:\/\/jenkins.io\/\" target=\"_blank\"> tutaj<\/a> .<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"225\" height=\"225\" src=\"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Fastlane-logo.png\" alt=\"Fastlane\" class=\"wp-image-3450\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Fastlane-logo.png 225w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Fastlane-logo-150x150.png 150w\" sizes=\"(max-width: 225px) 100vw, 225px\" \/><\/figure><\/div>\n\n\n\n<p>Fastlane &#8211; to zestaw skrypt\u00f3w napisanych w Ruby kt\u00f3re niesamowicie u\u0142atwiaj\u0105 i automatyzuj\u0105 proces tworzenia builda. Posiada sporo mo\u017cliwo\u015bci i mo\u017ce by\u0107 u\u017cywany zar\u00f3wno na platformie IOS jak i Android. Po <a rel=\"noreferrer noopener nofollow\" aria-label=\"szczegoly odsylam tutaj (otwiera si\u0119 na nowej zak\u0142adce)\" href=\"https:\/\/fastlane.tools\/\" target=\"_blank\">szczeg\u00f3\u0142y odsy\u0142am tutaj<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"275\" height=\"183\" src=\"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Appium-logo.png\" alt=\"Appium\" class=\"wp-image-3448\"\/><\/figure><\/div>\n\n\n\n<p><a rel=\"noreferrer noopener nofollow\" aria-label=\"Appium (otwiera si\u0119 na nowej zak\u0142adce)\" href=\"http:\/\/appium.io\/\" target=\"_blank\">Appium<\/a> &#8211; to platforma do realizowania test\u00f3w UI zar\u00f3wno dla IOS jak i Android (). Niew\u0105tpliwa zaleta appium jest to, \u017ce za pomoc\u0105 jednego kodu testuj\u0105cego z niewielkimi modyfikacjami mo\u017cemy przetestowa\u0107 dwie platformy, co jakby nie by\u0142o daje oszcz\u0119dno\u015b\u0107 czasu.&nbsp;<\/p>\n\n\n\n<p>OK, mamy wszystkie elementy uk\u0142adanki &#8211; jak po\u0142\u0105czy\u0107 je tak, aby da\u0142y w rezultacie system automatycznego testowania ?&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"3\">Zaczynamy!<\/h2>\n\n\n\n<p>\tPierwszym krokiem jest napisanie\/stworzenie skryptu testuj\u0105cego. Temat ten nie jest przedmiotem tego tekstu wi\u0119c zak\u0142adam, \u017ce posiadasz ju\u017c taki skrypt appium umieszczony na repozytorium git. Aby m\u00f3c go uruchamia\u0107 na Jenkinsie nale\u017cy utworzy\u0107 zadanie, zaci\u0105gaj\u0105ce to repozytorium na maszyn\u0119 produkuj\u0105c\u0105 buildy a nast\u0119pnie wykonanie skryptu.<\/p>\n\n\n\n<p>Nale\u017cy pami\u0119ta\u0107 o odrzuceniu \u015bcie\u017cki do jdk do zmiennej PATH w sekcji \u201cInject environment variables to the build process\u201d :&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JAVA_HOME=\/Library\/Java\/JavaVirtualMachines\/jdk1.8.0_171.jdk\/Contents\/Home\nPATH=$JAVA_HOME\/bin:$PATH<\/code><\/pre>\n\n\n\n<p> A oto sama tre\u015b\u0107 sekcji \u201cExecute command\u201d :  <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"-------------- TESTS IOS --------------\"\necho \"run appium\"\nappium --address 0.0.0.0 --port 4723 &amp;\nsleep 5\n\necho \"run mvn test\"\ncd \/Users\/jenkins\/project-dev-tests-ios\/TestAutomation\/\nmvn test -Dsurefire.suiteXmlFiles=testng-ios.xml -Dplatform=iOS -DversionOS=12.2 -DdeviceName='iPhone X'\n\necho \"kill appium\"\nkill $(ps aux | grep 'appium' | awk '{print $2}')\n\necho \"kill simulator iPhone X\"\nkillall \"Simulator\"<\/code><\/pre>\n\n\n\n<p>Startujemy appium, przechodzimy do folderu gdzie mamy skrypt testuj\u0105cy i uruchamiamy maven z parametrami wskazuj\u0105cymi na to jaki rodzaj symulatora ma by\u0107 uruchomiony. Po zako\u0144czeniu test\u00f3w nast\u0119puje zamkni\u0119cie appium jak i symulatora.&nbsp;<\/p>\n\n\n\n<p>Wewn\u0105trz skryptu testuj\u0105cego nale\u017cy przekaza\u0107 jak\u0105\u015b \u015bcie\u017ck\u0119 do pliku .app aplikacji &#8211; w ko\u0144cu appium musi mie\u0107 aplikacj\u0119 do przetestowania. Zapewne wiesz, \u017ce generuj\u0105c archiwum z poziomu Xcode a nast\u0119pnie je importuj\u0105c otrzymujemy w efekcie <a rel=\"noreferrer noopener nofollow\" aria-label=\" (otwiera si\u0119 na nowej zak\u0142adce)\" href=\"https:\/\/en.wikipedia.org\/wiki\/.ipa\" target=\"_blank\">plik z rozszrzeniem .ipa<\/a> . Je\u017celi jednak zerkniesz do jego wn\u0119trza (ipa to tak naprawd\u0119 package &#8211; zmie\u0144 rozszerzenie na zip i wypakuj &#8211; sam zobaczysz \ud83d\ude42 ) to zobaczysz, \u017ce jest tam plik .app, kt\u00f3ry jest w\u0142a\u015bnie potrzebny jako wej\u015bcie dla appium. Tylko jak zautomatyzowa\u0107 tworzenie pliku .app i wskazanie go skryptowi appium ?&nbsp;<\/p>\n\n\n\n<p> Tutaj z pomoc\u0105 przychodzi Fastlane. Ustalili\u015bmy jeden wsp\u00f3lny folder dla fastlane i appium &#8211; Fastlane b\u0119dzie tam wrzuca\u0142 zrobione buildy, a appium b\u0119dzie stamt\u0105d pobiera\u0142o plik app do test\u00f3w. Fastlane posiada sw\u00f3j plik konfiguracyjny fastfile &#8211; dopiszemy tam lane, kt\u00f3ry zrobi to czego potrzebujemy &#8211; wykreuje plik app i wrzuci go do wskazanego folderu. Skorzystamy w tym celu z polecenia fastlane xc build. Oto fragment naszego fastfile:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>desc \"Debug simulator build for automated UI appium tests\"\n        lane :dev_sim do\n        clear_derived_data\n        xcbuild(\n            workspace: \"Project.xcworkspace\",\n            scheme: \"PROJECT-Dev\",\n            configuration: \"Debug\",\n            xcargs: \"-sdk iphonesimulator SYMROOT='~\/appium_test_builds\/ios\/project' -UseModernBuildSystem=NO\"\n        )\n    end<\/code><\/pre>\n\n\n\n<p>Na pocz\u0105tku czy\u015bcimy folder derived data &#8211; to przydatna funkcja &#8211; nie raz zdarza si\u0119 \u017ce po jakich\u015b zmianach projekt nie chce si\u0119 skompilowa\u0107 i pomaga tylko clean.&nbsp;<\/p>\n\n\n\n<p>Polecenie build ma kilka parametr\u00f3w &#8211; nazwa workspace, nazwa schematu, typ konfiguracji i ostatni &#8211; dla nas najwa\u017cniejszy parametr &#8211; xcargs. Tutaj mo\u017cemy podstawi\u0107 argumenty, kt\u00f3re trafiaj\u0105 bezpo\u015brednio do xcodowego polecenie budowania builda <strong>xcodebuild.<\/strong> W naszym przypadku jest to wskazanie typu SDK na symulator, podanie \u015bcie\u017cki do miejsca gdzie sk\u0142adowane maj\u0105 by\u0107 pliki wynikowe (SYMROOT) oraz skorzystanie z legacy build system.&nbsp;<\/p>\n\n\n\n<p>argument -sdk iphonesimulator ka\u017ce u\u017cy\u0107 najnowszej wersji sdk dost\u0119pnego na naszej maszynie &#8211; w chwili obecnej to ios 12.2, mo\u017cna jednak wskazywa\u0107 dowolne sdk zainstalowane w Xcode. Aby zainstalowa\u0107 dodatkowe symulatory wejd\u017a w Xcode\/Preferences\/Components.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"802\" height=\"547\" src=\"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/installing-additional-components.png\" alt=\"Xcode \" class=\"wp-image-3451\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/installing-additional-components.png 802w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/installing-additional-components-300x205.png 300w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/installing-additional-components-768x524.png 768w\" sizes=\"(max-width: 802px) 100vw, 802px\" \/><\/figure>\n\n\n\n<p>Mamy ju\u017c nowiutki lane w pliku fastfile &#8211; mo\u017cemy z niego skorzysta\u0107 przy budowaniu wersji na Jenkinsie. Nale\u017cy w tym celu utworzy\u0107 zadanie Jenkinsa, i w sekcji \u201cExecute shell\u201d wrzuci\u0107 :&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bundle exec fastlane dev_sim<\/code><\/pre>\n\n\n\n<p>W przypadku pracy z fastlane, samo fastlane zwraca uwag\u0119 w outpucie command line, \u017ce nale\u017cy zadba\u0107 o obecno\u015b\u0107 pewnych zmiennych \u015brodowiskowych &#8211; dodajemy je w sekcji \u201cInject environment variables to the build process\u201d:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LANG=en_US.UTF-8\nLANGUAGE=en_US.UTF-8\nLC_ALL=en_US.UTF-8<\/code><\/pre>\n\n\n\n<p>\n\nMamy ju\u017c zadanie Jenkinsa tworz\u0105ce plik app niezb\u0119dny do testowania, mamy r\u00f3wnie\u017c zadanie uruchamiaj\u0105ce appium i wykonuj\u0105ce testy. Nale\u017ca\u0142oby jeszcze po\u0142\u0105czy\u0107 je jako\u015b, aby nie trzeba by\u0142o manualnie uruchamia\u0107 dw\u00f3ch zada\u0144. Mo\u017cemy to zrobi\u0107 u\u017cywaj\u0105c fajnej opcji Jenkinsa &#8211; Build Triggers. \n\n<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"947\" height=\"371\" src=\"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Build-Triggers-in-Jenkins.png\" alt=\"Build Triggers\" class=\"wp-image-3449\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Build-Triggers-in-Jenkins.png 947w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Build-Triggers-in-Jenkins-300x118.png 300w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Build-Triggers-in-Jenkins-768x301.png 768w\" sizes=\"(max-width: 947px) 100vw, 947px\" \/><\/figure>\n\n\n\n<p>&nbsp;Definiuj\u0105c w naszym zadaniu testuj\u0105cym triggerowanie tego zadania gdy inny projekt zako\u0144czy si\u0119 powodzeniem tworzymy niejako \u0142a\u0144cuch zada\u0144 na Jenkins. Je\u017celi proces tworzenia pliku app z naszej aplikacji zako\u0144czy si\u0119 powodzeniem &#8211; uruchamia si\u0119 dla niego test UI.<\/p>\n\n\n\n<p>I zrobione &#8211; DZIA\u0141A \ud83d\ude42&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"4\">Co dalej?&nbsp;<\/h2>\n\n\n\n<p>Poprawne wykonanie test\u00f3w UI oznacza \u017ce obecnie testowana wersja jest z du\u017c\u0105 doz\u0105 prawdopodobie\u0144stwa pozbawiona b\u0142\u0119d\u00f3w regresyjnych. R\u00f3wnie dobrze mo\u017cna by wi\u0119c doda\u0107 do naszego \u0142a\u0144cucha zada\u0144 automatyczne tworzenie builda typu release i wrzucanie go na sklep Apple do review. To ju\u017c jednak jest temat na zupe\u0142nie inn\u0105 histori\u0119 :).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8222;image&#8221;: [ { &#8222;@type&#8221;: &#8222;ImageObject&#8221;, &#8222;contentUrl&#8221;: &#8222;installing-additional-components.png&#8221;, &#8222;url&#8221;:&#8221;https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/installing-additional-components.png&#8221;, &#8222;description&#8221;: &#8222;Testy UI w technologii Continuous Integration \u2013 Jenkins + Fastlane + Appium&#8221;, &#8222;name&#8221;: &#8222;Testy UI w technologii Continuous Integration&#8221; } ], &#8222;datePublished&#8221;: &#8222;2019-09-06&#8221;, &#8222;dateModified&#8221;: &#8222;2020-03-04&#8221;, &#8222;author&#8221;: { &#8222;@type&#8221;: &#8222;Person&#8221;, &#8222;name&#8221;: &#8222;Sobies\u0142aw Gabara&#8221;, &#8222;jobTitle&#8221;: &#8222;iOS Developer&#8221;, &#8222;description&#8221;: &#8222;iOS Developer at itCraft&#8221; }, &#8222;publisher&#8221;: { &#8222;@type&#8221;: &#8222;Organization&#8221;, &#8222;name&#8221;:&hellip;<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-3445","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-news"},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Testy UI w technologii Continuous Integration - Jenkins + Fastlane + Appium - itCraft blog<\/title>\n<meta name=\"description\" content=\"Automatyzuj testy UI w aplikacji iOS z Jenkinsem, Fastlanem i Appiumem. Oszcz\u0119dzaj czas i buduj lepsze aplikacje.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testy UI w technologii Continuous Integration - Jenkins + Fastlane + Appium - itCraft blog\" \/>\n<meta property=\"og:description\" content=\"Automatyzuj testy UI w aplikacji iOS z Jenkinsem, Fastlanem i Appiumem. Oszcz\u0119dzaj czas i buduj lepsze aplikacje.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/\" \/>\n<meta property=\"og:site_name\" content=\"Aplikacje mobilne i webowe dla firm | itCraft\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-06T07:03:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-03-04T12:41:14+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server.jpg\" \/>\n<meta name=\"author\" content=\"itcseo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Testy UI w technologii Continuous Integration - Jenkins + Fastlane + Appium - itCraft blog","description":"Automatyzuj testy UI w aplikacji iOS z Jenkinsem, Fastlanem i Appiumem. Oszcz\u0119dzaj czas i buduj lepsze aplikacje.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/","og_locale":"pl_PL","og_type":"article","og_title":"Testy UI w technologii Continuous Integration - Jenkins + Fastlane + Appium - itCraft blog","og_description":"Automatyzuj testy UI w aplikacji iOS z Jenkinsem, Fastlanem i Appiumem. Oszcz\u0119dzaj czas i buduj lepsze aplikacje.","og_url":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/","og_site_name":"Aplikacje mobilne i webowe dla firm | itCraft","article_published_time":"2019-09-06T07:03:44+00:00","article_modified_time":"2020-03-04T12:41:14+00:00","og_image":[{"url":"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server.jpg","type":"","width":"","height":""}],"author":"itcseo","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/","url":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/","name":"Testy UI w technologii Continuous Integration - Jenkins + Fastlane + Appium - itCraft blog","isPartOf":{"@id":"https:\/\/itcraftapps.com\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#primaryimage"},"image":{"@id":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#primaryimage"},"thumbnailUrl":"http:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server.jpg","datePublished":"2019-09-06T07:03:44+00:00","dateModified":"2020-03-04T12:41:14+00:00","author":{"@id":"https:\/\/itcraftapps.com\/pl\/#\/schema\/person\/d2fc85f8fb53798d0b727d373f9e39b7"},"description":"Automatyzuj testy UI w aplikacji iOS z Jenkinsem, Fastlanem i Appiumem. Oszcz\u0119dzaj czas i buduj lepsze aplikacje.","breadcrumb":{"@id":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#primaryimage","url":"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server.jpg","contentUrl":"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2019\/09\/Jenkins-open-source-automation-server.jpg","width":224,"height":224},{"@type":"BreadcrumbList","@id":"https:\/\/itcraftapps.com\/pl\/blog\/testy-ui-w-technologii-continuous-integration-jenkins-fastlane-appium\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/itcraftapps.com\/pl\/"},{"@type":"ListItem","position":2,"name":"Testy UI w technologii Continuous Integration &#8211; Jenkins + Fastlane + Appium"}]},{"@type":"WebSite","@id":"https:\/\/itcraftapps.com\/pl\/#website","url":"https:\/\/itcraftapps.com\/pl\/","name":"Aplikacje mobilne i webowe dla firm | itCraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itcraftapps.com\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/itcraftapps.com\/pl\/#\/schema\/person\/d2fc85f8fb53798d0b727d373f9e39b7","name":"itcseo","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/itcraftapps.com\/pl\/#\/schema\/person\/image\/","url":"https:\/\/itcraftapps.com\/pl\/wp-content\/litespeed\/avatar\/5\/8d5121d60f83294679f3ed7498971492.jpg?ver=1775153629","contentUrl":"https:\/\/itcraftapps.com\/pl\/wp-content\/litespeed\/avatar\/5\/8d5121d60f83294679f3ed7498971492.jpg?ver=1775153629","caption":"itcseo"},"url":"https:\/\/itcraftapps.com\/pl\/blog\/author\/itcseo\/"}]}},"_links":{"self":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/posts\/3445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/comments?post=3445"}],"version-history":[{"count":0,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/posts\/3445\/revisions"}],"wp:attachment":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/media?parent=3445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/categories?post=3445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/tags?post=3445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}