TSM - Cucumber & TestNG

Lorand Berekmeri - Automation Engineer @ Telenav

Dacă sunteți interesați de testarea automată sau începători în acest domeniu, atunci acest articol vă va ajuta foarte mult, informându-vă despre instrumentul numit Cucumber, care este ușor de învățat și de înțeles. Odată lămurite caracteristicile acestuia, le vom integra într-un framework de testare automată folosind TestNG, Selenium și Maven.

Codul sursă al acestui proiect poate fi descărcat de pe Git. Frameworkul este construit pentru a rula cu succes atât pe sistemul de operare MAC OSX, cât și pe Windows.

Cucumber este un tool utilizat pentru organizarea testelor automate și este folosit în special cu Behavior Driven Development (proces specific ingineriei software care este derivat din Test Driven Development).

În schema de mai jos se poate vedea cum arată configurația unui proiect bazat pe Cucumber.

Fig.1 Cucumber

BDD este o tehnică mai elegantă de exprimare a cerințelor unui produs software, dar este de reținut faptul că nu este o metodologie software de sine stătătoare, ci una care trebuie să fie utilizată împreună cu alte metodologii, precum Agile sau Test Driven Development. De asemenea, tehnologia prezentată oferă un mod de lucru mai organizat.

Fig.2 BDD

Pentru a putea rula teste folosind Cucumber, trebuie să adăugați în proiect fișiere specifice numite features, în care să scrieți cel puțin un scenariu de testare.

Fișierele feature sunt scrise folosind sintaxa Gherkin. Schema de mai jos vă va ajuta să înțelegeți mai bine cum vor arăta pașii.

Fig.3 Fișier feature

Ce este TestNG?

TestNG este un framework de testare automată folosit împreună cu limbajul de programare Java. Acesta oferă suport pentru diferite adnotări, instanțe și o configurare simplă a fișierelor XML. Totodată, cu ajutorul unor pluginuri specifice, putem genera rapoarte în format HTML sau XML.

În cazul în care alegem să folosim TestNG ca mediu de testare implicit avem mai multe avantaje, cum ar fi configurarea flexibilă a testelor, suport pentru teste parametrizate și cu o organizare clară a suitelor de teste. De asemenea, este suportat de o mare varietate de și tooluri (InteliJ IDEA, Eclipse). Pentru a vă putea instala TestNG aveți nevoie minim de JDK 8.

Adnotări

Fig.4 TestNG

Următoarele metode vor rula în diferite contexte:

@BeforeSuite: înaintea tuturor testelor din suită.

@AfterSuite: după execuția tuturor testelor din suită.

@BeforeTest: înaintea fiecărui test din clasa curentă.

@AfterTest: după fiecare metodă de test din clasa curentă.

@BeforeClass: înaintea primei metode de test din clasa curentă.

@AfterClass: după execuția tuturor metodelor de test din clasa curentă.

@BeforeMethod: înaintea fiecărei metode din clasa curentă.

@AfterMethod: după fiecare metodă din clasa curentă.

@Test: Parametru care ne indică o metodă de test.

Introducere în Selenium

Selenium este un instrument de testare utilizat pentru aplicațiile Web și oferă cel mai bun mod de a automatiza testele Web. Periodic se lansează versiuni îmbunătățite pentru driverele de Selenium și oferă suport pentru mai multe tipuri de browsere (Google Chrome, Mozilla Firefox, Internet Explorer) .

Maven - generalități

Maven este un instrument software care funcționează în mare parte cu ajutorul diferitelor pluginuri și este folosit pentru a construi aplicații Java; pluginuri specifice Maven ar fi cele pentru testare, rularea unui Web server, generarea de fișiere de proiect (HTML, XML, JSON etc). Toate acestea se vor defini în directorul pom.xml în secțiunea de . Pentru a afla mai multe detalii despre rolul și funcţionalitatea acestuia puteţi accesa site-ul Apache Maven.

Fig.5 Selenium & Maven

Cerințe de sistem

  1. Configurare Java (minimum JDK 8) în variabilele de sistem.

  2. Configurare Apache Maven în variabilele de sistem.

  3. Puteți alege între IntelliJ IDEA și Eclipse ca mediu de dezvoltare.

  4. Descărcaţi oricare dintre următoarele executabile: chromedriver.exe, geckodriver.exe sau IEDriverServer.exe. Driverele trebuie salvate într-un director drivers.

Implementare

Primul pas ar fi crearea unui proiect de tip Maven și adăugarea codului de mai jos în fișierul pom.xml. Selectați 'Enable Auto-Import' care va apărea după crearea proiectului (pentru a-l activa manual, trebuie parcurși pașii următori: File-Settings-Maven-Importing-enable 'Import Maven projects automatically').

Fig.6: Pom.xml

<properties>...</properties> : secțiunea în care este mai ușor să setăm versiunile dependențelor de care avem nevoie pentru implementare.

Fig. 7: Pom.xml 2

<dependency>...</dependency> : secțiunea în care setăm dependențele proiectului.

<build>...</build>

  1. <resource> : path-ul spre pașii de test (src/test/resources).

  2. maven-surefire-plugin: plugin folosit pentru generarea rapoartelor de tip HTML.

  3. <suiteXmlFiles> : pathul spre fișierul în care ne definim suita de test.

  4. <systemPropertyVariables> : specificăm browserul care va fi transmis ca parametru în clasa Hooks

Fig.7.2 Pom.xml 3

Adăugarea librăriei: File - Settings - Plugins - căutat după: 'Cucumber for Java' - click 'Search in repositories' - click pe Install.

Fig.8 Cucumber for Java plugin

Definiți structura proiectului după modelul de mai jos:

În pachetul runner adăugăm clasa Runner cu codul de mai jos. Aici vom defini instrumentul de testare folosit, classpathul proiectului și modul în care să se afișeze rezultatele testelor (folosim pluginul cucumber-html-report).

Fig.9 Runner

Adăugăm un fișier TestSuite.xml în rootul proiectului. În acest fișier vom specifica locația test runnerului.

Fig.10 TestSuite

Adăugăm fișierul config.properties în rootul proiectului, printr-un click dreapta pe numele proiectului, click New și Resource Bundle. Aici vom oferi runnerului un browser pe care să navigheze și să ruleze testele automate (se poate alege între Google Chrome, Mozilla Firefox și Internet Explorer).

Fig.11 config.properties

Pasul următor e să adăugăm clasa Hooks în pachetul de steps. Scopul acestei clase este de a seta sistemul de operare indentificat de clasa OSDetector și de a alege driverul potrivit pe care să ruleze testele.

Fig.12 Hooks

De asemenea, cu metoda descrisă mai jos, vom specifica sistemul de operare detectat.

@Before(order = 1)
  public void storeOs() {
    CommonSteps.setDetectedOs(getOs().toString());
    LOG.info("Test cases will be executed on the"+
    " detected {} operating system."
        , CommonSteps.getDetectedOs());
}

În clasa OSDetector vom detecta sistemul de operare cu metoda getProperty și apoi în cealaltă metodă, vom seta chromedriverul specific pentru fiecare sistem de operare.

Fig.13 OSDetector

Proiectul este construit folosind o arhitectură pe mai multe nivele, folosind 'Page Object' ca design pattern. Pachetul pageobjects este proiectat pentru a modela obiectele identificate pe pagini.

Fig.14 MainScreen

Urmează definirea pașilor pe care îi vom folosi pentru a construi scenariul de test.

Fig.15 Steps

A venit timpul să scriem scenariul de test în fișierul feature. Liniile de mai jos reprezintă un exemplu de test care este gata implementat în frameworkul oferit ca suport.

Feature: My feature

  @cucumber-test
  Scenario: Log in
    Given I navigate on the page
      Then Application is displayed
      When I choose to sign in
        Then the "Authentication" page is displayed
        When I enter the "test_test@test.com" "email" 
         for Log in
        When I enter the "Test1234!" "password" for 
         Log in
        When I click on the Submit button to Log in
          Then the "My Account" page is displayed

Concluzie

Cucumber este un tool foarte util pentru testarea automată și oferă o modalitate ușoară de organizare a testelor, respectiv a scenariilor. De asemenea, TestNG oferă o mulțime de metode care facilitează lucruri precum clickuri, completarea automată de formuri, navigarea între pagini web, rapoarte HTML, cod organizat.

Dacă doriți să scrieți teste automate, atunci TestNG și Cucumber sunt cu siguranță o alegere bună.

Resurse

  1. The Cucumber for Java Book, Behaviour-Driven Development for Testers and Developers by Seb Rose, Matt Wynne & Aslak Hellesøy