Goniec regresji? Małe automaty w aplikacjach przyjaznych testom

Goniec regresji? Małe automaty w aplikacjach przyjaznych testom
Idealnym środowiskiem pracy każdego testera byłaby samotestująca się aplikacja z wieloma funkcjami, które wspierałyby wykonanie testów. Czy to jest możliwe?
 

Czy znasz taką sytuację: w projekcie uznano, że nie ma sensu automatyzować (pisać skryptów automatycznych). I tu pojawia się masa wymówek: projekt jest niewielki, nie ma czasu, narzędzia, którymi dysponujemy wymagają dużego nakładu pracy albo najzwyczajniej ich nie lubisz. Jednak chcesz automatyzować, bo widzisz w tym wartość dodaną.

A może chcesz automatyzować w domu, nie mając dostępu do płatnych narzędzi (z górnej półki) jak QTP. Może Ty albo Twoi znajomi próbowali używać już Selenium Webdriver, ale stwierdziliście, że potrzebuje ono większego doświadczenia programistycznego, aby swobodnie go używać?

Może wtedy doszedłeś do podobnego stwierdzenia jak ja. Chcę aplikację i automat, gdzie automat jest jedynie gońcem, docierającym do różnych miejsc aplikacji i zbierającym informacje. Tak zebrane dane automat/goniec przekazywałby do analizy albo sam by ją wykonywał. Chcę wydać tylko komendę „Goń i zbieraj wyniki”. 

Gdybym to ja miał zdefiniować oczekiwania wobec takiego automatu/gońca i samotestującej się aplikacji, powiedzmy webowej, wyglądałyby one następująco.

Aplikacja:

  • Self Testing – aplikacja ma wbudowane testy dymne. Po uruchomieniu sama się testuje w podstawowym zakresie i w przypadku wyniku pozytywnego podaje komunikat „Ready For Use”. Wbudowane self testy uruchamiane są w trybie bezpiecznym, który nazwiemy Test Mode. Automat zewnętrzny uruchomi wbudowane testy i będzie zbierał wyniki.
  • Selfie – aplikacja potrafi wykonać sobie sama „zdjęcie” i przechować je w archiwum zrzutów (screen shotów). Na życzenie może zaprezentować na zdjęciu swój poprzedni stan wraz z analizą ewentualnych zmian. Ktoś zarzuci, że są narzędzia do robienia zrzutów, ale według mnie byłoby łatwiej, gdyby dostęp do poprzedniego widoku strony czy formatki był w miejscu jej przeglądania. Obecnie w jednym z moich projektów, gdzie robione są zrzuty jest osobna wyszukiwarka (poza aplikacją) do ich odnajdywania. Wygodniej byłoby zaciągać poszukiwany widok bezpośrednio z aplikacji w trybie Test Mode i wyświetlać go w osobnym oknie. Okno mogłoby być wyświetlane w trybie transparentnym, aby dodatkowo można było go nałożyć na istniejące i łatwo porównać. Automat uruchamiałby zrobienie nowego „Selfie” i dostawał analizę porównawczą z widokiem zachowanym w archiwum. 
  • Self presentation – obiekty aplikacji powinny same się przedstawiać i pokazywać swoje dane oraz właściwości. Automat zewnętrzny „kroczący” po aplikacji w trybie Test Mode po dotarciu do obiektu (np. najechaniu myszką na niego) otrzymuje pełną informację o obiekcie (pozycje, szerokość, wysokość, tekst, i inne). W przypadku aplikacji webowych można pracować z przeglądarkami w trybie podglądu właściwości obiektów, ale czytanie tych danych przez automat jest niewygodne. Automat mógłby otrzymywać te dane w innej formie.
  • Show metrics – niektóre metryki, dane, wykresy, mogłyby być dostępne z pozycji aplikacji w Trybie Test Mode. Aplikacja przedstawiałaby, w jakim jest stanie jakości.

 

Po konsultacji z programistami warstwy prezentacji, odnośnie moich oczekiwań, dowiedziałem się, że jest to wykonalne. Jednak burzy to koncepcje formy aplikacji do jakiej się przyzwyczaili i "może kiedyś" w przyszłości wezmą to pod uwagę.

Nie czekając na sprzyjający moment w przyszłości postanowiłem samodzielnie zrealizować jedno z oczekiwań. Ponieważ duża część testów jakie wykonywałem automatem była regresją, gdzie znane było zachowanie i położenie obiektu, zabrałem się za wykonanie „Self presentation”. Użyłem do tego pluginu do Chroma, TamperMonkey.

 

 

Tampermonkey dostarcza możliwość uzupełnienia aplikacji dostarczonej przez deweloperów o dodatkowe funkcje napisane np. na potrzeby testów. 

Funkcje pisane są w języku JavaScript i można je aktywować na dowolnej stronie webowej. 

Napisałem 3 proste funkcje:

  • MouseOver AND Keypress + Z – gdy najedziemy myszką na obiekt i klikniemy ”Z”, czytane są właściwości obiektu, wysokość, szerokość, tekst oraz położenie.

 

 

  • KeyPress + C –  akcja z klawiatury wywołuje zapisanie do pliku przeczytanych wcześniej danych.

 

 

Mając przygotowane po stronie Tampermonkey funkcje, realizujące oczekiwanie Self Presentation, przystąpiłem do napisania skryptu w AutoIT służącego jedynie do przemieszczania się po aplikacji. Skrypt zapisuje do pliku pozycje myszki, aby później je odtworzyć uruchamiając komendę MouseMove. 

 

Automat "goniec"

Poniżej widok formatki z przyciskami do zapisywania i odtwarzania poszczególnych kroków.

 

 

Start Record – uruchamia nagrywanie, rejestracje położenia myszki. 

KeyPress + Q – wskazanie myszką obiektu i naciśnięcie „Q” powoduje zapisanie położenia obiektu. W momencie odtwarzania wykonywana jest akcja MouseMove.

KeyPress + W – wskazanie myszką obiektu i naciśnięcie „W” powoduje zapisanie położenia obiektu i wykonania akcji „Click”, (potrzebne, gdy chcemy przejść do kolejnej strony). W momencie odtwarzania wykonywana jest akcja MouseClick.

KeyPress + PageUP/Down – rejestruje przewinięcie strony. W momencie odtwarzania wykonuje akcje PageUP/PageDown.

„Play” – odtwarzał zapisane sekwencje wybranych pozycji na ekranie i powodował ruch myszki po ekranie wraz z ewentualnymi „kliknięciami”.

"Clear" – kasuje zebrane dane.

 

Poniżej działanie przykładowego skryptu.

 

 

Po zakończeniu skryptu otwiera się plik tekstowy z danymi weryfikowanych obiektów na stronie.

Kolejne przejście tego samego skryptu powoduje porównanie plików wynikowych poprzedniego i aktualnego przejścia.

 

Podsumowanie

  1. Tryb Test Mode w aplikacji uprościłby życie testerów, pośrednio deweloperów i wszystkich stakeholderów. Tryb ten udostępniałby funkcje ułatwiające testowanie, „SelfTesting”, „Selfie”, „Self Presentation”, „Show Metrics”.
  2. Automat pracujący na aplikacji będącej w trybie Test Mode byłby jedynie gońcem, tylko i aż zbierającym wystawione dane (bądź wyniki wewnętrznych testów).
  3. Tampermonkey daje możliwość dodawania swoich funkcji testowych do aplikacji webowych.
 
 

O autorze

Marcin Jędras jest zatrudniony w ADMD Roche Polska na stanowisku Senior Test Specialist. Zajmuje się pisaniem skryptów automatycznych do aplikacji webowych oraz desktop. Wykorzystuje między innymi Ruby/Watir, webdriver 2.0, AutoIt, CasperJS oraz metody rozpoznawania obrazów do lokalizacji obiektów i wyszukiwania zmian na screen shotach aplikacji.

 

Od redakcji

Jeśli tak jak Marcin chcesz podzielić się swoją wiedzą z innymi testerami, czekamy na Twój artykuł, film, komentarz, pracę dyplomową czy inną formę treści, jaką chcesz opublikować na naszych łamach.