Artykuły | 20 kwiecień, 2023

Frameworki do automatyzacji testów. Wprowadzenie do Atata

Automatyzacja to coraz bardziej doceniane podejście do testowania oprogramowania. Nie tylko pozwala zaoszczędzić czas i koszty w projektach, ale w dłuższej perspektywie – dostarczyć klientowi produkt lepszej jakości. Decydując się na automatyzację, warto dobrze przemyśleć wybór narzędzi, w tym frameworków testowych. W tym artykule znajdziesz przegląd najważniejszych typów frameworków do automatyzacji testów. Wezmę też pod lupę wciąż nie tak bardzo znane na rynku narzędzie Atata, bazujące na Selenium WebDriver, i zestawię jego możliwości z tymi, jakie oferuje czyste Selenium.

Frameworki do automatyzacji testów. Wprowadzenie do Atata

Kiedy i dlaczego automatyzować testy oprogramowania?

Czym jest automatyzacja?

Zanim skupimy się na temacie frameworka, jakim jest Atata, chciałabym słowem wstępu przypomnieć, czym w ogóle jest automatyzacja testów oprogramowania i dlaczego warto się nią zainteresować. Wokół tego tematu narosło bowiem wiele mitów.

Testowanie to bardzo istotny element procesu wytwarzania oprogramowania. Jednym z podejść do tego zagadnienia jest automatyzacja, czyli wykorzystanie specjalnych narzędzi i frameworków, które umożliwiają programowanie testów i ich automatyczne wykonanie bez dalszej ingerencji człowieka.

Korzyści automatyzacji

Automatyzacja tych procesów może przynieść niezliczone korzyści, w tym jedną z najważniejszych – oszczędność czasu i kosztów. Ponadto testy automatyczne są bardziej powtarzalne i dokładniejsze niż testy przeprowadzane ręcznie, co przekłada się na ich niezawodność i skuteczność.

Scenariusze i przypadki testowe a automatyzacja

Warto rozważyć opcję automatyzacji testów w naszym projekcie również z powodu możliwości przeprowadzania testów o skomplikowanych scenariuszach i w wielu środowiskach jednocześnie, co mogłoby stanowić wyzwanie podczas ręcznego realizowania scenariusza testowego na co dzień. Możliwe jest przeprowadzanie testów na różnych platformach, w różnych konfiguracjach sprzętowych i sieciowych, co byłoby trudne lub wręcz niemożliwe do osiągnięcia w przypadku testów manualnych.

Tworzenie przypadków testowych w zautomatyzowanej formie zapewnia ich powtarzalność, a co za tym idzie, podnosi ich skuteczność w wykrywaniu defektów. Właśnie dlatego automatyzacja jest szczególnie użyteczna w testowaniu funkcjonalności krytycznych dla aplikacji. Warto jednak pamiętać, że rzeczywistość testowa nie jest zero-jedynkowa i jak wszystko ma swoje plusy i minusy. Jakie są zatem ciemne strony automatyzacji?

Przeczytaj także: Jak pisać scenariusze testowe? Jak scenariusz testowy pomaga na późniejszych etapach pracy rozwoju oprogramowania? Czym różnią się scenariusze testowe i przypadki testowe? 

Ciemne strony automatyzacji

Automatyzacja testów może być fantastycznym rozwiązaniem w wielu projektach, lecz nie jest uniwersalnym rozwiązaniem. W niektórych przypadkach testy manualne mogą być dużo lepszą, bardziej efektywną lub nawet jedyną dostępną opcją. Dlatego przed podjęciem decyzji o automatyzacji testów warto dokładnie przeanalizować specyfikę projektu, potrzeby, które się z nim wiążą, oraz wszelkie dostępne narzędzia i frameworki.

Nie można też zapominać o czasie, który należy zainwestować w stworzenie zautomatyzowanych przypadków testowych. Wymaga to wielu godzin pracy, tworzenia konfiguracji oraz rozwiązywania problemów, które nie występują podczas ręcznego testowania oprogramowania. Jest to proces, który z początku może rozwijać się bardzo powoli, a miarodajne wyniki nieraz są widoczne dopiero po włożeniu w projekt ogromu pracy. Nie do pominięcia jest również potrzeba zatrudnienia testera automatyzującego, który będzie zdolny do zaprojektowania całego systemu tak, aby testy były stabilne i zgodne z dobrymi praktykami programowania.

Typy frameworków do automatyzacji testów

Frameworki do automatyzacji to narzędzia, które ułatwiają to zadanie, dostarczając rozwiązań dla wielu powszechnych problemów. W zależności od potrzeb i specyfiki projektu możemy wybierać spośród różnych typów frameworków. Poniżej krótki opis wybranych z nich.

Library Architecture Framework

Library Architecture Framework (LAF) to jedna z popularnych technik automatyzacji testów oprogramowania. W ramach tej metodyki wykorzystywane są biblioteki z gotowymi funkcjami testowymi, które mogą być wywoływane w kodzie testu. LAF jest często stosowany w przypadkach, gdy testy są skomplikowane i wymagają wielu etapów, a także w sytuacjach, gdy testy muszą działać na różnych systemach operacyjnych i przeglądarkach internetowych.

Ten typ frameworka sprawdza się zwłaszcza w przypadku testów niskiego poziomu, takich jak testy jednostkowe.

Module Based Testing Framework (MBTF)

To rodzaj frameworka do automatyzacji testów oprogramowania, który opiera się na modularnym podejściu do projektowania testów. W tym modelu testy są projektowane w sposób modułowy, a każdy moduł obejmuje jedną funkcjonalność lub przypadki testowe związane z jednym modułem aplikacji. W MBTF moduły testowe są projektowane w taki sposób, by były uniwersalne, mogły być wykorzystywane wielokrotnie dla różnych aplikacji i systemów. Po stworzeniu zestawu modułów można ich użyć w różnych projektach bez potrzeby ponownego pisania kodu.

Linear Automation Framework

Linear Automation Framework to rodzaj frameworka do automatyzacji testów, który opiera się na liniowym podejściu. W LAF testy są projektowane w taki sposób, aby odzwierciedlały procesy biznesowe lub scenariusze użytkowania aplikacji. Oznacza to, że są one wykonywane w sposób sekwencyjny. W tym modelu testy są projektowane jako zestawy kroków, a każdy krok testu jest związany z akcją użytkownika lub wynikiem, który jest oczekiwany w aplikacji. Zaletą Linear Automation Framework jest to, że testy są bardziej zbliżone do rzeczywistych przypadków użycia, co może przyczynić się do znalezienia bardziej życiowych defektów w aplikacji, takich, na które trafiłby użytkownik.

Hybrid Test Automation Framework

To rodzaj frameworka, który łączy w sobie cechy wszystkich wymienionych powyżej podejść. Ten typ umożliwia projektowanie i wykonanie testów w sposób elastyczny i dopasowany do potrzeb projektu. W HTAF testy są tworzone w sposób modularny, podobnie jak w Module Based Testing Framework, ale z większą elastycznością i dostępem do szerokiej gamy narzędzi testowych. Framework ten pozwala na integrację różnych narzędzi i technologii, takich jak Selenium WebDriver, TestNG, Appium, JMeter itp., co pozwala na automatyzację testów w różnych środowiskach, takich jak aplikacje webowe, mobilne, desktopowe i wiele innych.

Atata automation framework

Atata to pełnowartościowy framework do automatyzacji testów, który jest oparty na Selenium WebDriver i zaprojektowany z myślą o aplikacjach internetowych. Został napisany w języku C# i oferuje szeroki zakres funkcjonalności, które ułatwiają automatyzację testów aplikacji internetowych.

Atata – zalety

  • Dostępność – framework Atata jest w pełni open source’owy i dostępny na platformie GitHub na licencji Apache License 2.0.
  • Przejrzystość i łatwość użytkowania – jednym z kluczowych elementów Atata Framework jest użycie modelu Fluent Page Object Pattern. Ten wzorzec pozwala na pisanie kodu, który jest łatwy do czytania i zrozumienia. Wbudowany system logowania ułatwia śledzenie i rozwiązywanie problemów podczas testowania.
  • Triggery – dodatkowo, framework ma unikalną funkcjonalność triggerów, która pozwala na uruchamianie niestandardowego kodu w momencie wystąpienia określonych zdarzeń.
  • Niski próg wejścia – Atata została zaprojektowana w taki sposób, aby była łatwa w użyciu i utrzymaniu. Framework dostarcza prostą i intuicyjną składnię do definiowania i używania obiektów występujących na stronie. Wymaga to minimalnej ilości kodu, co pozytywnie wpływa na czytelność oraz ułatwia wprowadzenie kolejnych testerów do projektu.
  • Gotowe komponenty – framework dostarcza również zestaw gotowych do użycia komponentów, które mają ułatwiać pracę. Komponenty te to np. kontrolki, strony i układy. Atata dostarcza szeroki zakres wbudowanych kontrolek, które można wykorzystywać do interakcji z elementami internetowymi na stronie. Kontrolki to np. przyciski, pola tekstowe, pola wyboru, przyciski opcji i wiele, wiele innych.
  • Data-driven testing – Atata obsługuje również testowanie oparte na danych. Umożliwia testerom tworzenie testów, korzystając z funkcji Data-Driven Testing. Dzięki tej funkcji developerzy mogą uruchamiać ten sam scenariusz testowy z różnymi zestawami danych.
  • Testowanie równoległe – framework obsługuje również testowanie równoległe. Dzięki funkcji Parallel Testing testerzy mogą uruchamiać wiele testów jednocześnie, co może znacznie zmniejszyć czas potrzebny do przetestowania. Jest to szczególnie przydatne w przypadku dużych aplikacji internetowych, które wymagają rozbudowanej kontroli jakości.

Atata – wady

Mimo swoich wielu zalet Atata Framework ma także pewne wady.

  • Ograniczone zastosowanie – jedną z głównych wad jest to, że framework jest ograniczony tylko do obsługi stron internetowych. Jest to istotne ograniczenie np. dla firm rozwijających oprogramowanie, które oprócz stron webowych projektują również inne rodzaje aplikacji. W takim przypadku konieczne może być użycie innego narzędzia do automatyzacji testów.
  • Dostępny wyłącznie z C# – framework ten jest też stworzony tylko dla języka C#, co uniemożliwia wykorzystanie go przez wielu programistów specjalizujących się w innych popularnych językach programowania.
  • Mała społeczność – kolejną wadą w porównaniu do innych narzędzi służących do automatyzacji testów może być mniejsza społeczność. Framework ten jest stosunkowo nowy, w porównaniu do innych narzędzi, które istnieją na rynku od wielu lat. Musimy się liczyć z mniejszą ilością zasobów i dokumentacji online, a także materiałów pomocy dostępnych dla użytkowników. Na szczęście społeczność użytkowników jest bardzo zaangażowana i gotowa do pomocy. Warto też zaznaczyć, że kontakt z twórcami frameworka jest niezwykle prosty, a komunikacja bardzo sprawna (odpowiedź na większość problemów można uzyskać od samych twórców nawet w 20 minut).

Jednak pomimo tych wad Atata Framework jest nadal jednym z najlepszych narzędzi do automatyzacji testów internetowych w języku C#. Jego liczne zalety sprawiają, że jest on popularny wśród testerów, którzy szukają prostego i intuicyjnego sposobu na automatyzację.

Atata vs Selenium

Na wstępie warto zaznaczyć, że pytanie nie jest do końca adekwatne w kontekście omawianego zagadnienia. Powiem więcej, porównywanie Selenium, do nakładki, jaką stanowi Atata, może się wydawać bezzasadne. Jest to przecież nic innego jak framework przykrywający swoimi funkcjonalnościami bazę, która dostarcza nam niezbędnych, podstawowych narzędzi. Dzięki takiemu zabiegowi dostajemy „ładniejszą” wersję Selenium, przyjemniejszą w użytku i szybszą w implementacji.

Przeczytaj także: Testy E2E – Cypress vs Selenium

Mimo to postanowiłam zebrać istotne różnice w formie tabeli poniżej. Warto być świadomym, jakie korzyści może przynieść zastosowanie takiej nakładki dla całego projektu. Koniec końców przy planowaniu prac projektowych wybór nie jest prosty i im więcej możliwości, tym trudniej podjąć decyzję nawet w obrębie frameworków opierają się na innych, dostępnych już narzędziach.

Atata vs Selenium

Atata

Jedną z największych zalet frameworka Atata jest jego użyteczny system logowania, który umożliwia śledzenie i diagnozowanie problemów w trakcie testowania. Atata oferuje także unikalne funkcje, takie jak mechanizm triggerów, który umożliwia wykonywanie niestandardowego kodu w odpowiedzi na określone zdarzenia podczas testowania.

Atata

Atata oferuje również intuicyjną składnię do definiowania i używania obiektów strony, co ułatwia programowanie i utrzymanie testów. Wspiera zastosowanie modelu Page Object Pattern, co dla zwolenników tego wzorca jest ogromną zaletą. Struktura jest dzięki temu przejrzysta i łatwiejsza w zrozumieniu. 

Framework posiada wbudowany zestaw gotowych komponentów, takich jak kontrolki, strony i układy, co przyspiesza proces automatyzacji testów. Poniżej zamieściłam przykład możliwości, jakie oferuje nam Atata – zawiera nie tylko podstawowe elementy stron jak pola tekstowe, ale rozróżnia też pola przeznaczone dla adresów e-mail, haseł, numerów czy plików. Poza tym, obsługuje listy wyborów, elementy klikalne i wiele, wiele innych. Pełną specyfikację i możliwości można zawsze odnaleźć w bardzo czytelnie napisanej dokumentacji https://atata.io/components/.

using _ = TextBoxPage; //alias for better readability 
    [Url(TextBoxUrl)]      //Url extension to base url placed in SpecFlowHooks.cs 
    [VerifyTitle("ToolsQA")] 
    public class TextBoxPage : BasePage<_>  
    { 
        private const string TextBoxUrl = "/text-box"; 
 
 
        [FindById("userName")] //Selector to find element 
        public TextInput<_> UserNameTextBoxInput { get; set; } //An element with its type and name 
 
 
        [FindById("userEmail")] 
        public EmailInput<_> UserEmailTextBoxInput { get; set; } 
 
 
        [FindById("currentAddress")] 
        public TextArea<_> CurrentAddressTextBoxTextArea { get; set; } 
 
 
        [FindById("permanentAddress")] 
        public TextArea<_> PermanentAddressTextBoxTextArea { get; set; } 
 
 
        [FindById("submit")] 
        public Button<_> SubmitTextBoxButton { get; set; } 
        
        [FindById("output")] 
        public Text<_> TextBoxOutputBox { get; set; } 
 
 
        [FindById("name")] 
        public Text<_> TextBoxOutputName { get; set; } 
 
 
        [FindById("email")] 
        public Text<_> TextBoxOutputEmail { get; set; } 
 
 
        [FindById("currentAddress")] 
        public Text<_> TextBoxOutputCurrentAddress { get; set; } 
 
 
        [FindByXPath("output")] 
        public Text<_> OutputBox { get; set; } 
 
 
        [FindById("permanentAddress")] 
        public Text<_> TextBoxOutputPermanentAddress { get; set; } 
    } 
 

Zastosowanie gotowych komponentów

Komponenty Atata

Mimo ogromu możliwości zdarza się jednak, że brakuje nam komponentu lub niemożliwe jest zastosowanie gotowego rozwiązania, które oferuje Atata. Na szczęście twórcy nie odebrali nam możliwości sensownego dostępu do czystej wersji Selenium i bez przeszkód możemy wyszukiwać nasze elementy lub stosować określone akcje wobec nich. Poniżej przykład wywołania WebDrivera.

  public class ProjectDetailsPage : BasePage<ProjectDetailsPage> 
    { 
        public int findGarageParkingPlaces() 
        { 
            var element = AtataContext.Current.Driver.FindElement(By.XPath("//div[contains(text(),'Garage Parking Places')]")); 
            return int.Parse(element.FindElement(By.ClassName("value")).Text); 
        } 
    } 

Wywołanie AtataContext.Current.Driver 

Dla fanów raportów i tabelek również znajdzie się tu przydatna funkcja. Atata oferuje wbudowane narzędzie do wykonywania zrzutów ekranu według wybranego wzoru np. po wykonaniu każdego kroku. Jeżeli połączymy t funkcję z biblioteką do tworzenia raportów np. ExtendedReports otrzymujemy bardzo przyjemne środowisko do generowania raportów w formie pliku .html.

Po uruchomieniu testów mamy natychmiastowy wgląd w wyniki wraz ze statystykami, zaznaczonymi błędami, tagami i wykresami. Na pierwszy rzut oka można powiedzieć, że takie dane oferuje nam również samo IDE, jednak forma zestawienia ich przez tą bibliotekę jest dużo czytelniejsza i przyjemniejsza dla oka. Po drobnych zmianach w celu dostosowania się do potrzeb projektu dostajemy raport, który możemy przedstawić podczas spotkań biznesowych bez dużego nakładu pracy.

 class=
Przykład raportu
Przykład raportu
  [Screenshot(AfterAnyAction)] 
    public abstract class BasePage<TOwner> : Page<TOwner> 
        where TOwner : BasePage<TOwner> 
    { 
        //Some general helping methods that can be used in all pages 
        public int[] GetElementSize(Text<TOwner> element) 
        { 
            return new int[2] { element.ComponentSize.Width.Value, element.ComponentSize.Height.Value }; 
        } 
         
        public void AcceptAlert() 
        { 
            AtataContext.Current.Driver.SwitchTo().Alert().Accept(); 
        } 
 
 
        public string GetAlertMessage() 
        { 
            return AtataContext.Current.Driver.SwitchTo().Alert().Text; 
        } 
    } 

Przykład dodawania zrzutów ekranu do raportu

Intuicyjnie zostało rozwiązane też zagadnienie dotyczące nawigowania między stronami aplikacji w trakcie jednej sesji. W załączonym niżej przykładzie można zauważyć, że wystarczy zastosować funkcję Go.To (idź do) lub On (pozostań na stronie). Wystarczy przesłać odpowiedni adres strony do metody – nie ma konieczności otwierania i zamykania sesji w odpowiedni sposób tak, jak ma to miejsce przy użyciu Selenium bez nakładki. Przyczynia się to do znacznych oszczędności czasu przy konfiguracji środowiska.

 [Binding] 
    public sealed class TextBoxSteps : BaseSteps 
    { 
        private readonly ScenarioContext _scenarioContext; 
 
 
        [Obsolete("Visual Studio IntelliSense Work Around", true)] 
        public TextBoxSteps(ScenarioContext scenarioContext) 
        { 
           _scenarioContext = scenarioContext;   //Initializing scenario context, you can save test session data in it 
           SetRandomUser(_scenarioContext);      //Creating new fake user data and saving it in context so it can be used in multiple tests without generating new set  
        } 
 
 
        [When(@"User input all personal data on address form page")] //SpecFlow binding to feature files, methods are named the same as scenario steps  
        public void WhenUserInputAllPersonalDataOnAddressFormPage() 
        { 
            Go.To<TextBoxPage>()                 //Open page    
                .UserNameTextBoxInput.Set(User.FirstName + " " + User.LastName) //Make actions on web elements from page you just opened eg. set -> input text  
                .UserEmailTextBoxInput.Set(User.Email) //User.Email is a reference to our generated fake data 
                .CurrentAddressTextBoxTextArea.Click() 
                .CurrentAddressTextBoxTextArea.Set(User.Country) 
                .PermanentAddressTextBoxTextArea.Set(User.Country); 
        } 
 
 
        [When(@"confirm the data by clicking button")] 
        public void WhenConfirmTheDataByClickingButton() 
        { 
            On<TextBoxPage>()                     //On already opened page 
                .SubmitTextBoxButton.Click(); 
        } 
 
 
        [Then(@"user should see provided data below")] 
        public void ThenUserShouldSeeProvidedDataBelow() 
        { 
            On<TextBoxPage>() 
                .TextBoxOutputBox.Should.BeVisible()  //Should is assertion verification if something is as you wanted 
                .TextBoxOutputName.Content.Should.Contain($"Name:{User.FirstName} {User.LastName}") 
                .TextBoxOutputEmail.Content.Should.Contain($"Email:{User.Email}") 
                .TextBoxOutputCurrentAddress.IsVisible.Should.BeTrue() 
                .TextBoxOutputCurrentAddress.GetContent(ContentSource.Value).Should.Contain(User.Country) 
                .TextBoxOutputPermanentAddress.GetContent(ContentSource.Value).Should.Contain(User.Country); 
        } 
    } 
 
 

Przykład nawigowania po stronach (Go.To oraz On), ponownie wklejam pełny kontekst klasy

Niestety, framework ten powstał tylko dla języka programowania C#, co jest poważnym ograniczeniem względem Selenium, które działa również z Javą czy Pythonem.

Który framework do automatyzacji testów będzie najlepszy dla mojego projektu?

Wybór frameworka do automatyzacji testów zależy od wielu czynników, takich jak rodzaj projektu, wymagania biznesowe, preferencje programistów i dostępne zasoby. Oto kilka kroków, które mogą pomóc w wyborze najlepszego frameworka dla twojego projektu:   

  1. Określ swoje wymagania  

Przed podjęciem decyzji o wykorzystaniu danego frameworka do automatyzacji testów musisz wiedzieć, jakie są twoje wymagania. Na przykład, jeśli twój projekt zakłada rozwój aplikacji webowej, to framework, który wspiera testowanie interfejsów użytkownika, może być najlepszym wyborem. Nie ma sensu też wybierać technologii, która wspiera dodatkowo inne rodzaje aplikacji kosztem tego, który nas interesuje.   

  1. Znajdź odpowiednie narzędzia  

Skonsultuj się z programistami i testerami, którzy mają doświadczenie w automatyzacji testów, i poproś ich o zalecenia co do narzędzi. Zbierz informacje o różnych frameworkach, ich funkcjonalnościach, ograniczeniach i zasobach społecznościowych.   

  1. Przetestuj frameworki  

Przetestuj wybrane frameworki w praktyce. Przygotuj zestaw testów, które są reprezentatywne dla twojego projektu, i zaimplementuj je w każdym z frameworków. Analizuj, jakie frameworki są najbardziej intuicyjne i proste w użyciu.   

  1. Sprawdź integrację  

Jeśli rozwijana aplikacja używa zewnętrznych narzędzi, upewnij się, że framework, który wybierzesz, integruje się z nimi. Na przykład, jeśli korzystasz z platformy Continuous Integration, upewnij się, że framework, który wybierzesz, posiada dla niej plugin.   

  1. Zwróć uwagę na dostępność dokumentacji i wsparcia społeczności  

Wybierz framework, który ma dobrą dokumentację i szeroką społeczność użytkowników. To pomoże w rozwiązywaniu problemów technicznych, jakie możesz napotkać podczas pracy z frameworkiem.   

Podsumowanie

Podsumowując, wybór frameworka do automatyzacji testów zależy od wielu czynników i nie ma jednoznacznej odpowiedzi na pytanie, który z nich sprawdzi się w twoim projekcie. Obecnie na rynku jest dostępnych wiele typów frameworków, musisz więc zbadać różne opcje i wybrać ten, który najlepiej odpowiada twoim wymaganiom i specyfice projektu.

Mam nadzieję, że tym artykułem udało mi się też przybliżyć możliwości stosunkowo nowego narzędzia, jakim jest Atata. Choć Selenium jest jednym z bardziej popularnych i cenionych narzędzi, warto poznawać inne opcje. Atata jest ciągle rozwijana przez społeczność programistów, co oznacza, że każdy może przyczynić się do usprawnień, zgłaszając błędy, wprowadzając ulepszenia lub pisząc dokumentację. W ten sposób Atata staje się coraz lepszym narzędziem.

Pracuje jako tester automatyzujący w Inetum, specjalizuje się w C# i Selenium, ale jest otwarta na nowe możliwości rozwoju. W wolnych chwilach uwielbia siąść pod kocem, włączyć serial i wydziergać kolejny koc na drutach czy szydełku. Do tego jej dom zazwyczaj przepełnia zapach świeżego chleba na zakwasie, którego wypiekiem się pasjonuje.

Zapisz się do newslettera, ekskluzywna zawartość czeka

Bądź na bieżąco z najnowszymi artykułami i wydarzeniami IT

Informacje dotyczące przetwarzania danych osobowych

Zapisz się do newslettera, ekskluzywna zawartość czeka

Bądź na bieżąco z najnowszymi artykułami i wydarzeniami IT

Informacje dotyczące przetwarzania danych osobowych

Zapisz się do newslettera, aby pobrać plik

Bądź na bieżąco z najnowszymi artykułami i wydarzeniami IT

Informacje dotyczące przetwarzania danych osobowych

Dziękujemy za zapis na newsletter — został ostatni krok do aktywacji

Potwierdź poprawność adresu e-mail klikając link wiadomości, która została do Ciebie wysłana w tej chwili.

 

Jeśli w czasie do 5 minut w Twojej skrzynce odbiorczej nie będzie wiadomości to sprawdź również folder *spam*.

Twój adres e-mail znajduje się już na liście odbiorców newslettera

Wystąpił nieoczekiwany błąd

Spróbuj ponownie za chwilę.

    Get notified about new articles

    Be a part of something more than just newsletter

    I hereby agree that Inetum Polska Sp. z o.o. shall process my personal data (hereinafter ‘personal data’), such as: my full name, e-mail address, telephone number and Skype ID/name for commercial purposes.

    I hereby agree that Inetum Polska Sp. z o.o. shall process my personal data (hereinafter ‘personal data’), such as: my full name, e-mail address and telephone number for marketing purposes.

    Read more

    Just one click away!

    We've sent you an email containing a confirmation link. Please open your inbox and finalize your subscription there to receive your e-book copy.

    Note: If you don't see that email in your inbox shortly, check your spam folder.