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?

Testy ż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 kontra 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. Nie chcę mówić, ile zajęłoby to np. w C++ 🙂 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 co tylko.

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 jakies własne typy?

3 myśli nt. „Języki skryptowe do automatyzacji testów

  1. lRem

    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.

    Odpowiedz
    1. d9k Autor wpisu

      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:)

      Odpowiedz

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *