{"id":11561,"date":"2021-10-04T09:10:07","date_gmt":"2021-10-04T07:10:07","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=11561"},"modified":"2023-06-14T09:17:58","modified_gmt":"2023-06-14T07:17:58","slug":"wyzwania-podczas-tworzenia-frameworku-do-testow-automatycznych-systemu-e-commerce-zbudowanego-w-oparciu-o-adobe-experience-manager","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wyzwania-podczas-tworzenia-frameworku-do-testow-automatycznych-systemu-e-commerce-zbudowanego-w-oparciu-o-adobe-experience-manager\/","title":{"rendered":"Wyzwania podczas tworzenia frameworku do test\u00f3w automatycznych systemu e-commerce zbudowanego w oparciu o Adobe Experience Manager"},"content":{"rendered":"\n<p>Rok 2020 up\u0142yn\u0105\u0142 pod znakiem pandemii COVID-19. Trudno by\u0142o przewidzie\u0107, jak z lockdownem poradz\u0105 sobie \u015bwiatowe rynki, w tym bran\u017ca IT. <\/p>\n\n\n\n<p>Jedn\u0105 z ga\u0142\u0119zi gospodarki, kt\u00f3ra zanotowa\u0142a znaczny wzrost w tych wymagaj\u0105cych czasach, jest e-commerce. Przez wprowadzone ograniczenia liczne firmy musia\u0142y zawiesi\u0107 lub dostosowa\u0107 dzia\u0142alno\u015b\u0107 swoich sklep\u00f3w stacjonarnych do dzia\u0142alno\u015bci online. W wielu przypadkach przedsi\u0119biorcy zostali zmuszeni do zwi\u0119kszenia inwestycji w rozw\u00f3j istniej\u0105cych lub wdro\u017cenia nowych rozwi\u0105za\u0144 \u201ebusiness to customer\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zadanie, jakie stan\u0119\u0142o przed zespo\u0142em Sii<\/h2>\n\n\n\n<p>W tym czasie zesp\u00f3\u0142 Sii stan\u0105\u0142 przed zadaniem zast\u0105pienia aktualnego frameworku klienta u\u017cywanego dotychczas do automatyzacji test\u00f3w. Zgodnie z wymaganiami mieli\u015bmy wprowadzi\u0107 podej\u015bcie Behavior-Driven Development (BDD) przy pisaniu test\u00f3w automatycznych, aby u\u0142atwi\u0107 utrzymanie test\u00f3w oraz umo\u017cliwi\u0107 wcze\u015bniejsze testowanie w modelu wytw\u00f3rczym oprogramowania (\u201eshift left\u201d).<\/p>\n\n\n\n<p>Mi\u0119dzynarodowa dzia\u0142alno\u015b\u0107 e-commerce wi\u0105\u017ce si\u0119 nie tylko z wdra\u017caniem czy testowaniem nowych funkcjonalno\u015bci, ale tak\u017ce konieczno\u015bci\u0105 spe\u0142nienia kryteri\u00f3w stawianych przez r\u00f3\u017cne rynki zbytu. Dodatkowym wyzwaniem by\u0142o testowanie w spos\u00f3b optymalny aplikacji opartej o oprogramowanie Adobe Experience Manager (Content Management System). Umo\u017cliwia ono niemal dowolne definiowanie odmiennej wersji aplikacji lub systemu dla r\u00f3\u017cnych kraj\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testy automatyczne systemu e-commerce krok po kroku<\/h2>\n\n\n\n<p>Mierz\u0105c si\u0119 z wprowadzeniem automatyzacji test\u00f3w manualnych (od zera lub zmieniaj\u0105c stack technologiczny), staje si\u0119 przed wyzwaniem wyboru j\u0119zyka programowania, technologii oraz frameworku. Maj\u0105 one wspom\u00f3c developer\u00f3w test\u00f3w w napisaniu wydajnych, stabilnych oraz \u0142atwych w utrzymaniu test\u00f3w automatycznych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wyb\u00f3r j\u0119zyka<\/h3>\n\n\n\n<p>Pomimo istnienia ogromnej liczby j\u0119zyk\u00f3w programowania, jego wyb\u00f3r sprowadza si\u0119 do kilku: Java, C#, JavaScript czy Python. To najpopularniejsze j\u0119zyki u\u017cywane w automatyzacji test\u00f3w. Wynika to g\u0142\u00f3wnie z mo\u017cliwo\u015bci, jakie oferuje dana technologia, ale r\u00f3wnie\u017c z ich popularno\u015bci i dost\u0119pno\u015bci kandydat\u00f3w o okre\u015blonym profilu na rynku pracy. To, jaki j\u0119zyk finalnie b\u0119dzie wybrany, zale\u017cy od stopnia zaznajomienia z nim cz\u0142onk\u00f3w zespo\u0142u testuj\u0105cego. Warto wzi\u0105\u0107 pod uwag\u0119, aby by\u0142 zbli\u017cony do systemu, kt\u00f3ry ma zosta\u0107 pokryty testami. Cz\u0119sto dobrym wyborem jest u\u017cycie pokrewnego lub tego samego j\u0119zyka. Sprawdza si\u0119 to zw\u0142aszcza w przypadku aplikacji desktopowych, w kt\u00f3rych \u0142atwiej jest zintegrowa\u0107 framework testowy z u\u017cyciem j\u0119zyka pokrewnego.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wyb\u00f3r technologii<\/h3>\n\n\n\n<p>W tym przypadku jednym z pierwszych pyta\u0144, kt\u00f3re nale\u017cy sobie zada\u0107, jest to, czy nasz framework ma oferowa\u0107 wsparcie BDD. Jest to o tyle du\u017ca zmiana w koncepcji tworzenia frameworku, \u017ce nale\u017cy j\u0105 rozpatrzy\u0107 na samym pocz\u0105tku prac, aby prawid\u0142owo zaprojektowa\u0107 ca\u0142\u0105 architektur\u0119. BDD wymaga od naszego rozwi\u0105zania problemu zapewnienia wsp\u00f3\u0142dzielenia stanu danych testowych i\/lub przegl\u0105darki pomi\u0119dzy krokami. Mo\u017ce si\u0119 to wi\u0105za\u0107 z konieczno\u015bci\u0105 dodania kolejnych bibliotek.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wyb\u00f3r frameworku do automatyzacji test\u00f3w<\/h3>\n\n\n\n<p>Zadanie opiera si\u0119 w du\u017cej mierze na ocenie jego:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>popularno\u015bci \u2013 ze wzgl\u0119du na wsparcie spo\u0142eczno\u015bci: im wi\u0119cej os\u00f3b korzysta z frameworku, tym wi\u0119ksze prawdopodobie\u0144stwo, \u017ce b\u0119dzie dalej rozwijany, a b\u0142\u0119dy b\u0119d\u0105 odpowiednio szybko naprawiane,<\/li>\n\n\n\n<li>dojrza\u0142o\u015bci \u2013 ze wzgl\u0119du na dost\u0119pno\u015b\u0107 du\u017cej liczby gotowych rozwi\u0105za\u0144 najcz\u0119stszych problem\u00f3w typowych dla automatyzacji oraz wskazanie sposobu implementacji rozwi\u0105za\u0144 (optymalne, wzorce projektowe, SOLID),<\/li>\n\n\n\n<li>mo\u017cliwo\u015bciach \u2013 ze wzgl\u0119du na m.in. zdolno\u015b\u0107 do pokrywania nie tylko jednego typu test\u00f3w lub rozszerzenia przy pomocy innych bibliotek.<\/li>\n<\/ul>\n\n\n\n<p>W ka\u017cdym j\u0119zyku mo\u017cna znale\u017a\u0107 kilka popularnych framework\u00f3w testowych. Dla C# b\u0119dzie to Bumblebee, dla Python\u2019a \u2013 Behave, a dla Javy \u2013 Serenity. Jednak w przypadku JavaScript i Typescript sytuacja wygl\u0105da zdecydowanie inaczej. W spo\u0142eczno\u015bci os\u00f3b u\u017cywaj\u0105cych tych j\u0119zyk\u00f3w mo\u017cna spotka\u0107 si\u0119 z powiedzeniem, \u017ce co pi\u0119\u0107 minut powstaje nowy artyku\u0142 o jakim\u015b frameworku, zach\u0119caj\u0105cy, aby korzysta\u0107 wy\u0142\u0105cznie z niego. Wymieniaj\u0105c tylko najpopularniejsze frameworki JS\u2019owe, mo\u017cemy wskaza\u0107 kilka rzadziej ju\u017c u\u017cywanych narz\u0119dzi, tj. NightwatchJS czy Protractor, kt\u00f3re stosowane by\u0142y odpowiednio w aplikacjach opartych o React i Angular. Obecnie du\u017co cz\u0119\u015bciej stosuje si\u0119 frameworki takie jak: Cypress, Puppeteer, Playwright czy WebdriverIO. Ka\u017cdy z nich ma swoje plusy i minusy.<\/p>\n\n\n\n<p>Frameworki mo\u017cemy podzieli\u0107 nie tylko ze wzgl\u0119du na ich mo\u017cliwo\u015bci, ale te\u017c ze wzgl\u0119du na spos\u00f3b komunikacji z przegl\u0105dark\u0105 \u2013 poprzez Chrome Devtools Protocol (CDP) albo Selenium Webdriver. Cypress, Puppeteer oraz Playwright mog\u0105 kontrolowa\u0107 stan samej przegl\u0105darki dzi\u0119ki CDP, ale aby w pe\u0142ni wykorzysta\u0107 mo\u017cliwo\u015bci tego protoko\u0142u, nale\u017ca\u0142oby podej\u015b\u0107 do test\u00f3w w spos\u00f3b bardziej integracyjny. Podej\u015bcie integracyjne sprawdza, jak poszczeg\u00f3lne komponenty naszej aplikacji dzia\u0142aj\u0105 pojedynczo, idealnie na spreparowanych danych (mocks). Oczywi\u015bcie mo\u017cna ich u\u017cy\u0107, by stworzy\u0107 testy funkcjonalne na\u015bladuj\u0105ce u\u017cytkownika, jednak nie jest to optymalny spos\u00f3b. Natomiast WebDriverIO umo\u017cliwia korzystanie z obu sposob\u00f3w w komunikacji, zale\u017cnie od przekazanej konfiguracji, dzi\u0119ki czemu mo\u017cna wykorzysta\u0107 odpowiednie narz\u0119dzie do zrealizowania danych potrzeb.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Za\u0142o\u017cenia dotycz\u0105ce architektury frameworku<\/h2>\n\n\n\n<p>Jednym z kluczowych czynnik\u00f3w stanowi\u0105cych o pomy\u015blnym zrealizowaniu oczekiwa\u0144 klienta, czyli zbudowaniu nowego frameworku do test\u00f3w automatycznych, by\u0142o zdefiniowanie jego odpowiedniej architektury. Kluczowym za\u0142o\u017ceniem frameworku by\u0142o zapewnienie optymalizacji test\u00f3w automatycznych pod k\u0105tem likwidacji zduplikowanych scenariuszy testowych. Warto nadmieni\u0107, \u017ce powy\u017csza problematyka stanowi\u0142a jedn\u0105 z g\u0142\u00f3wnych bol\u0105czek poprzedniego frameworku testowego wykorzystywanego przez klienta. <strong>Jako rozwi\u0105zanie przyj\u0119to tworzenie scenariuszy testowych, kt\u00f3re umo\u017cliwiaj\u0105 testowanie r\u00f3\u017cnych wersji j\u0119zykowych i rynkowych z poziomu jednego testu<\/strong>. Przyj\u0119te za\u0142o\u017cenie, opr\u00f3cz redukcji potencjalnie wysokiej liczby test\u00f3w, zapewnia\u0142o tak\u017ce mniejszy nak\u0142ad pracy potrzebnej do utrzymywania nowo wytworzonych test\u00f3w automatycznych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Decyzje specjalist\u00f3w z Sii<\/h2>\n\n\n\n<p>Ze wzgl\u0119du na dodatkowe wymagania klienta dotycz\u0105ce <strong>implementacji BDD<\/strong> oraz pisania test\u00f3w automatycznych przy pomocy JavaScript, wyb\u00f3r technologii i narz\u0119dzi w projekcie ograniczy\u0142 si\u0119 do dw\u00f3ch decyzji: JavaScript vs TypeScipt oraz wyboru samego frameworku, na kt\u00f3rym framework projektowy ma bazowa\u0107.<\/p>\n\n\n\n<p>W pierwszej kwestii, wyb\u00f3r pad\u0142 na <strong>TypeScript<\/strong>. Przy wi\u0119kszych projektach u klient\u00f3w, kt\u00f3rzy outsourcinguj\u0105 ca\u0142e zespo\u0142y, TypeScript b\u0119dzie cechowa\u0142 si\u0119 ni\u017cszym progiem wej\u015bcia, szczeg\u00f3lnie dla os\u00f3b, kt\u00f3re wcze\u015bniej pisa\u0142y kod w Javie. Przek\u0142ada si\u0119 to na kr\u00f3tszy czas onboardingu, przez co \u0142atwiej osi\u0105gn\u0105\u0107 skalowalno\u015b\u0107 zespo\u0142u oraz szybciej pokry\u0107 testami funkcjonalno\u015bci aplikacji.<\/p>\n\n\n\n<p>W przypadku frameworku i konieczno\u015bci u\u017cycia BDD, wyb\u00f3r pad\u0142 na <strong>WebDriverIO z Selenium Webdriver<\/strong> wraz z<strong> CucumberJS<\/strong>. Pozwoli\u0142o to na bezproblemowe po\u0142\u0105czenie wszystkich wymaga\u0144 oraz zapewnienie wystarczaj\u0105cego wsparcia technologicznego od spo\u0142eczno\u015bci. U\u017cycie Selenium Webdriver, a nie Chrome Devtools Protocol, jest kolejn\u0105 cech\u0105 pozwalaj\u0105c\u0105 obni\u017cy\u0107 pr\u00f3g wej\u015bcia. Nie zmusza dewelopera test\u00f3w do u\u017cycia asynchroniczno\u015bci na ka\u017cdym kroku, co mo\u017ce by\u0107 atrakcyjne dla os\u00f3b dopiero ucz\u0105cych si\u0119 JavaScriptu lub przechodz\u0105cych z innego j\u0119zyka. Do tego dodanie takich wzorc\u00f3w projektowych jak Dependency Injection, Page Factory oraz Page Object Pattern daje stabilno\u015b\u0107 samych test\u00f3w oraz zmniejsza nak\u0142ad pracy potrzebny do ich p\u00f3\u017aniejszego utrzymania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integracja frameworku z systemami klienta<\/h2>\n\n\n\n<p>Maj\u0105c za sob\u0105 wyb\u00f3r j\u0119zyka, technologii i narz\u0119dzi, w nast\u0119pnym kroku nale\u017ca\u0142o zaprojektowa\u0107 integracj\u0119 frameworku z systemami klienta, a tak\u017ce jego zada\u0144, tj. egzekucji, raportowania, integracji z innymi narz\u0119dziami w procesie testowania aplikacji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">a) Egzekucja i raportowanie<\/h3>\n\n\n\n<p>Egzekucja wielu scenariuszy testowych z pojedynczym wynikiem oraz ocenienie, czy wszystkie testy zako\u0144czy\u0142y si\u0119 sukcesem (passed) czy nie (failed), daje zbyt ma\u0142o informacji, \u017ceby mo\u017cna by\u0142o uzna\u0107 raport z egzekucji za warto\u015bciowy. Dlatego r\u00f3wnie du\u017c\u0105 wag\u0119 powinno si\u0119 przy\u0142o\u017cy\u0107 do utworzenia <strong>raportu z egzekucji test\u00f3w<\/strong> oraz sposobu jego <strong>integracji z narz\u0119dziami do zarz\u0105dzania testami<\/strong>.<\/p>\n\n\n\n<p>Gotowych bibliotek do utworzenia raportu w postaci zestawu stron HTML, jak i narz\u0119dzi do zarz\u0105dzania testami, jest mn\u00f3stwo, co czyni niemal\u017ce niemo\u017cliwym wyb\u00f3r idealnego narz\u0119dzia, kt\u00f3re spe\u0142ni oczekiwania dowolnego projektu. Wybieraj\u0105c bibliotek\u0119 tworz\u0105c\u0105 raport, musimy wzi\u0105\u0107 pod uwag\u0119 \u0142atwo\u015b\u0107 integracji i uruchomienia przy u\u017cyciu wybranych wcze\u015bniej technologii i narz\u0119dzi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">b) Wyb\u00f3r narz\u0119dzia do zarz\u0105dzania testami i komunikacja z frameworkiem<\/h3>\n\n\n\n<p>Tutaj wyb\u00f3r jest zazwyczaj przes\u0105dzony na rzecz narz\u0119dzia ju\u017c obecnego w \u015brodowisku klienta. Oczywi\u015bcie w cz\u0119\u015bci projekt\u00f3w, czyli w nowych projektach lub z niedojrza\u0142ym procesem testowym, b\u0119dziemy mie\u0107 wp\u0142yw lub b\u0119dziemy odpowiada\u0107 za wyb\u00f3r takiego narz\u0119dzia. Jak w powy\u017cszym przypadku, wyb\u00f3r powinien by\u0107 podyktowany \u0142atwo\u015bci\u0105 integracji z wcze\u015bniej wybranymi narz\u0119dziami. Istnieje wiele gotowych rozwi\u0105za\u0144, kt\u00f3re s\u0105 w stanie przetworzy\u0107 wynik biblioteki do raportowania bezpo\u015brednio na elementy sk\u0142adowe Jira, Rally, qTest czy innego narz\u0119dzia do zarz\u0105dzania.<\/p>\n\n\n\n<p>Kolejnym aspektem, kt\u00f3ry warto mie\u0107 na uwadze, jest spos\u00f3b komunikacji pomi\u0119dzy frameworkiem a narz\u0119dziem do zarz\u0105dzania testami. D\u0105\u017c\u0105c do pe\u0142nej automatyzacji chcemy, \u017ceby integracja wynik\u00f3w zosta\u0142a przeprowadzona automatycznie po ka\u017cdej pe\u0142nej egzekucji regresji lub w wybranym przez klienta momencie. Dlatego powinni\u015bmy zrezygnowa\u0107 z narz\u0119dzi, kt\u00f3re pozwalaj\u0105 jedynie zrobi\u0107 import z raportu poprzez UI i postawi\u0107 na komunikacj\u0119 przez API.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">c) Wyb\u00f3r sposobu powiadomie\u0144 po zako\u0144czonych testach<\/h3>\n\n\n\n<p>Nast\u0119pnym elementem przy projektowaniu ca\u0142o\u015bci architektury b\u0119dzie odpowiedni spos\u00f3b notyfikacji o egzekucji. Powiadomienia po sko\u0144czonej egzekucji test\u00f3w automatycznych, opr\u00f3cz raport\u00f3w lub link\u00f3w, powinny zawiera\u0107 tylko niezb\u0119dne informacje, np. status czy odno\u015bnik do szczeg\u00f3\u0142\u00f3w. Dodatkowo podobn\u0105 notyfikacj\u0119 mo\u017cna zastosowa\u0107 w momencie uruchomienia egzekucji, w kt\u00f3rej kluczowymi informacjami b\u0119dzie rodzaj test\u00f3w, \u015brodowisko czy testowany system. Kana\u0142y u\u017cyte do powiadomie\u0144 powinny by\u0107 to\u017csame z kana\u0142ami u\u017cywanymi przez klienta do codziennej komunikacji. Obecne rozwi\u0105zania na rynku umo\u017cliwiaj\u0105 bezproblemowe przesy\u0142anie informacji na kana\u0142ach czy w pokojach, tak jak w aplikacjach typu Teams lub Slack.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">d) CI\/CD<\/h3>\n\n\n\n<p>Istotnym elementem maj\u0105cym wp\u0142yw na ostateczny kszta\u0142t narz\u0119dzia do testowania, jest \u0142atwo\u015b\u0107 uruchomienia go w \u015brodowisku CI\/CD. Wsp\u00f3\u0142czesne narz\u0119dzia do test\u00f3w automatycznych posiadaj\u0105 domy\u015blnie tak\u0105 mo\u017cliwo\u015b\u0107. Tym, o czym trzeba pami\u0119ta\u0107, jest odpowiednie ustawienie i przygotowanie narz\u0119dzia i agent\u00f3w do pracy z frameworkiem. Mo\u017cna to zrobi\u0107 zar\u00f3wno poprzez stworzenie odpowiedniego obrazu dockerowego z zainstalowanymi potrzebnymi modu\u0142ami, jak r\u00f3wnie\u017c instalowanie ich dynamicznie w zale\u017cno\u015bci od potrzeb.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie wyzwania na konkretnym przyk\u0142adzie<\/h2>\n\n\n\n<p>Bior\u0105c pod uwag\u0119 wszystkie powy\u017csze aspekty oraz oczekiwania klienta, zaproponowana zosta\u0142a nast\u0119puj\u0105ca architektura frameworku:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter wp-image-11562\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2021\/09\/grafika_blogersii-final.jpg\"><img decoding=\"async\" width=\"1024\" height=\"652\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2021\/09\/grafika_blogersii-final-1024x652.jpg\" alt=\"Architektura frameworku do test\u00f3w automatycznych systemu e-commerce zbudowanego w oparciu o Adobe Experience Manager\" class=\"wp-image-11562\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2021\/09\/grafika_blogersii-final-1024x652.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2021\/09\/grafika_blogersii-final-300x191.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2021\/09\/grafika_blogersii-final.jpg 1251w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 Architektura frameworku do test\u00f3w automatycznych systemu e-commerce<\/figcaption><\/figure>\n\n\n\n<p>Tak przygotowany <strong>framework odpowiada na wszystkie aspekty poruszonych wy\u017cej problem\u00f3w<\/strong>, jednocze\u015bnie <strong>b\u0119d\u0105c otwartym na do\u0142\u0105czenie kolejnych rozwi\u0105za\u0144.<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Mo\u017cliwo\u015b\u0107 uruchomienia w po\u017c\u0105danych przez klienta konfiguracjach przegl\u0105darek czy rozdzielczo\u015bci zapewnia <strong>BrowserStack<\/strong>.<\/li>\n\n\n\n<li><strong>Axios<\/strong> pozwala przygotowa\u0107 dane testowe przed egzekucj\u0105 testu, a dodatkowo w szybki spos\u00f3b rozszerzy\u0107 funkcjonalno\u015b\u0107 za pomoc\u0105 importu kolekcji <strong>Postman<\/strong>.<\/li>\n\n\n\n<li><strong>GraphQL<\/strong> nie pozwala zosta\u0107 w tyle ze sposobami komunikacji, dzi\u0119ki czemu mo\u017cna korzysta\u0107 z obs\u0142ugi mailowej z dynamicznym czasem oczekiwania na wiadomo\u015bci.<\/li>\n\n\n\n<li><strong>Cucumber<\/strong> zapewnia nie tylko sk\u0142adni\u0119 <strong>Gherkin<\/strong> i przejrzysty opis test\u00f3w, ale tak\u017ce pozwala sterowa\u0107 uruchomieniami wybranych test\u00f3w za pomoc\u0105 tag\u00f3w. Jako \u017ce tagi mo\u017cna \u0142\u0105czy\u0107 za pomoc\u0105 wyra\u017ce\u0144 logicznych, daje to niesko\u0144czenie wiele kombinacji skrypt\u00f3w do uruchomienia w zale\u017cno\u015bci od testowanych funkcjonalno\u015bci.<\/li>\n\n\n\n<li>Integracja z <strong>Jir\u0105<\/strong> zosta\u0142a stworzona od podstaw na przygotowanym wsp\u00f3lnie z klientem cyklu \u017cycia incydent\u00f3w testowych. Test Plany, Test Case (Przypadki Testowe) itp. tworzone s\u0105 przez framework po ka\u017cdej egzekucji test\u00f3w.<\/li>\n\n\n\n<li>Notyfikacj\u0105 o egzekucji i jej statusie zajmuj\u0105 si\u0119 uprzednio skonfigurowane pluginy do <strong>Jenkinsa<\/strong>. On sam za\u015b pozwala na egzekucj\u0119 z dowoln\u0105 kombinacj\u0105 parametr\u00f3w uruchomieniowych test\u00f3w, a tak\u017ce daje mo\u017cliwo\u015b\u0107 zaplanowania wykonania egzekucji przy danym zestawie parametr\u00f3w na konkretny moment.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">O czym warto pami\u0119ta\u0107, czyli og\u00f3lne rady dla innych zespo\u0142\u00f3w<\/h2>\n\n\n\n<p>Zaprojektowanie, a nast\u0119pnie implementacja architektury frameworku do testowania UI nie nale\u017cy do rzeczy \u0142atwych. Wszystko zale\u017cy od stawianych wymaga\u0144, a tak\u017ce architektury testowanego systemu. Zawsze <strong>nale\u017cy pami\u0119ta\u0107, by framework by\u0142 zamkni\u0119ty na modyfikacje, lecz otwarty na dalsze rozszerzanie<\/strong>. Omawiany framework nie jest frameworkiem ma\u0142ym, a skupili\u015bmy si\u0119 tylko na testach funkcjonalnych bez test\u00f3w wydajno\u015bci.<\/p>\n\n\n\n<p>Wydawa\u0142oby si\u0119, \u017ce framework dedykowany dla UI nie musi posiada\u0107 element\u00f3w korzystaj\u0105cych z API. Warto jednak o tym pami\u0119ta\u0107 i, je\u015bli przyniesie to wymierne korzy\u015bci, skorzysta\u0107 z takiego rozwi\u0105zania. Skr\u00f3cenie czasu, kt\u00f3ry jest potrzebny do przygotowania danych do test\u00f3w to tylko jedna z jego zalet. Przyk\u0142adowo, proces utworzenia nowego klienta przez UI wymaga przej\u015bcia przez wiele ekran\u00f3w. Wystarczy zautomatyzowa\u0107 jeden taki scenariusz, a nowe dane dla pozosta\u0142ych test\u00f3w zast\u0105pi\u0107 jednym b\u0105d\u017a kilkoma requestami API, kt\u00f3re b\u0119d\u0105 du\u017co szybsze.<\/p>\n\n\n\n<p>Czy tak przygotowany framework mo\u017cna rozszerzy\u0107 o zdolno\u015b\u0107 testowania wydajno\u015bci oraz na jakie elementy test\u00f3w wydajno\u015bci w przypadku e-commerce zwr\u00f3ci\u0107 uwag\u0119? W kolejnym artykule postaramy si\u0119 odpowiedzie\u0107 na te pytania.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p><strong>Tekst zosta\u0142 przygotowany przez specjalist\u00f3w z CC Testing Services:<\/strong><\/p>\n\n\n\n<p><strong>Artura Suchowierskiego<\/strong><br><strong>Krzysztofa Bednarskiego<\/strong><br><strong>Wojciecha Wieczorka<\/strong><br><strong>Tomasza Kozio\u0142a<\/strong><\/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;11561&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;9&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;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;5\\\/5 ( votes: 9)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Wyzwania podczas tworzenia frameworku do test\u00f3w automatycznych systemu e-commerce zbudowanego w oparciu o Adobe Experience Manager&quot;,&quot;width&quot;:&quot;139.5&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: 139.5px;\">\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            5\/5 ( votes: 9)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Rok 2020 up\u0142yn\u0105\u0142 pod znakiem pandemii COVID-19. Trudno by\u0142o przewidzie\u0107, jak z lockdownem poradz\u0105 sobie \u015bwiatowe rynki, w tym bran\u017ca &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wyzwania-podczas-tworzenia-frameworku-do-testow-automatycznych-systemu-e-commerce-zbudowanego-w-oparciu-o-adobe-experience-manager\/\">Continued<\/a><\/p>\n","protected":false},"author":436,"featured_media":11566,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":7,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[930,276,146],"class_list":["post-11561","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-e-commerce","tag-framework","tag-testing"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2021\/09\/Wyzwania-podczas-tworzenia-frameworku.png","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/11561"}],"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\/436"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=11561"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/11561\/revisions"}],"predecessor-version":[{"id":22227,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/11561\/revisions\/22227"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/11566"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=11561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=11561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=11561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}