Języki skryptowe do automatyzacji testów

Początkujący adepci testowania automatycznego zastanawiają się czasem, jakie są języki skryptowe do automatyzacji testów?

Języki skryptowe do automatyzacji, takie że mucha nie siada.

Testy że mucha nie siada! No chyba że na bukszpanie. Foto: moje, ogród, 2017

W czym można automatyzować testy?

Z jednej strony można odpowiedzieć, że prawie we wszystkim. Większość języków oprogramowania nadaje się do automatyzacji testów, a to za sprawą wszechstronności bibliotek używanych do testów.

Np. Selenium, świetne do automatyzacji stron webowych, umożliwia pisanie testów interfejsowych w wielu językach, z czego najpopularniejsze to:

  • C# (wraz z NUnit w roli test runnera),
  • Java (tu do wyboru jUnit lub TestNG),
  • JavaScript (jak to w świecie JS – masa frameworków: WebdriverJS, WebdriverIO, NightwatchJS),
  • Ruby (RSpec, Test::Unit),
  • Python (Robot Framework, unittest, pyunit, py.test),
  • PHP (Behat, Mink).

Podobnie jest w innych narzędziach do automatyzacji, bazujących na driverze – np. Appium.

Języki skryptowe do automatyzacji kontra języki kompilowane

Najlepszym wyborem dla testera będą jednak języki skryptowe. Omijają typowe problemy języków kompilowanych, oferując mnóstwo już zaimplementowanych, typowych funkcji.

Przykład? Wczytanie i sparsowanie pliku CSV do listy w Pythonie zajmuje cztery linijki. CZTERY LINIJKI:

import csv
file = open('plik.csv', 'r')
csvAsList = list(csv.reader(file))
print csvAsList
file.close()

I tyle. Jasne, kochamy języki kompilowane, ale zostawmy je do innych zastosowań. Do testów nie zawsze potrzeba aż takiego narzutu: zakładanie projektu, tworzenie klas, instalowanie kompilatora itd… W przypadku języka skryptowego jedyne, czego potrzeba, to środowiska uruchomieniowego i… notatnika. To wszystko. Szybkie i przenośne.

Naturalnie języki skryptowe nie są bez wad (są powolne, a projekty bywają trudne w utrzymaniu), ale każdy kij ma dwa końce. Pamiętajmy, że mówimy tu o zastosowaniu ich do TESTÓW. A testy ma się pisać szybko. Bo i tak za chwilę może się okazać, że trzeba je zmienić. Muszą być w dodatku czytelne nawet dla mniej technicznych użytkowników. Tj. mieć schowane „bebechy” – bez skomplikowanych pętli, kontroli błędów na wierzchu kodu testowego i tak dalej. W kodzie testowym powinno zostać odzwierciedlone samo sedno działania aplikacji. Kod przypadku testowego, dla maksymalnej czytelności, może zawierać tylko odwołania do funkcji, np.:

OpenMainPage()
LogInAsAdmin()
post = AddNewPost(defaultContent)
OpenMainPage()
RemovePost(post)

Tego typu przypadek testowy jest w miarę jasny nawet dla mniej technicznych osób (biznes analityków, testerów manualnych).

Jakie są języki skryptowe do automatyzacji testów?

Wybór jest spory. Obecnie rosnącą popularnością cieszy się Python. Jest dostępny na wszystkie platformy (Windows, Linux, MacOS) i oferuje mnóstwo funkcji i bibliotek do obsługi prawie wszystkiego – począwszy od czytania i parsowania różnych plików, XML, HTML czy wysyłania requestów HTTP, po modny dziś machine learning czy Big Data.

W środowiskach javowych często stosowana jest Scala, gdyż działa na tym samym środowisku uruchomieniowym co Java (może także działać na środowisku .NET). Swoją popularność zawdzięcza współpracę z narzędziem Gatling, w którym można zaprogramować testy obciążeniowe i wydajnościowe.

Środowisko Ruby ma prostą odpowiedź na to pytanie – i jest nią oczywiście Ruby 😉 Możemy zatem używać go i do pisania aplikacji i do testów.

Poza typowymi językami wymienionymi wyżej, testy do aplikacji webowych można pisać także w JavaScript. Mogą być wtedy uruchamiane np. dzięki serwerowi Node.Js. Świat JavaScripta jest wyjątkowo bogaty, dlatego na pewno każdy znajdzie tam coś dla siebie.

Zastanawiałam się, czego używają do testów w środowiskach .NET. My pisaliśmy testy w C# i w Powershellu 😉 I jest to chyba istotnie odpowiedź na to pytanie. Powershell ma bardzo duże możliwości dzięki bliskiemu współdziałaniu z systemem operacyjnym. Dodatkowo umożliwia pisanie kodu w C#.

Jeśli potrzebujemy czegoś zintegrowanego z systemem Windows, świetnie sprawdzi się AutoIt, sprytny język, który po skompilowaniu staje się w 100% samodzielną aplikacją – nie potrzeba instalować na systemie żadnych dodatkowych bibliotek. Dzięki integracji z systemem Windows, potrafi robić rzeczy, które byłyby trudne do osiągnięcia w innych językach (np. podpiąć się pod systemowe eventy).

Jak widać, możliwości jest zatem całkiem sporo. Wiele zależy po prostu od konkretnych wymagań. Z drugiej strony żaden wybór nie jest raczej „ślepą uliczką”, narzędzia można ze sobą bardzo często dowolnie łączyć i integrować. A Wy, macie jakieś własne typy? Jakie języki skryptowe do automatyzacji są wybierane przez was?

Przydatny wpis? Postaw mi kawę :)

0 0 votes
Article Rating
Subscribe
Powiadom o
guest
6 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
Anna Kurtasz
5 lat temu

Czarna magia 😉

lRem
5 lat temu

Muszę powiedzieć, że te argumenty przeciwko C++ są dość naiwne. Przewaga Pythona w pięciolinijkowcach praktycznie zanika gdy przekroczymy kilka tysięcy linii kodu. Owszem, kod nigdy nie jest tak rozdmuchany jak C++, ale to co zajmuje uwagę to wzajemne zależności między konceptami, a nie szczegóły ich implementacji. Infrastruktura do testowania może jest trochę trudniejsza do ogarnięcia, ale to i tak nie zajmie doświadczonej osobie więcej niż dwie godziny.

Dodam też, że niestety popularność Pythona raczej spada. Głównie na rzecz Go, które imho jest bardzo kiepskim językiem.

lRem
5 lat temu

Muszę powiedzieć, że te argumenty przeciwko C++ są dość naiwne. Przewaga Pythona w pięciolinijkowcach praktycznie zanika gdy przekroczymy kilka tysięcy linii kodu. Owszem, kod nigdy nie jest tak rozdmuchany jak C++, ale to co zajmuje uwagę to wzajemne zależności między konceptami, a nie szczegóły ich implementacji. Infrastruktura do testowania może jest trochę trudniejsza do ogarnięcia, ale to i tak nie zajmie doświadczonej osobie więcej niż dwie godziny.

Dodam też, że niestety popularność Pythona raczej spada. Głównie na rzecz Go, które imho jest bardzo kiepskim językiem.

d9k
d9k
5 lat temu
Reply to  lRem

lRem, tak, C++ jest fantastyczny i tak, stosuje się go także w testach. Swój wpis kieruję jednak do początkujących testerów chcących zacząć z automatyzacją – takie osoby często pytają mnie, od czego zacząć, bo tyle jest narzędzi i języków, że czują się zagubione. Wolę im wtedy powiedzieć o Pythonie albo Scali, bo są to języki w miarę znane, dobrze udokumentowane, z dużym community. Testy ma się pisać w miarę szybko i sprawnie. Jeśli ktoś jest wymiataczem języka X, to nikt mu nie broni używać go, myślę jednak, że wtedy nie będzie szukał porady na blogach:)

Anna Kurtasz
5 lat temu

Czarna magia 😉