Skrypt testowy Node.JS + Selenium - kilka pytań

Skrypt testowy Node.JS + Selenium - kilka pytań
FR
  • Rejestracja:około 8 lat
  • Ostatnio:2 miesiące
  • Postów:14
0

Cześć wszystkim. Jestem zupełnie świeży w tematyce testowania automatycznego (jak dotychczas zajmowałem się testowaniem manualnym), ale postanowiłem, że spróbuję napisać prosty skrypt testujący logowanie do strony WWW przy użyciu Selenium i Node.JS. Jak na razie wyszło mi coś takiego:

var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;

var driver = new webdriver.Builder()
.forBrowser('firefox')
.build();

driver.get('https://poczta.o2.pl/');
driver.findElement(By.id('login')).sendKeys('admin');
driver.findElement(By.id('pass')).sendKeys('adminadmin');
driver.findElement(By.id('login-button')).click();
driver.sleep(6000).then(function() {
driver.getTitle().then(function(title) {
if(title === '@o2 Odebrane') {
console.log('Test passed');
} else {
console.log('Test failed');
}
});
});

driver.quit();

Działa, pomijając fakt, że pewnie jest napisane dość koślawo :) Moja pytania brzmią:

  1. W jaki sposób mogę dodać do tego skryptu kolejne akcje do wykonania w ramach testu logowania? Powiedzmy, że chciałbym sprawdzić, czy można się zalogować wpisując poprawny login, niepoprawne hasło, potem w opcji niepoprawny login i hasło, potem bez wpisywania niczego, potem bez klikania w przycisk, tylko po kliknięciu enter itd. Czy takie akcje powinienem dodać w ramach tego samego skryptu testowego czy raczej powinny to być oddzielne skrypty? Jeżeli w ramach jednego, to jak dodać kolejne etapy do zamieszczonego przeze mnie skryptu?

  2. Jak przerobić taki skrypt, aby był zgodny z Page Object Pattern? Czytałem kilka tutoriali na ten temat, ale nadal nie rozumiem, co powinienem właściwie zrobić, więc gdyby ktoś wytłumaczył mi to jak najbardziej łopatologiczny sposób, a zwłaszcza, na przykładzie, to byłbym bardzo wdzięczny :)

  3. Czy moje podejście do pisania testów automatycznych jest w ogóle właściwe? Tak jak wspominałem korzystam z Selenium Stand Alone Server + Node.JS + Selenium Webdriver + Webdriver do Firefox. Skrypty piszę w Notepad++. Gdybym chciał później umieścić taki projekt na GIT, to jak mógłbym to zrobić?

Wiem, że pytania które zadaję będą dla większości z Was łatwizną, ale tak jak napisałem na początku, jestem świeży w temacie, ale rządny wiedzy :)

Z góry dziękuję za każdą podpowiedź i pozdrawiam!

edytowany 1x, ostatnio: frankeiro
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 3 godziny
  • Postów:8423
1

Skrypty piszę w Notepad++. Gdybym chciał później umieścić taki projekt na GIT, to jak mógłbym to zrobić?

  1. instalujesz Git: https://git-scm.com/
  2. otwierasz konsolę, wchodzisz do katalogu z projektem, robisz git init a potem dodajesz odpowiednie pliki (doczytasz sobie jak to zrobić) i robisz potem git commit (wystarczy, że się oczytasz z podstawami Gita, czyli oficjalny podręcznik + StackOverflow i jedziesz)
  3. pamiętaj, że Git to nie żaden serwer, ten projekt będzie zapisany u ciebie na dysku, a nie w internecie (chyba, że ci chodzi o hosting repozytoriów Gita, np. Github, Gitlab etc.)

edytowany 1x, ostatnio: LukeJL
Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
1

Zainwestuj w jakiś test runner i bibliotekię do asercji (lub dwa w jednym), bo robienie testów console.logiem i ręczne asercje to jak wbijanie gwoździa kamieniem, gdy obok leży młotek. Polecam też rzucić okiem na http://webdriver.io/ - dużo to wygodniejsze niż toporne, gołe Selenium.

edytowany 3x, ostatnio: Maciej Cąderek
FR
  • Rejestracja:około 8 lat
  • Ostatnio:2 miesiące
  • Postów:14
0
Maciej Cąderek napisał(a):

Zainwestuj w jakiś test runner i bibliotekię do asercji (lub dwa w jednym), bo robienie testów console.logiem i ręczne asercje to jak wbijanie gwoździa kamieniem, gdy obok leży młotek. Polecam też rzucić okiem na http://webdriver.io/ - dużo to wygodniejsze niż toporne, gołe Selenium.
A co byś polecił jako test runner i bibliotekę do asercji? Tak jak pisałem, jestem zielony w temacie :)

Webdriver.io kojarzę i muszę przetestować.

Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
1

A co byś polecił jako test runner i bibliotekę do asercji? Tak jak pisałem, jestem zielony

Webdriver.io w przykładach korzysta z Mocha + Chai, więc w to będzie chyba Ci najłatwiej wejść (nie mówiąc już o tym, że to bardzo dobre narzędzia i najpopularniejszy zestaw do testów w JS).

edytowany 1x, ostatnio: Maciej Cąderek
FR
  • Rejestracja:około 8 lat
  • Ostatnio:2 miesiące
  • Postów:14
0
Maciej Cąderek napisał(a):

A co byś polecił jako test runner i bibliotekę do asercji? Tak jak pisałem, jestem zielony

Webdriver.io w przykładach korzysta z Mocha + Chai, więc w to będzie chyba Ci najłatwiej wejść (nie mówiąc już o tym, że to bardzo dobre narzędzia i najpopularniejszy zestaw do testów w JS).

Dzięki za rady :) A byłbyś w stanie coś podpowiedzieć do mojego pytania nr 1 i 2?

Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
0
frankeiro napisał(a):

W jaki sposób mogę dodać do tego skryptu kolejne akcje do wykonania w ramach testu logowania? Powiedzmy, że chciałbym sprawdzić, czy można się zalogować wpisując poprawny login, niepoprawne hasło, potem w opcji niepoprawny login i hasło, potem bez wpisywania niczego, potem bez klikania w przycisk, tylko po kliknięciu enter itd. Czy takie akcje powinienem dodać w ramach tego samego skryptu testowego czy raczej powinny to być oddzielne skrypty? Jeżeli w ramach jednego, to jak dodać kolejne etapy do zamieszczonego przeze mnie skryptu?

Jakie chcesz dodawać kolejne etapy skoro rzeczy, które chcesz sprawdzać są niezależnymi ścieżkami? Owszem, bez problemu może to być jeden plik (nawet jeden describe (mocha), bo testujesz różne przypadki jednej funkcjonalności), ale każda ścieżka to powinien być osobny test (it w mocha). Na początku (ważne!) każdego z tych testów powinien być setup jeśli jest potrzebny (w Twoim przypadku jakieś wylogowanie, może być w beforeEach (mocha)).

Jak przerobić taki skrypt, aby był zgodny z Page Object Pattern? Czytałem kilka tutoriali na ten temat, ale nadal nie rozumiem, co powinienem właściwie zrobić, więc gdyby ktoś wytłumaczył mi to jak najbardziej łopatologiczny sposób, a zwłaszcza, na przykładzie, to byłbym bardzo wdzięczny :)

Co do PageObject - polecam artykuł: https://martinfowler.com/bliki/PageObject.html
Tu masz konkretne przykłady: http://webdriver.io/guide/testrunner/pageobjects.html

edytowany 1x, ostatnio: Maciej Cąderek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.