{"id":2005,"date":"2016-03-22T09:17:15","date_gmt":"2016-03-22T08:17:15","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=2005"},"modified":"2023-08-14T15:20:55","modified_gmt":"2023-08-14T13:20:55","slug":"automatyczne-testy-aplikacji-mobilnych-czesc-2","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/automatyczne-testy-aplikacji-mobilnych-czesc-2\/","title":{"rendered":"Automatyczne testy aplikacji mobilnych &#8211; cz\u0119\u015b\u0107 2"},"content":{"rendered":"\n<p>Dost\u0119pne aplikacje mobilne nie przypominaj\u0105 ju\u017c aplikacji znanych z dawnych telefon\u00f3w kom\u00f3rkowych. Wraz z rozwijaj\u0105cym si\u0119 rynkiem i post\u0119pem technologicznym zmieniaj\u0105 si\u0119 wymagania i oczekiwania odbiorc\u00f3w wzgl\u0119dem produktu. Dlatego wa\u017cne jest, aby aplikacje spe\u0142nia\u0142y wiele oczekiwa\u0144 jak np. synchronizacja z chmur\u0105 czy nowoczesny design. Dlatego dzi\u015b dalej rozwa\u017ca\u0107 b\u0119dziemy frameworki u\u0142atwiaj\u0105ce sprawdzanie, czy aplikacja stawia na jak najlepszy user experience oraz na optymalizacj\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Calabash<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/calabash-logo.png\"><img decoding=\"async\" width=\"215\" height=\"59\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/calabash-logo.png\" alt=\"calabash testing\" class=\"wp-image-2246\"\/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Calabash jest frameworkiem umo\u017cliwiaj\u0105cym pisanie automatycznych test\u00f3w akceptacyjnych UI w Cucumber na platformy iOS i Android. Dop\u00f3ki Calabash jest \u015bci\u015ble zintegrowany z Xamarinem to mo\u017ce by\u0107 u\u017cywany w projektach Javy i Objective-C.<\/p>\n\n\n\n<p>Calabash dzia\u0142a poprzez umo\u017cliwienie automatycznych interakcji UI w aplikacji, takich jak naciskanie przycisk\u00f3w, wprowadzanie tekstu, sprawdzanie poprawno\u015bci odpowiedzi itd. Cho\u0107 sam w sobie jest dobrym pierwszym krokiem w automatyzacji UI test\u00f3w akceptacyjnych, to rzeczywista u\u017cyteczno\u015b\u0107 Calabash staje si\u0119 oczywista, kiedy jest pod\u0142\u0105czony do Xamarin Test Cloud. Z Test Cloud testy Calabasha mog\u0105 by\u0107 skonfigurowane i uruchamiane na setkach urz\u0105dze\u0144, informacje zwrotne s\u0105 dostarczane w czasie rzeczywistym a walidacja przeprowadzana jest na wielu odmiennych formach i wersjach system\u00f3w operacyjnych. Zalet\u0105 Calabsha jest \u0142atwo\u015b\u0107 w utrzymaniu test\u00f3w, kt\u00f3re s\u0105 projektowane w j\u0119zyku Gherkin, \u0142\u0105czone z kodem Ruby i uruchamiane w kontek\u015bcie frameworka Cucumber. Testy Calabash wpisuj\u0105 si\u0119 w filozofi\u0119 BDD (Behavior Driven Development.<\/p>\n\n\n\n<p>Przyk\u0142adowy kod:<\/p>\n\n\n\n<p>Feature: Login feature Scenario:<\/p>\n\n\n\n<p>As a valid user I can log into my app I wait for text &#8222;Hello&#8221;<\/p>\n\n\n\n<p>Then I press view with id &#8222;Sign in&#8221;<\/p>\n\n\n\n<p>Then I enter text &#8222;username&#8221; into &#8222;login_username&#8221;<\/p>\n\n\n\n<p>Then I enter text &#8222;password&#8221; into &#8222;login_password&#8221;<\/p>\n\n\n\n<p>Then I wait for activity &#8222;HomeTabActivity&#8221;<\/p>\n\n\n\n<p>Then I press view with id &#8222;menu_compose_tweet&#8221;<\/p>\n\n\n\n<p>Then I enter text &#8222;Testdroid&#8221;into field with id &#8222;edit&#8221;<\/p>\n\n\n\n<p>Then I press view with id &#8222;composer_post&#8221;<\/p>\n\n\n\n<p>Jak wida\u0107 testy s\u0105 bardzo high levelowe a to wszystko poprzez u\u017cycie Gherkina.<\/p>\n\n\n\n<p><a href=\"http:\/\/calaba.sh\/\" rel=\"nofollow\" >Oficjalna strona Calabash<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/developer.xamarin.com\/guides\/testcloud\/calabash\/introduction-to-calabash\/\" rel=\"nofollow\" >Oficjalna strona Xamarina<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. UIAutomator<\/h2>\n\n\n\n<p>UIAutomator jest frameworkiem Google\u2019a wspieraj\u0105cym aplikacje natywne oraz dost\u0119p do innych proces\u00f3w w systemie. Dzia\u0142a tylko na urz\u0105dzeniach z API wi\u0119kszym ni\u017c 18 (minimalna wersja Androida 4.3) i nie wspiera web view.<\/p>\n\n\n\n<p>Framework UIAutomator dostarcza zestawu funkcji API do budowania test\u00f3w interfejsu u\u017cytkownika a tak\u017ce do test\u00f3w systemowych. API pozwala na wykonywanie takich operacji jak otwieranie menu ustawie\u0144 systemowych lub uruchamianie ustawie\u0144 aplikacji na testowanym urz\u0105dzeniu. UIAutomator dobrze pasuje do pisania test\u00f3w czarnoskrzynkowych, gdzie kod testowy nie opiera si\u0119 na wewn\u0119trznych szczeg\u00f3\u0142ach implementacji aplikacji docelowej.<\/p>\n\n\n\n<p>Kluczowe cechy frameworka UIAtomator obejmuj\u0105:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wgl\u0105d w hierarchi\u0119 layoutu<\/li>\n\n\n\n<li>API do uzyskiwania informacji o stanie i wykonywanych operacjach na urz\u0105dzeniu docelowym<\/li>\n\n\n\n<li>API obs\u0142uguj\u0105ce testy czarnoskrzynkowe<\/li>\n<\/ul>\n\n\n\n<p><a href=\"http:\/\/developer.android.com\/tools\/testing-support-library\/index.html#UIAutomator\" rel=\"nofollow\" >Strona g\u0142\u00f3wna frameworka<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Espresso<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/espresso.png\"><img decoding=\"async\" width=\"265\" height=\"300\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/espresso-265x300.png\" alt=\"Espresso\" class=\"wp-image-2007\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/espresso-265x300.png 265w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/espresso.png 890w\" sizes=\"(max-width: 265px) 100vw, 265px\" \/><\/a><figcaption class=\"wp-element-caption\">Espresso<\/figcaption><\/figure>\n\n\n\n<p>Espresso jest frameworkiem dla Androida pozwalaj\u0105cym na pisanie rzetelnych test\u00f3w interfejsu u\u017cytkownika pojedynczej aplikacji. Google wyda\u0142o Espresso w pa\u017adzierniku 2013 roku. Od momentu wypuszczenia Espresso 2.0 jest on cz\u0119\u015bci\u0105 Android Support Repository. Wspiera on API poziom 8 (Froyo), 10 (Gingerbread) oraz 15-19 (IJK). Testy pisane s\u0105 w Javie i co najwa\u017cniejsze \u2013 nie ma konieczno\u015bci u\u017cywania sleep\u00f3w w testach., bowiem Espresso automatycznie synchronizuje testy z GUI. Framework zapewnia r\u00f3wnie\u017c, \u017ce aktywno\u015b\u0107 wystartuje przed testami i \u017ce testy b\u0119d\u0105 dzia\u0142a\u0142y tak d\u0142ugo, dop\u00f3ki ostatnia aktywno\u015b\u0107 w tle si\u0119 nie zako\u0144czy.<\/p>\n\n\n\n<p>Espresso posiada trzy komponenty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ViewMatchers \u2013 pozwala na odnalezienie widoku w aktualnej hierarchii widok\u00f3w<\/li>\n\n\n\n<li>ViewActions \u2013 pozwala na wykonywanie akcji na widoku<\/li>\n\n\n\n<li>ViewAssertions \u2013 pozwala na potwierdzi\u0107 stan widoku przy u\u017cyciu asercji<\/li>\n<\/ul>\n\n\n\n<p><a href=\"http:\/\/developer.android.com\/training\/testing\/ui-testing\/espresso-testing.html\" rel=\"nofollow\" >Strona Google<\/a><\/p>\n\n\n\n<p><a href=\"http:\/\/www.vogella.com\/tutorials\/AndroidTestingEspresso\/article.html\" rel=\"nofollow\" >Strona z tutorialem Vogella, gdzie pokazana jest ca\u0142a instalacja i spos\u00f3b wykorzystania Espresso<\/a><\/p>\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;2005&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;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&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;0\\\/5 ( votes: 0)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Automatyczne testy aplikacji mobilnych - cz\u0119\u015b\u0107 2&quot;,&quot;width&quot;:&quot;0&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: 0px;\">\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            <span class=\"kksr-muted\"><\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Dost\u0119pne aplikacje mobilne nie przypominaj\u0105 ju\u017c aplikacji znanych z dawnych telefon\u00f3w kom\u00f3rkowych. Wraz z rozwijaj\u0105cym si\u0119 rynkiem i post\u0119pem technologicznym &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/automatyczne-testy-aplikacji-mobilnych-czesc-2\/\">Continued<\/a><\/p>\n","protected":false},"author":37,"featured_media":2255,"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":[277,276,275,274,146,278],"class_list":["post-2005","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-espresso","tag-framework","tag-mobile","tag-robotium","tag-testing","tag-uiatomator"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/03\/Espresso-Calaba.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2005"}],"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=2005"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2005\/revisions"}],"predecessor-version":[{"id":23460,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2005\/revisions\/23460"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/2255"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=2005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=2005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=2005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}