{"id":30638,"date":"2023-05-12T07:17:00","date_gmt":"2023-05-12T05:17:00","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/test-automation-framework\/"},"modified":"2024-11-07T15:29:29","modified_gmt":"2024-11-07T14:29:29","slug":"test-automation-framework","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/test-automation-framework\/","title":{"rendered":"Frameworki do\u00a0automatyzacji test\u00f3w. Wprowadzenie do\u00a0Atata"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Spis tre\u015bci:<\/p>\n    <ol>\n                    <li><a href=\"#Kiedy-i-dlaczego-automatyzowa\u0107-testy-oprogramowania?\">1.  Kiedy i dlaczego automatyzowa\u0107 testy oprogramowania?<\/a><\/li>\n                    <li><a href=\"#Atata-automation-framework\">2.  Atata automation framework<\/a><\/li>\n                    <li><a href=\"#Atata-vs-Selenium\">3.  Atata vs Selenium<\/a><\/li>\n                    <li><a href=\"#Kt\u00f3ry-framework-do-automatyzacji-test\u00f3w-b\u0119dzie-najlepszy-dla-mojego-projektu?\">4.  Kt\u00f3ry framework do automatyzacji test\u00f3w b\u0119dzie najlepszy dla mojego projektu?<\/a><\/li>\n                    <li><a href=\"#Podsumowanie\">5.  Podsumowanie<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"Kiedy-i-dlaczego-automatyzowa\u0107-testy-oprogramowania?\">Kiedy i dlaczego automatyzowa\u0107 testy oprogramowania?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Czym jest automatyzacja?<\/h3>\n\n\n\n<p>Zanim skupimy si\u0119 na temacie frameworka, jakim jest Atata, chcia\u0142abym s\u0142owem wst\u0119pu przypomnie\u0107, czym w og\u00f3le jest automatyzacja test\u00f3w oprogramowania i dlaczego warto si\u0119 ni\u0105 zainteresowa\u0107. Wok\u00f3\u0142 tego tematu naros\u0142o bowiem wiele mit\u00f3w.<\/p>\n\n\n\n<p>Testowanie to bardzo istotny element procesu wytwarzania oprogramowania. Jednym z podej\u015b\u0107 do tego zagadnienia jest automatyzacja, czyli wykorzystanie specjalnych narz\u0119dzi i framework\u00f3w, kt\u00f3re umo\u017cliwiaj\u0105 programowanie test\u00f3w i ich automatyczne wykonanie bez dalszej ingerencji cz\u0142owieka.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Korzy\u015bci automatyzacji<\/h3>\n\n\n\n<p><a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/automatyzacja-testow-obalamy-mity\/\" data-type=\"jpro\">Automatyzacja <\/a>tych proces\u00f3w mo\u017ce przynie\u015b\u0107 niezliczone korzy\u015bci, w tym jedn\u0105 z najwa\u017cniejszych \u2013 oszcz\u0119dno\u015b\u0107 czasu i koszt\u00f3w. Ponadto testy automatyczne s\u0105 bardziej powtarzalne i dok\u0142adniejsze ni\u017c testy przeprowadzane r\u0119cznie, co przek\u0142ada si\u0119 na ich niezawodno\u015b\u0107 i skuteczno\u015b\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scenariusze i przypadki testowe a automatyzacja<\/h3>\n\n\n\n<p>Warto rozwa\u017cy\u0107 opcj\u0119 automatyzacji test\u00f3w w naszym projekcie r\u00f3wnie\u017c z powodu mo\u017cliwo\u015bci przeprowadzania test\u00f3w o skomplikowanych scenariuszach i w wielu \u015brodowiskach jednocze\u015bnie, co mog\u0142oby stanowi\u0107 wyzwanie podczas r\u0119cznego realizowania scenariusza testowego na co dzie\u0144. Mo\u017cliwe jest przeprowadzanie test\u00f3w na r\u00f3\u017cnych platformach, w r\u00f3\u017cnych konfiguracjach sprz\u0119towych i sieciowych, co by\u0142oby trudne lub wr\u0119cz niemo\u017cliwe do osi\u0105gni\u0119cia w przypadku test\u00f3w manualnych.<\/p>\n\n\n\n<p>Tworzenie przypadk\u00f3w testowych w zautomatyzowanej formie zapewnia ich powtarzalno\u015b\u0107, a co za tym idzie, podnosi ich skuteczno\u015b\u0107 w wykrywaniu defekt\u00f3w. W\u0142a\u015bnie dlatego automatyzacja jest szczeg\u00f3lnie u\u017cyteczna w testowaniu funkcjonalno\u015bci krytycznych dla aplikacji. Warto jednak pami\u0119ta\u0107, \u017ce rzeczywisto\u015b\u0107 testowa nie jest zero-jedynkowa i jak wszystko ma swoje plusy i minusy. Jakie s\u0105 zatem ciemne strony automatyzacji?<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/scenariusze-testowe\/\">Jak pisa\u0107 scenariusze testowe? Jak scenariusz testowy pomaga na\u00a0p\u00f3\u017aniejszych etapach pracy rozwoju oprogramowania? Czym r\u00f3\u017cni\u0105 si\u0119 scenariusze testowe i\u00a0przypadki testowe?\u00a0<\/a><\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ciemne strony automatyzacji<\/h3>\n\n\n\n<p>Automatyzacja test\u00f3w mo\u017ce by\u0107 fantastycznym rozwi\u0105zaniem w wielu projektach, lecz nie jest uniwersalnym rozwi\u0105zaniem. W niekt\u00f3rych przypadkach testy manualne mog\u0105 by\u0107 du\u017co lepsz\u0105, bardziej efektywn\u0105 lub nawet jedyn\u0105 dost\u0119pn\u0105 opcj\u0105. Dlatego przed podj\u0119ciem decyzji o automatyzacji test\u00f3w warto dok\u0142adnie przeanalizowa\u0107 specyfik\u0119 projektu, potrzeby, kt\u00f3re si\u0119 z nim wi\u0105\u017c\u0105, oraz wszelkie dost\u0119pne narz\u0119dzia i frameworki.<\/p>\n\n\n\n<p>Nie mo\u017cna te\u017c zapomina\u0107 o czasie, kt\u00f3ry nale\u017cy zainwestowa\u0107 w stworzenie zautomatyzowanych przypadk\u00f3w testowych. Wymaga to wielu godzin pracy, tworzenia konfiguracji oraz rozwi\u0105zywania problem\u00f3w, kt\u00f3re nie wyst\u0119puj\u0105 podczas r\u0119cznego testowania oprogramowania. Jest to proces, kt\u00f3ry <strong>z pocz\u0105tku mo\u017ce rozwija\u0107 si\u0119 bardzo powoli, a miarodajne wyniki nieraz s\u0105 widoczne dopiero po w\u0142o\u017ceniu w projekt ogromu pracy.<\/strong> Nie do pomini\u0119cia jest r\u00f3wnie\u017c potrzeba zatrudnienia testera automatyzuj\u0105cego, kt\u00f3ry b\u0119dzie zdolny do zaprojektowania ca\u0142ego systemu tak, aby testy by\u0142y stabilne i zgodne z dobrymi praktykami programowania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Typy framework\u00f3w do automatyzacji test\u00f3w<\/h2>\n\n\n\n<p>Frameworki do automatyzacji to narz\u0119dzia, kt\u00f3re u\u0142atwiaj\u0105 to zadanie, dostarczaj\u0105c rozwi\u0105za\u0144 dla wielu powszechnych problem\u00f3w. W zale\u017cno\u015bci od potrzeb i specyfiki projektu mo\u017cemy wybiera\u0107 spo\u015br\u00f3d r\u00f3\u017cnych typ\u00f3w framework\u00f3w. Poni\u017cej kr\u00f3tki opis wybranych z nich.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Library Architecture Framework<\/h3>\n\n\n\n<p>Library Architecture Framework (LAF) to jedna z popularnych technik automatyzacji test\u00f3w oprogramowania. W ramach tej metodyki wykorzystywane s\u0105 biblioteki z gotowymi funkcjami testowymi, kt\u00f3re mog\u0105 by\u0107 wywo\u0142ywane w kodzie testu. <strong>LAF jest cz\u0119sto stosowany w przypadkach, gdy testy s\u0105 skomplikowane i wymagaj\u0105 wielu etap\u00f3w<\/strong>, a tak\u017ce w sytuacjach, gdy testy musz\u0105 dzia\u0142a\u0107 na r\u00f3\u017cnych systemach operacyjnych i przegl\u0105darkach internetowych.<\/p>\n\n\n\n<p>Ten typ frameworka sprawdza si\u0119 zw\u0142aszcza w przypadku test\u00f3w niskiego poziomu, takich jak testy jednostkowe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Module Based Testing Framework (MBTF)<\/h3>\n\n\n\n<p>To rodzaj frameworka do automatyzacji test\u00f3w oprogramowania, kt\u00f3ry opiera si\u0119 na modularnym podej\u015bciu do projektowania test\u00f3w. W tym modelu testy s\u0105 projektowane w spos\u00f3b modu\u0142owy, a ka\u017cdy modu\u0142 obejmuje jedn\u0105 funkcjonalno\u015b\u0107 lub przypadki testowe zwi\u0105zane z jednym modu\u0142em aplikacji<strong>. W MBTF modu\u0142y testowe s\u0105 projektowane w taki spos\u00f3b, by by\u0142y uniwersalne, mog\u0142y by\u0107 wykorzystywane wielokrotnie dla r\u00f3\u017cnych aplikacji i system\u00f3w. <\/strong>Po stworzeniu zestawu modu\u0142\u00f3w mo\u017cna ich u\u017cy\u0107 w r\u00f3\u017cnych projektach bez potrzeby ponownego pisania kodu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Linear Automation Framework<\/h3>\n\n\n\n<p>Linear Automation Framework to rodzaj frameworka do automatyzacji test\u00f3w, kt\u00f3ry opiera si\u0119 na liniowym podej\u015bciu. W LAF testy s\u0105 projektowane w taki spos\u00f3b, aby odzwierciedla\u0142y procesy biznesowe lub scenariusze u\u017cytkowania aplikacji. Oznacza to, \u017ce s\u0105 one wykonywane w spos\u00f3b sekwencyjny. W tym modelu testy s\u0105 projektowane jako zestawy krok\u00f3w, a ka\u017cdy krok testu jest zwi\u0105zany z akcj\u0105 u\u017cytkownika lub wynikiem, kt\u00f3ry jest oczekiwany w aplikacji. Zalet\u0105 Linear Automation Framework jest to, \u017ce <strong>testy s\u0105 bardziej zbli\u017cone do rzeczywistych przypadk\u00f3w u\u017cycia<\/strong>, co mo\u017ce przyczyni\u0107 si\u0119 do znalezienia bardziej \u017cyciowych defekt\u00f3w w aplikacji, takich, na kt\u00f3re trafi\u0142by u\u017cytkownik.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hybrid Test Automation Framework<\/h3>\n\n\n\n<p>To rodzaj frameworka, kt\u00f3ry \u0142\u0105czy w sobie cechy wszystkich wymienionych powy\u017cej podej\u015b\u0107. Ten typ umo\u017cliwia projektowanie i wykonanie test\u00f3w w spos\u00f3b elastyczny i dopasowany do potrzeb projektu. W HTAF testy s\u0105 tworzone w spos\u00f3b modularny, podobnie jak w Module Based Testing Framework, ale z wi\u0119ksz\u0105 elastyczno\u015bci\u0105 i dost\u0119pem do szerokiej gamy narz\u0119dzi testowych. Framework ten pozwala na integracj\u0119 r\u00f3\u017cnych narz\u0119dzi i technologii, takich jak Selenium WebDriver, TestNG, Appium, JMeter itp., co pozwala na automatyzacj\u0119 test\u00f3w w r\u00f3\u017cnych \u015brodowiskach, takich jak aplikacje webowe, mobilne, desktopowe i wiele innych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Atata-automation-framework\">Atata automation framework<\/h2>\n\n\n\n<p>Atata to pe\u0142nowarto\u015bciowy framework do automatyzacji test\u00f3w, kt\u00f3ry jest oparty na Selenium WebDriver i zaprojektowany z my\u015bl\u0105 o aplikacjach internetowych. Zosta\u0142 napisany w j\u0119zyku C# i oferuje szeroki zakres funkcjonalno\u015bci, kt\u00f3re u\u0142atwiaj\u0105 automatyzacj\u0119 test\u00f3w aplikacji internetowych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Atata \u2013 zalety<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dost\u0119pno\u015b\u0107\u00a0<\/strong>\u2013 framework Atata jest w pe\u0142ni open source\u2019owy i dost\u0119pny na platformie GitHub na licencji Apache License 2.0.<\/li>\n\n\n\n<li><strong>Przejrzysto\u015b\u0107 i \u0142atwo\u015b\u0107 u\u017cytkowania\u00a0<\/strong>\u2013 jednym z kluczowych element\u00f3w Atata Framework jest u\u017cycie modelu Fluent Page Object Pattern. Ten wzorzec pozwala na pisanie kodu, kt\u00f3ry jest \u0142atwy do czytania i zrozumienia. Wbudowany system logowania u\u0142atwia \u015bledzenie i rozwi\u0105zywanie problem\u00f3w podczas testowania.<\/li>\n\n\n\n<li><strong>Triggery<\/strong>\u00a0\u2013 dodatkowo, framework ma unikaln\u0105 funkcjonalno\u015b\u0107 trigger\u00f3w, kt\u00f3ra pozwala na uruchamianie niestandardowego kodu w momencie wyst\u0105pienia okre\u015blonych zdarze\u0144.<\/li>\n\n\n\n<li><strong>Niski pr\u00f3g wej\u015bcia\u00a0<\/strong>\u2013 Atata zosta\u0142a zaprojektowana w taki spos\u00f3b, aby by\u0142a \u0142atwa w u\u017cyciu i utrzymaniu. Framework dostarcza prost\u0105 i intuicyjn\u0105 sk\u0142adni\u0119 do definiowania i u\u017cywania obiekt\u00f3w wyst\u0119puj\u0105cych na stronie. Wymaga to minimalnej ilo\u015bci kodu, co pozytywnie wp\u0142ywa na czytelno\u015b\u0107 oraz u\u0142atwia wprowadzenie kolejnych tester\u00f3w do projektu.<\/li>\n\n\n\n<li><strong>Gotowe komponenty\u00a0<\/strong>\u2013 framework dostarcza r\u00f3wnie\u017c zestaw gotowych do u\u017cycia komponent\u00f3w, kt\u00f3re maj\u0105 u\u0142atwia\u0107 prac\u0119. Komponenty te to np. kontrolki, strony i uk\u0142ady. Atata dostarcza szeroki zakres wbudowanych kontrolek, kt\u00f3re mo\u017cna wykorzystywa\u0107 do interakcji z elementami internetowymi na stronie. Kontrolki to np. przyciski, pola tekstowe, pola wyboru, przyciski opcji i wiele, wiele innych.<\/li>\n\n\n\n<li><strong>Data-driven testing\u00a0<\/strong>\u2013 Atata obs\u0142uguje r\u00f3wnie\u017c testowanie oparte na danych. Umo\u017cliwia testerom tworzenie test\u00f3w, korzystaj\u0105c z funkcji Data-Driven Testing. Dzi\u0119ki tej funkcji developerzy mog\u0105 uruchamia\u0107 ten sam scenariusz testowy z r\u00f3\u017cnymi zestawami danych.<\/li>\n\n\n\n<li><strong>Testowanie r\u00f3wnoleg\u0142e\u00a0<\/strong>\u2013 framework obs\u0142uguje r\u00f3wnie\u017c testowanie r\u00f3wnoleg\u0142e. Dzi\u0119ki funkcji Parallel Testing testerzy mog\u0105 uruchamia\u0107 wiele test\u00f3w jednocze\u015bnie, co mo\u017ce znacznie zmniejszy\u0107 czas potrzebny do przetestowania. Jest to szczeg\u00f3lnie przydatne w przypadku du\u017cych aplikacji internetowych, kt\u00f3re wymagaj\u0105 rozbudowanej kontroli jako\u015bci.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Atata \u2013 wady<\/h3>\n\n\n\n<p>Mimo swoich wielu zalet Atata Framework ma tak\u017ce pewne wady.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ograniczone zastosowanie<\/strong>\u00a0\u2013 jedn\u0105 z g\u0142\u00f3wnych wad jest to, \u017ce framework jest ograniczony tylko do obs\u0142ugi stron internetowych. Jest to istotne ograniczenie np. dla firm rozwijaj\u0105cych oprogramowanie, kt\u00f3re opr\u00f3cz stron webowych projektuj\u0105 r\u00f3wnie\u017c inne rodzaje aplikacji. W takim przypadku konieczne mo\u017ce by\u0107 u\u017cycie innego narz\u0119dzia do automatyzacji test\u00f3w.<\/li>\n\n\n\n<li><strong>Dost\u0119pny wy\u0142\u0105cznie z C#<\/strong>\u00a0\u2013 framework ten jest te\u017c stworzony tylko dla j\u0119zyka C#, co uniemo\u017cliwia wykorzystanie go przez wielu programist\u00f3w specjalizuj\u0105cych si\u0119 w innych popularnych j\u0119zykach programowania.<\/li>\n\n\n\n<li><strong>Ma\u0142a spo\u0142eczno\u015b\u0107<\/strong>\u00a0\u2013 kolejn\u0105 wad\u0105 w por\u00f3wnaniu do innych narz\u0119dzi s\u0142u\u017c\u0105cych do automatyzacji test\u00f3w mo\u017ce by\u0107 mniejsza spo\u0142eczno\u015b\u0107. Framework ten jest stosunkowo nowy, w por\u00f3wnaniu do innych narz\u0119dzi, kt\u00f3re istniej\u0105 na rynku od wielu lat. Musimy si\u0119 liczy\u0107 z mniejsz\u0105 ilo\u015bci\u0105 zasob\u00f3w i dokumentacji online, a tak\u017ce materia\u0142\u00f3w pomocy dost\u0119pnych dla u\u017cytkownik\u00f3w. Na szcz\u0119\u015bcie spo\u0142eczno\u015b\u0107 u\u017cytkownik\u00f3w jest bardzo zaanga\u017cowana i gotowa do pomocy. Warto te\u017c zaznaczy\u0107, \u017ce kontakt z tw\u00f3rcami frameworka jest niezwykle prosty, a komunikacja bardzo sprawna (odpowied\u017a na wi\u0119kszo\u015b\u0107 problem\u00f3w mo\u017cna uzyska\u0107 od samych tw\u00f3rc\u00f3w nawet w 20 minut).<\/li>\n<\/ul>\n\n\n\n<p>Jednak pomimo tych wad Atata Framework jest nadal jednym z najlepszych narz\u0119dzi do automatyzacji test\u00f3w internetowych w j\u0119zyku C#. Jego liczne zalety sprawiaj\u0105, \u017ce jest on popularny w\u015br\u00f3d tester\u00f3w, kt\u00f3rzy szukaj\u0105 prostego i intuicyjnego sposobu na automatyzacj\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Atata-vs-Selenium\">Atata vs Selenium<\/h2>\n\n\n\n<p>Na wst\u0119pie warto zaznaczy\u0107, \u017ce pytanie nie jest do ko\u0144ca adekwatne w kontek\u015bcie omawianego zagadnienia. Powiem wi\u0119cej, por\u00f3wnywanie Selenium, do nak\u0142adki, jak\u0105 stanowi Atata, mo\u017ce si\u0119 wydawa\u0107 bezzasadne. Jest to przecie\u017c nic innego jak framework przykrywaj\u0105cy swoimi funkcjonalno\u015bciami baz\u0119, kt\u00f3ra dostarcza nam niezb\u0119dnych, podstawowych narz\u0119dzi. Dzi\u0119ki takiemu zabiegowi dostajemy \u201e\u0142adniejsz\u0105\u201d wersj\u0119 Selenium, przyjemniejsz\u0105 w u\u017cytku i szybsz\u0105 w implementacji. <\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/testy-e2e-cypress\/\">Testy E2E \u2013 Cypress vs Selenium<\/a><\/strong><\/p>\n\n\n\n<p>Mimo to postanowi\u0142am zebra\u0107 istotne r\u00f3\u017cnice w formie tabeli poni\u017cej. Warto by\u0107 \u015bwiadomym, jakie korzy\u015bci mo\u017ce przynie\u015b\u0107 zastosowanie takiej nak\u0142adki dla ca\u0142ego projektu. Koniec ko\u0144c\u00f3w przy planowaniu prac projektowych wyb\u00f3r nie jest prosty i im wi\u0119cej mo\u017cliwo\u015bci, tym trudniej podj\u0105\u0107 decyzj\u0119 nawet w obr\u0119bie framework\u00f3w opieraj\u0105 si\u0119 na innych, dost\u0119pnych ju\u017c narz\u0119dziach.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.04.19_graphic_1.png\" alt=\"Atata vs Selenium\" class=\"wp-image-6632\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Atata<\/h2>\n\n\n\n<p>Jedn\u0105 z najwi\u0119kszych zalet frameworka Atata jest jego u\u017cyteczny system logowania, kt\u00f3ry umo\u017cliwia \u015bledzenie i diagnozowanie problem\u00f3w w trakcie testowania. Atata oferuje tak\u017ce unikalne funkcje, takie jak mechanizm trigger\u00f3w, kt\u00f3ry umo\u017cliwia wykonywanie niestandardowego kodu w odpowiedzi na okre\u015blone zdarzenia podczas testowania.<\/p>\n\n\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.04.19_graphic_2.png\" alt=\"Atata\" class=\"wp-image-6633\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Atata oferuje r\u00f3wnie\u017c intuicyjn\u0105 sk\u0142adni\u0119 do definiowania i u\u017cywania obiekt\u00f3w strony, co u\u0142atwia programowanie i utrzymanie test\u00f3w. Wspiera zastosowanie modelu Page Object Pattern, co dla zwolennik\u00f3w tego wzorca jest ogromn\u0105 zalet\u0105. Struktura jest dzi\u0119ki temu przejrzysta i \u0142atwiejsza w zrozumieniu.&nbsp;<\/p>\n\n\n\n<p>Framework posiada wbudowany zestaw gotowych komponent\u00f3w, takich jak kontrolki, strony i uk\u0142ady, co przyspiesza proces automatyzacji test\u00f3w. Poni\u017cej zamie\u015bci\u0142am przyk\u0142ad mo\u017cliwo\u015bci, jakie oferuje nam Atata &#8211; zawiera nie tylko podstawowe elementy stron jak pola tekstowe, ale rozr\u00f3\u017cnia te\u017c pola przeznaczone dla adres\u00f3w e-mail, hase\u0142, numer\u00f3w czy plik\u00f3w. Poza tym, obs\u0142uguje listy wybor\u00f3w, elementy klikalne i wiele, wiele innych. Pe\u0142n\u0105 specyfikacj\u0119 i mo\u017cliwo\u015bci mo\u017cna zawsze odnale\u017a\u0107 w bardzo czytelnie napisanej dokumentacji <a href=\"https:\/\/atata.io\/components\/.\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/atata.io\/components\/.<\/a><\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using _ = TextBoxPage; \/\/alias for better readability \n    [Url(TextBoxUrl)]      \/\/Url extension to base url placed in SpecFlowHooks.cs \n    [VerifyTitle(\"ToolsQA\")] \n    public class TextBoxPage : BasePage&lt;_>  \n    { \n        private const string TextBoxUrl = \"\/text-box\"; \n \n \n        [FindById(\"userName\")] \/\/Selector to find element \n        public TextInput&lt;_> UserNameTextBoxInput { get; set; } \/\/An element with its type and name \n \n \n        [FindById(\"userEmail\")] \n        public EmailInput&lt;_> UserEmailTextBoxInput { get; set; } \n \n \n        [FindById(\"currentAddress\")] \n        public TextArea&lt;_> CurrentAddressTextBoxTextArea { get; set; } \n \n \n        [FindById(\"permanentAddress\")] \n        public TextArea&lt;_> PermanentAddressTextBoxTextArea { get; set; } \n \n \n        [FindById(\"submit\")] \n        public Button&lt;_> SubmitTextBoxButton { get; set; } \n        \n        [FindById(\"output\")] \n        public Text&lt;_> TextBoxOutputBox { get; set; } \n \n \n        [FindById(\"name\")] \n        public Text&lt;_> TextBoxOutputName { get; set; } \n \n \n        [FindById(\"email\")] \n        public Text&lt;_> TextBoxOutputEmail { get; set; } \n \n \n        [FindById(\"currentAddress\")] \n        public Text&lt;_> TextBoxOutputCurrentAddress { get; set; } \n \n \n        [FindByXPath(\"output\")] \n        public Text&lt;_> OutputBox { get; set; } \n \n \n        [FindById(\"permanentAddress\")] \n        public Text&lt;_> TextBoxOutputPermanentAddress { get; set; } \n    } \n \n<\/pre>\n\n\n\n<p>Zastosowanie gotowych komponent\u00f3w<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.04.19_graphic_5.png\" alt=\"Komponenty Atata\" class=\"wp-image-6634\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Mimo ogromu mo\u017cliwo\u015bci zdarza si\u0119 jednak, \u017ce brakuje nam komponentu lub niemo\u017cliwe jest zastosowanie gotowego rozwi\u0105zania, kt\u00f3re oferuje Atata. Na szcz\u0119\u015bcie tw\u00f3rcy nie odebrali nam mo\u017cliwo\u015bci sensownego dost\u0119pu do czystej wersji Selenium i bez przeszk\u00f3d mo\u017cemy wyszukiwa\u0107 nasze elementy lub stosowa\u0107 okre\u015blone akcje wobec nich. Poni\u017cej przyk\u0142ad wywo\u0142ania WebDrivera.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  public class ProjectDetailsPage : BasePage&lt;ProjectDetailsPage> \n    { \n        public int findGarageParkingPlaces() \n        { \n            var element = AtataContext.Current.Driver.FindElement(By.XPath(\"\/\/div[contains(text(),'Garage Parking Places')]\")); \n            return int.Parse(element.FindElement(By.ClassName(\"value\")).Text); \n        } \n    } <\/pre>\n\n\n\n<p>Wywo\u0142anie AtataContext.Current.Driver&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Dla fan\u00f3w raport\u00f3w i tabelek r\u00f3wnie\u017c znajdzie si\u0119 tu przydatna funkcja. Atata oferuje wbudowane narz\u0119dzie do wykonywania zrzut\u00f3w ekranu wed\u0142ug wybranego wzoru np. po wykonaniu ka\u017cdego kroku. Je\u017celi po\u0142\u0105czymy t funkcj\u0119 z bibliotek\u0105 do tworzenia raport\u00f3w np. <strong>ExtendedReports <\/strong>otrzymujemy bardzo przyjemne \u015brodowisko do generowania raport\u00f3w w formie<strong> pliku .html. <\/strong><\/p>\n\n\n\n<p>Po uruchomieniu test\u00f3w mamy natychmiastowy wgl\u0105d w wyniki wraz ze statystykami, zaznaczonymi b\u0142\u0119dami, tagami i wykresami. Na pierwszy rzut oka mo\u017cna powiedzie\u0107, \u017ce takie dane oferuje nam r\u00f3wnie\u017c samo IDE, jednak forma zestawienia ich przez t\u0105 bibliotek\u0119 jest du\u017co czytelniejsza i przyjemniejsza dla oka. Po drobnych zmianach w celu dostosowania si\u0119 do potrzeb projektu dostajemy raport, kt\u00f3ry mo\u017cemy przedstawi\u0107 podczas spotka\u0144 biznesowych bez du\u017cego nak\u0142adu pracy.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image size-full\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.04.19_graphic_3-1.png\" alt=\" class=\" class=\"wp-image-6635\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.04.19_graphic_4.png\" alt=\"Przyk\u0142ad raportu\" class=\"wp-image-6636\" title=\"\"><figcaption class=\"wp-element-caption\">Przyk\u0142ad raportu<\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  [Screenshot(AfterAnyAction)] \n    public abstract class BasePage&lt;TOwner> : Page&lt;TOwner> \n        where TOwner : BasePage&lt;TOwner> \n    { \n        \/\/Some general helping methods that can be used in all pages \n        public int[] GetElementSize(Text&lt;TOwner> element) \n        { \n            return new int[2] { element.ComponentSize.Width.Value, element.ComponentSize.Height.Value }; \n        } \n         \n        public void AcceptAlert() \n        { \n            AtataContext.Current.Driver.SwitchTo().Alert().Accept(); \n        } \n \n \n        public string GetAlertMessage() \n        { \n            return AtataContext.Current.Driver.SwitchTo().Alert().Text; \n        } \n    } <\/pre>\n\n\n\n<p>Przyk\u0142ad dodawania zrzut\u00f3w ekranu do raportu<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Intuicyjnie zosta\u0142o rozwi\u0105zane te\u017c zagadnienie dotycz\u0105ce nawigowania mi\u0119dzy stronami aplikacji w trakcie jednej sesji. W za\u0142\u0105czonym ni\u017cej przyk\u0142adzie mo\u017cna zauwa\u017cy\u0107, \u017ce wystarczy zastosowa\u0107 funkcj\u0119<strong> Go.To <\/strong>(id\u017a do) lub <strong>On<\/strong> (pozosta\u0144 na stronie). Wystarczy przes\u0142a\u0107 odpowiedni adres strony do metody &#8211; nie ma konieczno\u015bci otwierania i zamykania sesji w odpowiedni spos\u00f3b tak, jak ma to miejsce przy u\u017cyciu Selenium bez nak\u0142adki. Przyczynia si\u0119 to do znacznych oszcz\u0119dno\u015bci czasu przy konfiguracji \u015brodowiska.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> [Binding] \n    public sealed class TextBoxSteps : BaseSteps \n    { \n        private readonly ScenarioContext _scenarioContext; \n \n \n        [Obsolete(\"Visual Studio IntelliSense Work Around\", true)] \n        public TextBoxSteps(ScenarioContext scenarioContext) \n        { \n           _scenarioContext = scenarioContext;   \/\/Initializing scenario context, you can save test session data in it \n           SetRandomUser(_scenarioContext);      \/\/Creating new fake user data and saving it in context so it can be used in multiple tests without generating new set  \n        } \n \n \n        [When(@\"User input all personal data on address form page\")] \/\/SpecFlow binding to feature files, methods are named the same as scenario steps  \n        public void WhenUserInputAllPersonalDataOnAddressFormPage() \n        { \n            Go.To&lt;TextBoxPage>()                 \/\/Open page    \n                .UserNameTextBoxInput.Set(User.FirstName + \" \" + User.LastName) \/\/Make actions on web elements from page you just opened eg. set -> input text  \n                .UserEmailTextBoxInput.Set(User.Email) \/\/User.Email is a reference to our generated fake data \n                .CurrentAddressTextBoxTextArea.Click() \n                .CurrentAddressTextBoxTextArea.Set(User.Country) \n                .PermanentAddressTextBoxTextArea.Set(User.Country); \n        } \n \n \n        [When(@\"confirm the data by clicking button\")] \n        public void WhenConfirmTheDataByClickingButton() \n        { \n            On&lt;TextBoxPage>()                     \/\/On already opened page \n                .SubmitTextBoxButton.Click(); \n        } \n \n \n        [Then(@\"user should see provided data below\")] \n        public void ThenUserShouldSeeProvidedDataBelow() \n        { \n            On&lt;TextBoxPage>() \n                .TextBoxOutputBox.Should.BeVisible()  \/\/Should is assertion verification if something is as you wanted \n                .TextBoxOutputName.Content.Should.Contain($\"Name:{User.FirstName} {User.LastName}\") \n                .TextBoxOutputEmail.Content.Should.Contain($\"Email:{User.Email}\") \n                .TextBoxOutputCurrentAddress.IsVisible.Should.BeTrue() \n                .TextBoxOutputCurrentAddress.GetContent(ContentSource.Value).Should.Contain(User.Country) \n                .TextBoxOutputPermanentAddress.GetContent(ContentSource.Value).Should.Contain(User.Country); \n        } \n    } \n \n <\/pre>\n\n\n\n<p>Przyk\u0142ad nawigowania po stronach (Go.To oraz On), ponownie wklejam pe\u0142ny kontekst klasy<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Niestety, framework ten powsta\u0142 tylko dla j\u0119zyka programowania C#, co jest powa\u017cnym ograniczeniem wzgl\u0119dem Selenium, kt\u00f3re dzia\u0142a r\u00f3wnie\u017c z Jav\u0105 czy Pythonem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Kt\u00f3ry-framework-do-automatyzacji-test\u00f3w-b\u0119dzie-najlepszy-dla-mojego-projektu?\">Kt\u00f3ry framework do automatyzacji test\u00f3w b\u0119dzie najlepszy dla mojego projektu?<\/h2>\n\n\n\n<p>Wyb\u00f3r frameworka do automatyzacji test\u00f3w zale\u017cy od wielu czynnik\u00f3w, takich jak rodzaj projektu, wymagania biznesowe, preferencje programist\u00f3w i dost\u0119pne zasoby. Oto kilka krok\u00f3w, kt\u00f3re mog\u0105 pom\u00f3c w wyborze najlepszego frameworka dla twojego projektu:&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Okre\u015bl swoje wymagania<\/strong>&nbsp;&nbsp;<\/li>\n<\/ol>\n\n\n\n<p>Przed podj\u0119ciem decyzji o wykorzystaniu danego frameworka do automatyzacji test\u00f3w musisz wiedzie\u0107, jakie s\u0105 twoje wymagania. Na przyk\u0142ad, je\u015bli tw\u00f3j projekt zak\u0142ada rozw\u00f3j aplikacji webowej, to framework, kt\u00f3ry wspiera testowanie interfejs\u00f3w u\u017cytkownika, mo\u017ce by\u0107 najlepszym wyborem. Nie ma sensu te\u017c wybiera\u0107 technologii, kt\u00f3ra wspiera dodatkowo inne rodzaje aplikacji kosztem tego, kt\u00f3ry nas interesuje.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Znajd\u017a odpowiednie narz\u0119dzia<\/strong>&nbsp;&nbsp;<\/li>\n<\/ol>\n\n\n\n<p>Skonsultuj si\u0119 z programistami i testerami, kt\u00f3rzy maj\u0105 do\u015bwiadczenie w automatyzacji test\u00f3w, i popro\u015b ich o zalecenia co do narz\u0119dzi. Zbierz informacje o r\u00f3\u017cnych frameworkach, ich <strong>funkcjonalno\u015bciach, ograniczeniach i zasobach spo\u0142eczno\u015bciowych. <\/strong>&nbsp;&nbsp;<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Przetestuj frameworki<\/strong>&nbsp;&nbsp;<\/li>\n<\/ol>\n\n\n\n<p>Przetestuj wybrane frameworki w praktyce. Przygotuj zestaw test\u00f3w, kt\u00f3re s\u0105 reprezentatywne dla twojego projektu, i zaimplementuj je w ka\u017cdym z framework\u00f3w. Analizuj, jakie frameworki s\u0105 najbardziej intuicyjne i proste w u\u017cyciu.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Sprawd\u017a integracj\u0119<\/strong>&nbsp;&nbsp;<\/li>\n<\/ol>\n\n\n\n<p>Je\u015bli rozwijana aplikacja u\u017cywa zewn\u0119trznych narz\u0119dzi, upewnij si\u0119, \u017ce framework, kt\u00f3ry wybierzesz, integruje si\u0119 z nimi. Na przyk\u0142ad, je\u015bli korzystasz z platformy Continuous Integration, upewnij si\u0119, \u017ce framework, kt\u00f3ry wybierzesz, posiada dla niej plugin.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>Zwr\u00f3\u0107 uwag\u0119 na dost\u0119pno\u015b\u0107 dokumentacji i wsparcia spo\u0142eczno\u015bci<\/strong>&nbsp;&nbsp;<\/li>\n<\/ol>\n\n\n\n<p>Wybierz framework, kt\u00f3ry ma dobr\u0105 dokumentacj\u0119 i szerok\u0105 spo\u0142eczno\u015b\u0107 u\u017cytkownik\u00f3w. To pomo\u017ce w rozwi\u0105zywaniu problem\u00f3w technicznych, jakie mo\u017cesz napotka\u0107 podczas pracy z frameworkiem.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie\">Podsumowanie<\/h2>\n\n\n\n<p>Podsumowuj\u0105c, wyb\u00f3r frameworka do automatyzacji test\u00f3w zale\u017cy od wielu czynnik\u00f3w i nie ma jednoznacznej odpowiedzi na pytanie, kt\u00f3ry z nich sprawdzi si\u0119 w twoim projekcie. Obecnie na rynku jest dost\u0119pnych wiele typ\u00f3w framework\u00f3w, musisz wi\u0119c zbada\u0107 r\u00f3\u017cne opcje i wybra\u0107 ten, kt\u00f3ry najlepiej odpowiada twoim wymaganiom i specyfice projektu. <\/p>\n\n\n\n<p>Mam nadziej\u0119, \u017ce tym artyku\u0142em uda\u0142o mi si\u0119 te\u017c przybli\u017cy\u0107 mo\u017cliwo\u015bci stosunkowo nowego narz\u0119dzia, jakim jest Atata. Cho\u0107 Selenium jest jednym z bardziej popularnych i cenionych narz\u0119dzi, warto poznawa\u0107 inne opcje. Atata jest ci\u0105gle rozwijana przez spo\u0142eczno\u015b\u0107 programist\u00f3w, co oznacza, \u017ce ka\u017cdy mo\u017ce przyczyni\u0107 si\u0119 do usprawnie\u0144, zg\u0142aszaj\u0105c b\u0142\u0119dy, wprowadzaj\u0105c ulepszenia lub pisz\u0105c dokumentacj\u0119. W ten spos\u00f3b Atata staje si\u0119 coraz lepszym narz\u0119dziem.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Automatyzacja to coraz bardziej doceniane podej\u015bcie do testowania oprogramowania. Nie tylko pozwala zaoszcz\u0119dzi\u0107 czas i koszty w projektach, ale w d\u0142u\u017cszej perspektywie \u2013 dostarczy\u0107 klientowi produkt lepszej jako\u015bci. Decyduj\u0105c si\u0119 na automatyzacj\u0119, warto dobrze przemy\u015ble\u0107 wyb\u00f3r narz\u0119dzi, w tym framework\u00f3w testowych. W tym artykule znajdziesz przegl\u0105d najwa\u017cniejszych typ\u00f3w framework\u00f3w do automatyzacji test\u00f3w. Wezm\u0119 te\u017c pod lup\u0119 wci\u0105\u017c nie tak bardzo znane na rynku narz\u0119dzie Atata, bazuj\u0105ce na Selenium WebDriver, i zestawi\u0119 jego mo\u017cliwo\u015bci z tymi, jakie oferuje czyste Selenium.<\/p>\n","protected":false},"author":147,"featured_media":30655,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":57,"footnotes":""},"categories":[1,582],"tags":[562],"offering":[522],"class_list":["post-30638","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-qa","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/147"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=30638"}],"version-history":[{"count":3,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30638\/revisions"}],"predecessor-version":[{"id":33957,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30638\/revisions\/33957"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/30655"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=30638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=30638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=30638"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=30638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}