{"id":2010,"date":"2016-03-04T09:00:32","date_gmt":"2016-03-04T08:00:32","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=2010"},"modified":"2023-08-14T15:36:47","modified_gmt":"2023-08-14T13:36:47","slug":"automatyczne-testy-aplikacji-mobilnych-appium","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/automatyczne-testy-aplikacji-mobilnych-appium\/","title":{"rendered":"Automatyczne testy aplikacji mobilnych &#8211; Appium"},"content":{"rendered":"\n<p><a href=\"http:\/\/sii.pl\/offer-page\/testing\/\">Testowanie aplikacji mobilnych<\/a> r\u00f3\u017cni si\u0119 od testowania aplikacji internetowych czy desktopowych pod wieloma wzgl\u0119dami. Oczywi\u015bcie, inaczej b\u0119d\u0105 wygl\u0105da\u0107 testy aplikacji bankowych i gier &#8211; wszystko zale\u017cy od rodzaju aplikacji, jej g\u0142\u00f3wnych funkcjonalno\u015bci czy grona odbiorc\u00f3w.<\/p>\n\n\n\n<p>Du\u017ce znaczenie ma tak\u017ce platforma docelowa, na kt\u00f3rej pracuje aplikacja. Najcz\u0119\u015bciej rozwa\u017camy platformy Android i iOS, dlatego te\u017c w tej cz\u0119\u015bci zaprezentowany zostanie framework Appium, kt\u00f3ry udost\u0119pnia testy dla tych dw\u00f3ch wiod\u0105cych system\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/appium.png\"><img decoding=\"async\" width=\"300\" height=\"74\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/appium-300x74.png\" alt=\"Appium\" class=\"wp-image-2011\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/appium-300x74.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/appium.png 566w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<p><a href=\"http:\/\/appium.io\/\" rel=\"nofollow\" >Appium<\/a>&nbsp;jest narz\u0119dziem open-source s\u0142u\u017c\u0105cym do automatyzacji aplikacji natywnych, webowych oraz hybrydowych na platformach iOS oraz Android. Istotn\u0105 cech\u0105 Appium jest wieloplatformowo\u015b\u0107, umo\u017cliwia bowiem pisanie test\u00f3w na platformach iOS i Android przy pomocy tego samego API.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Filozofia Appium<\/strong><\/h2>\n\n\n\n<p>Ide\u0105 Appium jest, by testowanie aplikacji natywnych nie wymaga\u0142o dodawania specjalnych SDK czy te\u017c rekompilacji aplikacji. Powinni\u015bmy r\u00f3wnie\u017c mie\u0107 mo\u017cliwo\u015b\u0107 u\u017cycia preferowanych przez siebie narz\u0119dzi, j\u0119zk\u00f3w i praktyk. Appium to w pe\u0142ni otwarty projekt, stworzony tak, by zach\u0119ci\u0107 spo\u0142eczno\u015b\u0107 do udzia\u0142u w jego rozbudowie.&nbsp;Jak mo\u017cemy przeczyta\u0107 na stronie projektu, Appium zosta\u0142 zaprojektowaniu w celu mo\u017cliwo\u015bci zautomatyzowania test\u00f3w aplikacji mobilnych, zgodnie z filozofi\u0105 czterech nast\u0119puj\u0105cych za\u0142o\u017ce\u0144:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Nie ma potrzeby przekompilowywania oraz modyfikowania aplikacji, aby podda\u0107 j\u0105 automatyzacji.<\/li>\n\n\n\n<li><a href=\"http:\/\/sii.pl\/client-story\/testy-automatyczne-i-reczne-aplikacji-bankowych\/\">Testy automatyczne<\/a>\u00a0nie powinny by\u0107 ograniczone do okre\u015blonego j\u0119zyka frameworka.<\/li>\n\n\n\n<li>Framework s\u0142u\u017c\u0105cy do automatyzacji nie powinien wywa\u017ca\u0107 otwartych drzwi, je\u015bli chodzi o API automatyzacji.<\/li>\n\n\n\n<li>Framework powinien by\u0107 oprogramowaniem open-source.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Projekt Appium<\/strong><\/h2>\n\n\n\n<p>Zgodnie z zaprezentowanymi wy\u017cej czterema punktami, projekt Appium realizuje swoj\u0105 filozofi\u0119 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Appium korzysta z mechanizm\u00f3w, dostarczanych przez tw\u00f3rc\u00f3w&nbsp;iOS oraz Androida, dzi\u0119ki temu nie ma potrzeby kompilowania z jakim\u015b specyficznym kodem frameworka. Testowaniu poddawana jest dok\u0142adnie ta sama aplikacja, kt\u00f3r\u0105 stworzyli\u015bmy. I tak, w przypadku iOS wykorzystywany jest UIAutomation, dla Androida 4.2+ Google UiAutomator, a dla Androida 2.3+ Google Instrumentation (Instrumentation wspierany jest przez osobny projekt Selendroid).<\/li>\n\n\n\n<li>Mechanizmy dostarczane przez tw\u00f3rc\u00f3w iOS czy Andorida zosta\u0142y zawarte w API WebDriver. WebDriver okre\u015bla protok\u00f3\u0142 typu klient-serwer. Dzi\u0119ki architekturze klient-serwer, klient napisany w dowolnym j\u0119zyku mo\u017ce by\u0107 wykorzystywany do wysy\u0142ania odpowiednich \u017c\u0105da\u0144 HTTP do serwera. Na t\u0119 chwil\u0119 istniej\u0105 ju\u017c klienci napisani praktycznie w ka\u017cdym popularnym j\u0119zyku programowania.<\/li>\n\n\n\n<li>WebDriver sta\u0142 si\u0119 standardem, je\u015bli chodzi o automatyzacj\u0119 test\u00f3w w \u015brodowisku przegl\u0105darek internetowych. Tw\u00f3rcy Appium postanowili rozszerzy\u0107 tylko API o specyficzne metody s\u0142u\u017c\u0105ce testowaniu aplikacji mobilnych.<\/li>\n\n\n\n<li>Appium jest oprogramowaniem open-source<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Koncepcje Appium<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Architektura klient-server<\/strong><\/h3>\n\n\n\n<p>Sercem Appium jest serwer www wykorzystuj\u0105cy REST API. Odbiera on po\u0142\u0105czenia z klientem, nas\u0142uchuje polece\u0144 oraz wykonuje je na urz\u0105dzeniu mobilnym, dzi\u0119ki reakcji na odpowiedzi HTTP, mo\u017cemy pozna\u0107 wyniki wykonania danego polecenia. Zalet\u0105 tego typu architektury jest to, \u017ce kod testu mo\u017cemy napisa\u0107 w dowolnym j\u0119zyku, kt\u00f3ry posiada klienta, mo\u017cemy r\u00f3wnie\u017c sam serwer zainstalowa\u0107 na innym komputerze.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sesja<\/strong><\/h3>\n\n\n\n<p>Automatyzacja zawsze odbywa si\u0119 w ramach jednej sesji. Klient inicjuje sesj\u0119 z serwerem przez co tworzony jest identyfikator sesji, wykorzystywany dalej do przesy\u0142ania kolejnych polece\u0144.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Po\u017c\u0105dane mo\u017cliwo\u015bci<\/strong><\/h3>\n\n\n\n<p>Po\u017c\u0105dane mo\u017cliwo\u015bci to zestaw kluczy i warto\u015bci (tzw. map or hash) wysy\u0142anych do serwera Appium, kt\u00f3re m\u00f3wi\u0105 serwerowi kt\u00f3r\u0105 sesj\u0105 automatyzacji jeste\u015bmy zainteresowani. Mo\u017cemy r\u00f3wnie\u017c modyfikowa\u0107 r\u00f3\u017cne w\u0142a\u015bciwo\u015bci w czasie automatyzacji, przyk\u0142adowo mo\u017cemy ustawi\u0107 funkcj\u0119 safariAllowPopups na&nbsp;<em>true<\/em>, dzi\u0119ki czemu, podczas test\u00f3w w przegl\u0105darce Safari, mamy mo\u017cliwo\u015b\u0107 skorzystania z JavaScript, aby otworzy\u0107 nowe okno.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Appium Server<\/strong><\/h3>\n\n\n\n<p>Appium napisany jest w Node.js, dzi\u0119ki czemu mo\u017ce by\u0107 r\u00f3wnie\u017c zainstalowany ze \u017ar\u00f3de\u0142 lub zainstalowany bezpo\u015brednio z NPM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Klienci Appium<\/strong><\/h3>\n\n\n\n<p>Ogromn\u0105 zalet\u0105 s\u0105 biblioteki klienckie obs\u0142uguj\u0105ce rozszerzenia Appium do protoko\u0142u WebDriver, dost\u0119pne w popularnych j\u0119zykach np: Java, Ruby, Python, PHP, JavaScript, C#.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>GUI<\/strong><\/h3>\n\n\n\n<p>Dost\u0119pne s\u0105 nak\u0142adki graficzne na serwer Appium, kt\u00f3re u\u0142atwiaj\u0105 zar\u00f3wno instalacj\u0119 potrzebnego \u015brodowiska jak i identyfikacj\u0119 element\u00f3w w aplikacji mobilnej.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Por\u00f3wnanie framework\u00f3w<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/qqqq.jpg\"><img decoding=\"async\" width=\"1022\" height=\"470\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/qqqq.jpg\" alt=\"Por\u00f3wnanie Framework\u00f3w\" class=\"wp-image-2012\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/qqqq.jpg 1022w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/qqqq-300x138.jpg 300w\" sizes=\"(max-width: 1022px) 100vw, 1022px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Inne frameworki<\/strong><\/h2>\n\n\n\n<p><strong>Android:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Robolectric<\/li>\n\n\n\n<li>Siesta<\/li>\n\n\n\n<li>Spoon<\/li>\n\n\n\n<li>&#8230;<\/li>\n<\/ul>\n\n\n\n<p><strong>iOS:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>UI Automation<\/li>\n\n\n\n<li>KIF<\/li>\n\n\n\n<li>Jasmine<\/li>\n\n\n\n<li>Frank<\/li>\n\n\n\n<li>&#8230;<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Chcesz lepiej zrozumie\u0107 aplikacje i systemy, kt\u00f3re testujesz? Do\u0142\u0105cz do ModernTester, poznaj najpotrzebniejsze narz\u0119dzia, frameworki oraz j\u0119zyki programowania i \u0107wicz na specjalnie przygotowanych \u015brodowiskach testowych: <a href=\"https:\/\/moderntester.sii.pl\/\" rel=\"nofollow\" >Platforma e-learningowa ModernTester<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;2010&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;2&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;4.5\\\/5 ( votes: 2)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Automatyczne testy aplikacji mobilnych - Appium&quot;,&quot;width&quot;:&quot;125&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 125px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            4.5\/5 ( votes: 2)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Testowanie aplikacji mobilnych r\u00f3\u017cni si\u0119 od testowania aplikacji internetowych czy desktopowych pod wieloma wzgl\u0119dami. Oczywi\u015bcie, inaczej b\u0119d\u0105 wygl\u0105da\u0107 testy aplikacji &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/automatyczne-testy-aplikacji-mobilnych-appium\/\">Continued<\/a><\/p>\n","protected":false},"author":37,"featured_media":2014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[279,282,276,280,281,146],"class_list":["post-2010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-appium","tag-client","tag-framework","tag-gui","tag-server","tag-testing"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/Mobile-App-Testing-1.png","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2010"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=2010"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2010\/revisions"}],"predecessor-version":[{"id":23462,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2010\/revisions\/23462"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/2014"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=2010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=2010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=2010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}