Początkujący adepci testowania automatycznego zastanawiają się czasem, jakie są języki skryptowe do automatyzacji testów?
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?