Facebook - konwersja
Czytaj fragment
Pobierz fragment

  • Empik Go W empik go

Gherkin Guru - ebook

Wydawnictwo:
Data wydania:
1 marca 2025
Format ebooka:
EPUB
Format EPUB
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najpopularniejszych formatów e-booków na świecie. Niezwykle wygodny i przyjazny czytelnikom - w przeciwieństwie do formatu PDF umożliwia skalowanie czcionki, dzięki czemu możliwe jest dopasowanie jej wielkości do kroju i rozmiarów ekranu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, MOBI
Format MOBI
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najczęściej wybieranych formatów wśród czytelników e-booków. Możesz go odczytać na czytniku Kindle oraz na smartfonach i tabletach po zainstalowaniu specjalnej aplikacji. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
(2w1)
Multiformat
E-booki sprzedawane w księgarni Virtualo.pl dostępne są w opcji multiformatu - kupujesz treść, nie format. Po dodaniu e-booka do koszyka i dokonaniu płatności, e-book pojawi się na Twoim koncie w Mojej Bibliotece we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu przy okładce. Uwaga: audiobooki nie są objęte opcją multiformatu.
czytaj
na tablecie
Aby odczytywać e-booki na swoim tablecie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. Bluefire dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na czytniku
Czytanie na e-czytniku z ekranem e-ink jest bardzo wygodne i nie męczy wzroku. Pliki przystosowane do odczytywania na czytnikach to przede wszystkim EPUB (ten format możesz odczytać m.in. na czytnikach PocketBook) i MOBI (ten fromat możesz odczytać m.in. na czytnikach Kindle).
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na smartfonie
Aby odczytywać e-booki na swoim smartfonie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. iBooks dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
Czytaj fragment
Pobierz fragment

Gherkin Guru - ebook

Na wszystkich etapach procesu wytwarzania oprogramowania konieczna jest kontrola i zapewnienie jakości, realizowane poprzez rozbudowany proces testowania. Zazwyczaj testowaniem zajmują się dedykowane zespoły testerskie. Z tej książki dowiesz się, jak stworzyć podstawowe testy automatyczne. Wykorzystasz też wiedzę o BDD i język Gherkin do zarządzania projektem i estymacji.

Kategoria: Programowanie
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-8414-237-0
Rozmiar pliku: 1,2 MB

FRAGMENT KSIĄŻKI

TYTUŁEM WSTĘPU

Na wszystkich etapach procesu wytwarzania oprogramowania konieczna jest kontrola i zapewnienie jakości, realizowane poprzez rozbudowany proces testowania. Zazwyczaj testowaniem zajmują się dedykowane zespoły testerskie. Często w metodykach zwinnych członek zespołu testerskiego wchodzi także w skład zespołu projektowego, na bieżąco monitorując sytuację w projekcie i postępy programistów, czuwając nad właściwym zapewnieniem jakości aplikacji z punktu widzenia użytkownika końcowego.

Zespołom programistycznym zaleca się tworzenie testów jednostkowych na wczesnym etapie tworzenia oprogramowania, zapewniających jak największe pokrycie kodu.

Jednak śledząc sytuację rynkową, te procesy nadal nie są wystarczające dla zapewnienia satysfakcjonującego dla potencjalnego klienta poziomu jakości. Klienci biznesowi oczekują oprogramowania pozbawionego błędów funkcjonalnych i graficznych na poziomie pokrycia niemal stu procent. Wszystkie użyte w procesie tworzenia oprogramowania procesy nie są w stanie zapewnić takiego pokrycia. Niestety, coraz częściej dochodzi do sytuacji, w których całym ciężarem obarczany jest tester, jako jedno z ostatnich ogniw weryfikacji oprogramowania przed dostarczeniem wersji dla klienta końcowego.

Na tym etapie należy zdać sobie sprawę z faktu, że żadna technika, metodyka, żaden, nawet dokładnie zaplanowany i poddany kontroli proces, nie uwolni oprogramowania od wszystkich błędów. Jako zespół projektowy, uczestnicy procesu mogą jedynie wdrażać rozwiązania, zmniejszające potencjalne ryzyko do minimum.

Jednym z takich rozwiązań jest automatyzacja testów po stronie zespołu zapewnienia jakości lub zespołu testerskiego (często mylnie oba te stanowiska są łączone z punktu widzenia definicji i odpowiedzialności na danym stanowisku).

Automatyzacja, jako jeden z etapów procesu wytwarzania oprogramowania oczywiście również nie zapewnia stuprocentowego pokrycia kodu aplikacji i uwolnienia go od błędów. Jednak jest przy tym elementem który, jeżeli dobrze zaprojektowany, może znacznie odciążyć zespół projektowy i częściowo przerzucić odpowiedzialność na procesy, stojące po stronie maszyny. Integracja z narzędziami i procesami CI zapewnia kontrolę błędów na poziomie budowania aplikacji, tj. przetwarzania dostarczonego przez programistów kodu na kod zrozumiały dla maszyny w sposób ciągły i zautomatyzowany. Niniejsze rozwiązanie, dopasowane do potrzeb zespołu projektowego na podstawie wieloletnich doświadczeń jest elastyczne i może zostać wdrożone w dowolnym projekcie biznesowym.

Na przestrzeni lat i rozwoju metodyk zarządzania projektami ewoluowały również różnorodne podejścia do testów automatycznych. Największym problemem, z którym borykają się zespoły projektowe, jak również firmy informatyczne, jest brak jednoznacznego narzędzia, gwarantującego skalowalność do każdej z metodyk oraz języków programowania, stosowanych w tych firmach. Problem ten jest z reguły dystrybuowany na zespoły testerskie lub programistyczne, tym samym przerzucając odpowiedzialność za rzetelne i stuprocentowe pokrycie kodu testami.

Jak wiadomo, testy same w sobie nie stanowią o niezawodnym działaniu aplikacji, a procent pokrycia kodu skryptami nie jest wyznacznikiem jakości. Przykładowo, system może być pokryty w 90% skryptami testowymi, to jednak nie zapewnia zespołu testerskiego ani też klienta o tym, że aplikacja pozbawiona jest błędów. Nie da się bowiem żadnego programu przetestować w 100%, nie da się także przewidzieć wszystkich możliwych scenariuszy użytkownika.

Jednym ze sposobów jest wspomniany już Gherkin, język dla scenariuszy testowych, który przy współpracy z BDD daje możliwość zachowawczego projektowania przypadków testowych oraz samych funkcjonalności systemu. Jednakże to nadal nie rozwiązuje problemu. Klienci potrzebują działającego, gotowego rozwiązania, w zasadzie od zaraz. W większości przypadków klienta nie stać na szkolenie od podstaw zespołu specjalistów do spraw automatyzacji, tym bardziej w tym jednym, konkretnym języku aplikacji, w którym powstaje dany projekt. Brak skalowalności większości rozwiązań implikowałby konieczność nauki każdego z języków programowania dla projektu, a co za tym idzie coraz większy narzut kosztowy w miarę rozwoju technologii bez rozsądnej stopy zwrotu z inwestycji.

W kolejnych rozdziałach przedstawiam opis podejść i narzędzi, których użyjemy do stworzenia naszego frameworka testów automatycznych. Jeżeli jesteś już z nimi zaznajomiony, proponuję, abyś przeszedł do części praktycznej, w którym przejdziemy przez kolejne etapy instalacji i konfiguracji środowisk, od pierwszej do ostatniej linii kodu, aż po uruchomienie skryptów testowych.

Zachęcam przy tym do zapoznania się z pozycjami z bibliografii, które na pewno rozwiną wiedzę na temat metodyk, jak i przedstawionych rozwiązań.Adam Roman, _Testowanie i jakość oprogramowania_, PWN, 2015, s. 651

Kent Beck, _TDD sztuka tworzenia dobrego kodu,_ HELION, 2014, s.10

Alan Page, _The A Word. Under the Covers of Test Automation_, LeanPub, 2013, s.5

James Shore, Shane Warden, _Agile Development — Filozofia Programowania Zwinnego_, HELION, 2012, s.78

_Za:_ Kanglin Li, Mengqui Wu, _Effective GUI Test Automation,_ SYBEX, 2005, s.20

Alan Page, _The A Word. Under the Covers of Test Automation_, LeanPub, 2013, s.29

John Ferguson Smart, _BDD w działaniu. Sterowanie zachowaniem w rozwoju aplikacji,_ HELION, __ 2016, s. 60—65Behave Driven Development

Behave Driven Development jako jedna z technik wytwarzania oprogramowania poprzez definiowanie zachowań staje się coraz bardziej popularnym podejściem. Daje ono szeroki wachlarz rozwoju procesów. Z roku na rok przybywa też narzędzi, wspomagających BDD.

Pojęcie po raz pierwszy zdefiniowane przez Dana Northa łączy testy jednostkowe tworzone w podejściu Test Driven Development (TDD) i testy akceptacyjne User Acceptance Tests (UAT). Celem jest poznanie potrzeb i oczekiwań użytkownika docelowego w rozumieniu klienta i stworzenie oprogramowania, które te oczekiwania spełnia.

W podejściu BDD testy akceptacyjne pisane są najczęściej z użyciem języka Gherkin, w oparciu o historyjki użytkownika, skupiające się na roli, funkcji i wynikających z nich korzyści w rozumieniu funkcjonalności.

Parafrazując Janet Gregory, takie działanie ma na celu wytworzenie oprogramowania dopasowanego do potrzeb użytkownika już w początkowej fazie procesu wytwarzania oprogramowania. Cel ten sam w sobie nie jest łatwy do osiągnięcia, jeżeli nawet nie niemożliwy, jednakże takie podejście zapewnia zminimalizowanie wystąpienia błędów w późniejszych fazach.

Jak dodaje Liz Keogh, pojęcie „zachowanie” (behave) pozwala na eksplorację niejednoznacznych obszarów aplikacji (jak również przypadków brzegowych), których nie da się opisać zero-jedynkowo (jest lub nie ma), poprzez odwołanie się do kontekstu użytkownika. Tym samym pozwala na jednoznaczną definicję przypadków testowych dla niejednoznacznych wymagań klienta.Page Object Pattern

Podczas pisania testów stron internetowych należy odnosić się bezpośrednio do konkretnych elementów tych stron, w celu otwarcia danego linku, czy weryfikacji wyświetlania elementów. Podczas projektowania skryptów, które działają bezpośrednio na kodzie HTML testowanej aplikacji, narażone są one na zmiany występujące po stronie UI. Zastosowanie Page Object Pattern wspomaga proces tworzenia takich przypadków. Ukrywa obiekt strony, nadpisuje kod HTML lub jego fragment tzw. API specyficznym dla aplikacji, umożliwiając manipulację takimi elementami bez potrzeby bezpośrednich odwołań do kodu HTML.

Obiekty strony kierują się podstawową zasadą, by klient oprogramowania „robił” wszystko i „widział” wszystko, co człowiek (użytkownik). Zapewnia on również interfejs, który jest łatwy w programowaniu i ukrywaniu podstawowych widżetów i elementów w oknie aplikacji. Przykładowo, aby uzyskać dostęp do pola tekstowego, konieczne są metody typu „accessor”, przyjmujące i zwracające ciąg znaków. Elementy wyboru powinny używać zmiennych typu boolean, a przyciski muszą być reprezentowane nazwami metod zorientowanych na ich działanie. W założeniu obiekt strony powinien otoczyć całą tę mechanikę odpowiedzialną za znalezienie, identyfikację i manipulowanie danymi po stronie GUI. Zmiana konkretnej akcji kontroli elementu nie powinna wymusić zmiany interfejsu strony.

Mimo użycia terminu „strona”, obiekty strony nie powinny być budowane dla każdej ze stron testowanej lub tworzonej aplikacji, a dla kluczowych jej elementów. Przykładowo, strona będąca galerią zdjęć, zawierająca kilka albumów zawierałaby obiekt z listą albumów. Te obiekty zawierałyby w sobie kilka obiektów po stronie albumu. Istniałby także obiekt strony nagłówka i obiekt strony stopki. Takie skomplikowanie hierarchii obiektów interfejsu użytkownika występuje tylko w celu ustrukturyzowania interfejsu użytkownika. Obiekty będące komponentami tej hierarchii nie powinny być ujawniane przez obiekty stron. Podstawową zasadą jest takie modelowanie struktury na stronie, która ma sens dla użytkownika aplikacji. W przypadku akcji nawigowania do innej strony obiekt początkowy powinien zwrócić kolejny (nowy) obiekt dla otwartej strony.

Podsumowując, operacje na obiektach strony powinny zwracać podstawowe typy zmiennych (string, data, boolean) lub inne obiekty stron.

Obiekty stron w rozumieniu Page Object Pattern są często używane podczas testowania, ale nie powinny zawierać elementów weryfikacyjnych same w sobie. Są one odpowiedzialne jedynie za zapewnienie dostępu do niższej warstwy kodu. To po stronie testów leży zapewnienie logiki weryfikacyjnej.

Ten sam schemat ma zastosowanie nie tylko w przypadku stron internetowych czy logiki testów. Jak twierdzi Mark Fowler, spotkał się on z pozytywnym zaadaptowaniem obiektów stron w efektywnym ukrywaniu detali Java Swing UI. Jest także przekonany o powszechnym zastosowaniu Page Object Pattern w wielu innych rozwiązaniach i frameworkach bazujących na UI.

Problemy ze współbieżnością to kolejny temat, w którym można zastosować obiekty stron, chociażby poprzez ukrywanie asynchronii w operacjach asynchronicznych, które nie są widoczne dla użytkownika jako asynchroniczne. Możliwa jest także enkapsulacja wątków w interfejsie użytkownika, gdzie konieczne jest alokowanie zachowania między interfejsem użytkownika i wątkami zależnymi.

Obiekty stron to modelowy przykład enkapsulacji — ukrywają szczegóły struktury UI i odniesienia do innych komponentów strony lub testów. Dobrą manierą projektowania jest odnajdywanie takich sytuacji w miarę rozwoju kodu. Podobnie jak w przypadku enkapsulacji, daje to dwie niezaprzeczalne korzyści. Jedną z nich jest ograniczanie logiki manipulującej interfejsem użytkownika w jednym miejscu poprzez jej modyfikację bez wpływu na inne składniki systemu. Drugą z korzyści jest łatwiejsze zrozumienie kodu klienta lub testów z uwagi na intencje, by skupić się na funkcji kod lub testu a nie detalach interfejsu użytkownika.Martin Fowler, Page Object, 10.09.2013: https://martinfowler.com/bliki/PageObject.html, odczyt z dn. 12.06.2017

Selenium Framework, What is Page Object: http://www.seleniumframework.com/python-frameworks/what-is-page-object/, odczyt z dn. 4.04.2017

Being Agile, Pete Hodgson, Assertions in Page Objects: http://blog.thepete.net/blog/2013/09/13/assertions-in-page-objects/, odczyt z dn. 4.04.2017

Martin Fowler, Page Object, 10.09.2013; https://martinfowler.com/bliki/PageObject.html, odczyt z dn. 12.06.2017

Testuj.pl, Page Object Pattern dla dużej aplikacji webowej: https://www.youtube.com/watch?v=fSZrL8lt8u8, odczyt z dn. 2.12.2017

Martin Fowler, Page Object, 10.09.2013; https://martinfowler.com/bliki/PageObject.html, odczyt z dn. 15.06.2017Wybór języka programowania

W celu prawidłowej implementacji frameworka konieczny jest wybór właściwego języka programowania. O ile skalowane rozwiązanie można zaimplementować dla dowolnego języka programowania (wobec wielu opinii najlepiej takiego, w jakim stworzony został cały testowany projekt) ważne jest, aby prace nad rozwiązaniem rozpocząć od łatwego w nauce i intuicyjnego języka, na tyle elastycznego, aby późniejszy rozwój za pomocą innych języków był dość intuicyjny.

W przypadku popularnego podejścia tworzenia przypadków testowych w języku projektu, na każdym etapie w przypadku problemów z dalszym rozwojem skryptów, łatwo jest uzyskać niezbędną wiedzę od programisty zaangażowanego w powstawanie aplikacji. Jednakże brak znajomości tego języka programowania implikować może dalsze problemy po stronie testera, mające wpływ na cały zespół — konieczna jest dodatkowa nauka danego języka, powstają opóźnienia w dostarczeniu kodu z uwagi na zaangażowanie zespołu w naukę i natłok pytań ze strony zespołu testerskiego. To może prowadzić do porażki całego przedsięwzięcia, a w konsekwencji do znacznych strat, głównie finansowych.

Jednym z najprostszych rozwiązań jest identyfikacja potrzeb zespołu i klienta. Dostosowanie języka programowania do strony, która będzie właścicielem skryptów i będzie odpowiadała za ich dalszy rozwój, jest najodpowiedniejszym podejściem.

Dla zespołu testerskiego, tworzącego i utrzymującego testy automatyczne dobrym podejściem jest użycie języka programowania, w którym napisane są testy dla innych projektów, które tworzy firma zatrudniająca. Testy tworzone z pomocą Selenium nie wymagają tego samego języka do ich tworzenia, co testowana aplikacja.

Dla zespołu programistycznego warto zastanowić się nad perspektywą utrzymania kodu, to implikuje z kolei prosty wniosek, aby testy tworzyć w języku, w którym tworzona jest testowana aplikacja.

Decyzja wyboru języka programowania testów automatycznych nie jest łatwa. Obarczona jest dalszymi konsekwencjami, które warto przewidzieć i omówić przed przystąpieniem do właściwych prac, w taki sposób, aby spełnić oczekiwania zarówno zespołu projektowego, jak i klienta. Wszystko to zapewni późniejszy sukces i ułatwi dalsze prace.

W niniejszym projekcie został użyty język Python, jako wyjściowa dla dalszych prac z uwagi na łatwość nauki przez osoby początkujące (późniejsze zaznajomienie się z innymi językami programowania także nie powinno nastręczać problemów), dostępność rozwiązań, a także fakt znajomości tego języka programowania przez autora.Gherkin

Gherkin jest językiem, który rozumieją interpretery Cucumber, Behave i wiele innych. Umożliwia opisywanie zachowań aplikacji bez zagłębiania się w szczegóły, dotyczące implementacji kodu. To sprawia, że jest czytelny, zrozumiały dla biznesu, specyficzny dla domeny. Zapewnia wsparcie dla dwóch dziedzin — dokumentacji projektowej wszelkiego typu oraz automatyzacji testów.

Gramatyka specyficzna dla tego języka zdefiniowana jest w gramatyce Treetop, która jest częścią bazy kodu Cucumber. Gramatyka ta istnieje w wielu odmianach, specyficznych dla wielu języków mówionych. Oznacza to już ponad 60 języków używanych na całym świecie. Umożliwia to więc swobodny rozwój spisywanych scenariuszy w dowolnym języku, którym posługuje się zespół projektowy lub klient biznesowy.

Składnia języka Gherkin podobna jest do składni Python oraz YAML, opiera się na użyciu wcięć (akapitów) i znaków nowej linii dla zdefiniowania struktury. Znaki nowej linii definiują koniec danego kroku scenariusza.

Zakłada się użycie składni anglojęzycznej w prezentowanym projekcie.

Struktura pojedynczego pliku feature (zawierającego opisy scenariuszy dla danej funkcjonalności) przedstawia się więc następująco:

FEATURE: Zdanie opisujące w sposób zwięzły funkcjonalność

IN ORDER TO przedstawienie wartości biznesowej

AS AN rola użytkownika systemu

I WANT TO uzyskanie rezultatów, które prowadzą do określonego celu (realizacji wyników funkcjonalności)

SCENARIO: Przykładowa, możliwa do określenia, sytuacja biznesowa

GIVEN pewien wstępny warunek

AND dodatkowy warunek wstępny

WHEN pewna akcja wykonana przez użytkownika (kliknij, przejdź do strony, itp.)

AND kolejna akcja wykonana przez użytkownika

AND kolejna akcja wykonana przez użytkownika (ich ilość może być dowolna)

THEN osiągnięcie pewnego testowalnego wyniku (w części tej następuje sprawdzenie poprawności wykonania scenariuszy z części „When” przy założeniu wstępnych warunków części „Given”)

AND weryfikacja kolejnego zdarzenia

SCENARIO: Inna sytuacja biznesowa

Treść scenariusza

Możliwe jest użycie mechanizmu komentarzy w postaci linii, rozpoczynających się znakiem „#”, zawierających dowolną ilość tekstu komentarza.

Interpreter na podstawie struktury dzieli na wejściu zawartość tekstową na funkcjonalności, scenariusze oraz ich składowe — poszczególne kroki testów. Po uruchomieniu zestawu testów tekst, znajdujący się po słowie kluczowym „Given”, „And”, „When”, „Then” dla poszczególnych scenariuszy dopasowywany jest do bloku kodu wykonawczego nazywanego „definicjami kroku”, znajdującymi się w plikach „steps”.Behat, Gherkin Syntax: http://docs.behat.org/en/v2.5/guides/1.gherkin.html, odczyt z dn. 18.07.2017

Za: Dan North, What is in a story: https://dannorth.net/whats-in-a-story/, odczyt z dn. 18.07.2017 oraz Bitprohet, Specification-style nosetests output for Python: https://github.com/bitprophet/spec, odczyt z dn. 11.09.2017

Behat, Gherkin syntax: http://docs.behat.org/en/v2.5/guides/1.gherkin.html, odczyt z dn. 15.06.2017

.Selenium Framework, Behave Project Structure: http://www.seleniumframework.com/python-frameworks/behave-project-structure/, odczyt z dn. 19.05.2017

Selenium Framework, Behave Project Structure: http://www.seleniumframework.com/python-frameworks/behave-project-structure/, odczyt z dn. 20.06.2017Selenium

Selenium jest jednym z popularnych, jeżeli nie najpopularniejszym rozwiązaniem dla testów automatycznych w ujęciu testowania UI aplikacji web.

Zapewnia narzędzia do nagrywania i odtwarzania skryptów w sposób prosty i zrozumiały, bez konieczności posiadania zaawansowanej wiedzy z dziedziny programowania. Prosty eksport tak przygotowanych skryptów daje duże możliwości adaptacyjne do dowolnej platformy czy też języka programowania dzięki pseudojęzykowi Selenese. Języki programowania, wspierane przez Selenium: C#, Groovy, Java, Perl, PHP, Python, Ruby, czy scala, przewyższają dalece innych konkurentów rynkowych, nic więc dziwnego, że duże korporacje, tworzące oprogramowanie dla szerokiej gamy konsumentów indywidualnych i biznesowych, wybierają właśnie to narzędzie.

Testy przygotowane w Selenium, czy to za pomocą narzędzi nagrywających, czy za pomocą języka skryptowego, mogą zostać w łatwy sposób uruchomione w wielu popularnych, nowoczesnych przeglądarkach na urządzeniach stacjonarnych i przenośnych, dzięki czemu idealnie wpasowuje się w ideę niniejszego projektu.

Selenium przygotowane zostało z myślą o systemach Windows, Linux, OS X, nie jest więc uzależnione od platformy stosowanej przez producenta oprogramowania.

Jednocześnie Selenium jest narzędziem w pełni darmowym, rozpowszechnianym na licencji open-source Apache 2.0.Dave Haeffner, Practical tips and tricks for Selenium Test automation: http://www.slideshare.net/Applitools/practical-tips-tricks-for-selenium-test-automation-dave-haeffner, odczyt z dn. 20.09.2017

Dave Haeffner, How to use selenium successfully: http://www.slideshare.net/tourdedave/how-to-use-selenium-successfully, odczyt z dn. 20.09.2017

Selenium, What is selenium: http://www.seleniumhq.org/, odczyt z dn. 21.09.2017

Selenium, License: http://www.seleniumhq.org/about/license.jsp, odczyt z dn. 21.09.2017Behave

Behave jest interpreterem języka Gherkin dla Behave Driven Development, przygotowanym z myślą o języku Python.

Behave wykorzystuje testy pisane językiem naturalnym, użytkowym, z myślą o łatwej kooperacji pomiędzy programistami, testerami i biznesem, niekoniecznie zorientowanym na języki programistyczne w projekcie informatycznym.

Na rynku istnieje szereg podobnych narzędzi i interpreterów, dedykowanych konkretnym językom programowania i frameworka. Poniżej przedstawiono porównanie narzędzi dedykowanych językowi Python, z zaznaczeniem plusów i minusów w odniesieniu do użytego w projekcie Behave.

Jednym z narzędzi jest popularny dla Ruby i Java Cucumber. Może on być także użyty do uruchomienia testów napisanych w języku Python. Używa biblioteki „rubypython” do uruchomienia interpretera Python wewnątrz procesów Ruby. Biblioteka ta została porzucona jakiś czas temu i nie posiada już wsparcia, dlatego też Cucumber używany jest częściej z językiem Java i Ruby, aniżeli z Pythonem. Oczywistą decyzją jest użycie narzędzia w pełni wspieranego przez Python, napisanego z użyciem tego języka. Rozwiązanie to nie zostało więc użyte do stworzenia niniejszego projektu.

Kolejnym interpreterem języka Gherkin jest Lettuce. Jest on podobny do narzędzia Behave jako jedno z rozwiązań przepisanych bezpośrednio z Cucumber. Podstawowa różnica pomiędzy Lettuce i Behave to użycie jedynie dekoratora @step, zamiast wielu dekoratorów typu @given, @when, @then, @step dla zróżnicowanych kroków testów.

Lettuce nie wspiera także opcji tagowania, tak potrzebnej w tworzonym projekcie frameworka testów automatycznych. Kod definicji kroków może być przechowywany gdziekolwiek w folderze „features” — daje to nieco więcej swobody, niż w przypadku Behave, jednak poniekąd zaprzecza idei użycia Page Object Pattern w konkretnym schemacie. Innym problemem w Lettuce jest brak czyszczenia zmiennej globalnej „world” pomiędzy kolejnymi wykonaniami scenariuszy typu „outline”, przez co konieczne jest dodatkowe obsłużenie tego typu sytuacji. Behave czyści ten rodzaj zmiennych domyślnie pomiędzy każdym scenariuszem.

Na rynku istnieje także wtyczka Freshen. Jednak z uwagi na pojawiające się problemy, takie jak:

— Integracja z „nose runner” powodująca trudności w debugowaniu wyjątków porażki w testach,

— Wyniki wykonania skryptów, obsługiwane przez „nose” nie są czytelne, implikuje to konieczność instalacji dodatkowych wtyczek

— Zmienne kontekstowe nie są tak elastyczne, jak w przypadku Behave — zmiana ich nazwy czy przenoszenie wymaga dodatkowych nakładów pracy

— Nazwy kroków muszą być unikatowe, nawet jeżeli używają dekoratorów różnego typu kroków

— Brak obsługi i kontroli Before / After scenario — jedynie Before — powoduje konieczność użycia operacji „atexit” lub „teardown” pozostawia skrypty bez pełnej kontroli

Z uwagi na powyższe problemy, Lettuce nie jest brany pod uwagę jako narzędzie, które mogłoby zostać użyte w niniejszym projekcie.Python Hosted, Welcome to Behave: http://pythonhosted.org/behave/, odczyt z dn. 12.08.2017

Cucumber, Getting started with Cucumber: https://cucumber.io/docs, odczyt z dn. 12.08.2017

Python Hosted, Welcome to Behave: http://pythonhosted.org/behave/, odczyt z dn. 14.08.2017

Lettuce, introduction: http://lettuce.it/tutorial/simple.html, odczyt z dn. 14.08.2017

Python Hosted, Comparison With Other Tools: https://pythonhosted.org/behave/comparison.html, odczyt z dn. 4.12.2017

Ibidem, https://pythonhosted.org/behave/comparison.html, odczyt z dn. 4.12.2017

QA Testing Tools, Freshen: http://www.qatestingtools.com/testing-tool/freshen, odczyt z dn. 20.08.2017PyCharm

Jako zintegrowane środowisko programistyczne dedykowane językowi Python, PyCharm oferuje edycję i analizę kodu źródłowego, moduł debugowania kodu w formie graficznej, moduł uruchomieniowy dla testów jednostkowych (i automatycznych) oraz zintegrowaną kontrolę wersji.

PyCharm działa na wielu platformach. Zapewnia wsparcie dla systemów Windows, Linux oraz OSX. Wydawany jest zarówno w wersji Community Edition (darmowej), jak i w wersji Professional. W projekcie użyto wersji Professional ze względu na pełne wsparcie wtyczek, koniecznych do jego realizacji.

Zestaw funkcji edytora PyCharm spełnia oczekiwania, stawiane narzędziom wspierającym pisanie kodu programów. PyCharm zawiera w sobie edytor w sposób inteligentny podświetlający składnię kodu, co ułatwia jego uzupełnianie, pisanie i lokalizację ew. błędów popełnionych przez programistę. Funkcja weryfikacji błędów składni na bieżąco podczas pisania kodu wraz z graficznym debuggerem Python i integracją z systemami kontroli wersji zapewnia płynne i stosunkowo łatwe zarządzanie kodem testów.Envato Tuts +, Denis Sokolov, Headless Functional Testing with Selenium and PhantomJS: https://code.tutsplus.com/tutorials/headless-functional-testing-with-selenium-and-phantomjs--net-30545, odczyt z dn. 14.08.2017

Real Python, Headless Selenium Testing With Python and PhantomJS: https://realpython.com/blog/python/headless-selenium-testing-with-python-and-phantomjs/, odczyt z dn. 23.07.2017

PhantomJS, FAQ: http://phantomjs.org/faq.html, odczyt z dn. 12.09.2017

Google Developers, Getting Started with Headless Chrome: https://developers.google.com/web/updates/2017/04/headless-chrome, odczyt z dn. 13.09.2017Podstawy Informatyki, Podstawy obsługi systemów UNIX/Linux: http://pkosla.kis.p.lodz.pl/fl/pi_lab2.htm, odczyt z dn. 11.10.2017

Seleniumframework, Python Basic, First Project: http://www.seleniumframework.com/python-basic/first-project/, odczyt z dn. 18.11.2017

Seleniumframework, Python Basic, What Is Python: http://www.seleniumframework.com/python-basic/what-is-python/, odczyt z dn. 18.11.2017

Linuxiarze.pl, Instalacja programów w Debianie i Ubuntu — apt i dpkg: https://linuxiarze.pl/pakiety_debian1/, odczyt z dn. 4.12.2017

Github Gist, Julionc, How to install PhantomJS on Ubuntu: https://gist.github.com/julionc/7476620, odczyt z dn. 12.11.2017

Github, Joke2k, Faker: https://github.com/joke2k/faker, odczyt z dn. 2.08.2017

iPython, Introducing IPython: http://ipython.readthedocs.io/en/stable/interactive/tutorial.html, odczyt z dn. 5.04.2017

JetBrains PyCharm Blog, Dmitry Filippov, Feature Spotlight: Behavior-Driven Development in PyCharm: https://blog.jetbrains.com/pycharm/2014/09/feature-spotlight-behavior-driven-development-in-pycharm/, odczyt z dn. 10.11.2017

JetBrains, PyCharm Docs, Run/Debug Configuration: Behave: https://www.jetbrains.com/help/pycharm/run-debug-configuration-behave.html, odczyt z dn. 2.05.2017

JetBrains, Configuring Python Interpreter: https://www.jetbrains.com/help/pycharm/configuring-python-interpreter.html, odczyt z dn. 17.04.2017Seleniumframework, Python Frameworks, Behave Project Structure: http://www.seleniumframework.com/python-frameworks/behave-project-structure/, odczyt z dn. 21.05.2017

Seleniumframework, Python Frameworks, First Behave Gherkin: http://www.seleniumframework.com/python-basic/first-behave-gherkin/, odczyt z dn. 22.05.2017

Seleniumframework, Archive Test Results: http://www.seleniumframework.com/basic-tutorial/archive-test-results/, odczyt z dn. 17.04.2017

Za: StackOverflow, Setting and reading environment variables: https://stackoverflow.com/questions/5971635/setting-reading-environment-variables, odczyt z dn. 10.11.2017

Scrolltest: Step by Step Mobile App Testing with Appium in Python: http://scrolltest.com/2015/05/02/step-by-step-mobile-app-testing-with-appium-in-python/, odczyt z dn. 4.12.2017

Python For Beginners, How to use the Random Module in Python: http://www.pythonforbeginners.com/random/how-to-use-the-random-module-in-python, odczyt z dn. 18.11.2017

Seleniumframework, What Is Base Page: http://www.seleniumframework.com/python-frameworks/what-is-base-page/, odczyt z dn. 14.06.2017

Learn Python, Klasy i obiekty: http://www.learnpython.org/pl/Klasy_i_obiekty, odczyt z dn. 6.12.2017

Dave Haeffner, S_elenium Guidebook, Python Edition_, Dave Haeffner, version 1.1.0, 2016, s.17

ToolsQA, Selenium WebDriver Wait Commands: http://toolsqa.com/selenium-webdriver/wait-commands/, odczyt z dn. 22.07.2017

Za: Code Clinic, Javascript, Importing data with AJAX: https://www.lynda.com/JavaScript-tutorials/Importing-data-AJAX/369707/384717-4.html, odczyt z dn. 1.09.2017

Za: informIT, David M. Beazley, Operators and Expressions in Python: http://www.informit.com/articles/article.aspx?p=459269&seqNum=7, odczyt z dn. 10.09.2017

Dave Haeffner, Elemental Selenium, Implicit vs. Explicit Waits: elementalselenium.com,, odczyt z dn. 22.07.2017

Dave Haeffner, Elemental Selenium, Implicit vs. Explicit Waits: elementalselenium.com,, odczyt z dn. 22.07.2017

Za: Guru99, Keyboard & Mouse Event using Action Class in Selenium Webdriver: https://www.guru99.com/keyboard-mouse-events-files-webdriver.html, odczyt z dn. 14.11.2017

Dave Haeffner, _Selenium Guidebook, Python Edition_, Dave Haeffner, version 1.1.0, 2016, s.13

Za: DevNami, Get text of element in Selenium Python WebDriver: https://www.youtube.com/watch?v=zqz80o92OzQ, odczyt z dn. 3.10.2017

Za: Learn Automation, How to Scroll into view in Selenium Webdriver: http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/, odczyt z dn. 18.07.2017

Za: Nadim Saker, How to refresh or reload a page in selenium webdriver: http://nadimsaker.blogspot.com/2014/09/how-to-refresh-or-reload-page-in.html, odczyt z dn. 18.07.2017 oraz: DevNami, Python Selenium Webdriver Refresh a Webpage: https://www.youtube.com/watch?v=9vkbyVOTEbI, odczyt z dn. 9.11.2017

PythonHosted, Behave API Reference: https://pythonhosted.org/behave/api.html, odczyt z dn. 3.10.2017

PythonHosted, Behave API Reference, Before All: https://pythonhosted.org/behave/api.html, odczyt z dn. 17.04.2017

Za: StackOverflow, Passing command line argument to python-behave: https://stackoverflow.com/questions/22528535/passing-command-line-argument-to-python-behave, odczyt z dn. 10.09.2017

PythonHosted, Behave API Reference, Before Feature: https://pythonhosted.org/behave/api.html, odczyt z dn. 2.12.2017

PythonHosted, Behave API Reference, Before Scenario: https://pythonhosted.org/behave/api.html, odczyt z dn. 20.05.2017

PythonHosted, Behave API Reference, After Scenario: https://pythonhosted.org/behave/api.html, odczyt z dn. 11.08.2017

PythonHosted, Behave API Reference, After Feature: https://pythonhosted.org/behave/api.html, odczyt z dn. 3.04.2017

PythonHosted, Behave API Reference, After All: https://pythonhosted.org/behave/api.html, odczyt z dn. 23.03.2017

Selenium Python, Locating Elements: http://selenium-python.readthedocs.io/locating-elements.html, odczyt z dn. 11.10.2017 oraz Tech Beamers, Harsh S., 8 Ways To Use Locators For Selenium Testing: http://www.techbeamers.com/use-locators-selenium/, odczyt z dn. 5.12.2017

Mike Grouchy, Be Pythonic: __init__.py: http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html, odczyt z dn. 2.11.2017

Patrz: pliki projektu

Roman Pichler, 10 tips for writing good user stories: http://www.romanpichler.com/blog/10-tips-writing-good-user-stories/, odczyt z dn. 3.12.2017

Behat, Writing features — gherkin language: http://docs.behat.org/en/v2.5/guides/1.gherkin.html, odczyt z dn. 2.12.2017

Arturas Smorgun, Tagging features in Gherkin and Behat: https://arturas.smorgun.com/2014/02/13/tagging-features-in-gherkin-and-behat.html, odczyt z dn. 3.10.2017

Automation Panda, BDD01, Writing good Gherkin: https://automationpanda.com/2017/01/30/bdd-101-writing-good-gherkin/, odczyt z dn. 23.07.2017

Relish, Scenario outlines: https://relishapp.com/cucumber/cucumber/docs/gherkin/scenario-outlines, odczyt z dn. 4.08.2017

Cucumber, Gherkin Reference: https://cucumber.io/docs/reference, odczyt z dn. 11.05.2017Behave Example, Using the Step Matchers: https://jenisys.github.io/behave.example/step_matcher/using_matchers.html, odczyt z dn. 21.09.2017

Semaphore, Phillip Johnson, Getting Started with Behavior Testing in Python with Behave: https://semaphoreci.com/community/tutorials/getting-started-with-behavior-testing-in-python-with-behave, odczyt z dn. 23.09.2017

PythonHosted, Behave Tutorial: https://pythonhosted.org/behave/tutorial.html, odczyt z dn. 10.09.2017

JetBrains, PyCharm, Creating Examples Table in Scenario Outline: https://www.jetbrains.com/help/ruby/creating-examples-table-in-scenario-outline.html, odczyt z dn. 10.09.2017 oraz StackOverflow, Selecting a word using starting and ending regex: https://stackoverflow.com/questions/33254626/selecting-a-word-using-starting-and-ending-regex, odczyt z dn. 12.05.2017GitLab, GitLab Continuous Integration & Deployment: https://about.gitlab.com/features/gitlab-ci-cd/, odczyt z dn. 3.12.2017

Docker Docs, Best practices for writing Dockerfiles: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/, odczyt z dn. 4.12.2017

GitLab Documentation, GitLab Continuous Integration (GitLab CI), Configuration of your jobs with. gitlab-ci. yml: https://docs.gitlab.com/ee/ci/yaml/, odczyt z dn. 16.08.2017

/dev/blog, Docker-compose budowanie środowiska: https://devblog.it/docker-compose-budowanie-srodowiska/, odczyt z dn. 19.08.2017

GitLab Documentation, Testing standards and style guidelines, Frontend testing standards and style guidelines: https://docs.gitlab.com/ce/development/testing_guide/frontend_testing.html, odczyt z dn. 23.08.2017
mniej..

BESTSELLERY

Kategorie: