Ce sunt flaky tests in testarea automata?

Testarea automata presupune folosirea unui set destul de mare de tehnologii pentru a putea automatiza scenariile de testare dorite. Vorbim aici de o serie de framework-uri precum Cypress, Selenium sau Playwright, plus alte resurse tehnice care ne ajuta sa scriem teste automate.

Insa toate aceste tehnologii nu sunt perfecte, si corelate cu anumite elemente contextuale care nu tin neaparat de testare, printre care includem desigur si erorile umane, pot conduce la aparitia unor teste de automation imperfecte cu rezultate discutabile. Astfel, in continuarea acestui articol vom discuta despre flaky tests.

Ce sunt flaky tests in testarea automata?

Flaky tests, sau intr-o traducere mai libera „testele fragile”, sunt o consecinta negativa a scrierii de teste automate, fiind destul de neplacute pentru orice Automation QA. Concret, prin flaky tests intelegem acele teste care produc rezultate inconsistente raportat la conditiile de testare si la cerintele pe care noi, in calitate de QA, le setam.

Ca sa fim mai expliciti cu aceasta definitie, putem lua un exemplu simplu. Sa zicem ca avem un test de login pe un site de e-commerce, unde trebuie sa introducem credentialele necesare, username-ul „Mircea” si parola „12345”, dam click pe butonul de Login si asteptam sa ne apara interfata generala a site-ului. In mod normal, daca se respecta datele de test si nu apar probleme de alta natura, testul ar fi passed.

Daca ar fi insa un flaky test, atunci acesta ar produce rezultate amestecate, ar fi si passed in anumite situatii, dar ar si pica in destul de multe ocazii, in aceleasi conditii de desfasurare. Practic, rezultatele acestui test nu ar mai fi consistente, ci variabile si greu de prevazut, ca la un joc de Bingo.

Aici mai trebuie facuta o mentiune: nu orice test care mai pica uneori este neaparat un flaky test. Testele automate pot sa fie failed din multe cauze si trebuie sa vedem foarte exact care sunt acestea. Iar o situatie extrem de comuna e atunci cand in aplicatie apare un bug.

Revenind la exemplul de mai sus, daca folosim niste credentiale gresite de logare (parola „qwerty”) si tot ne putem loga in cont, atunci e un bug extrem de serios, si cauza tine de aplicatie, nu de testul automat. La fel, daca folosim credentialele corecte si cand se apasa butonul de Login nu se intampla nimic, este iarasi un bug, pe care testul automat il descopera foarte clar in acest sens pentru noi.

De aceea, nu orice test care pica este automat un test fragil si inconsistent. Ca sa vorbim de flaky test, ar trebui sa ne asiguram ca am corectat si investigat toate cauzele posibile pentru care acel test nu trece, respectiv nu pica cand ar trebui sa o faca.

Cum si de ce apar aceste teste flaky?

Exista mai multi factori, de natura tehnica sau umana, care pot conduce la aparitia de flaky tests in proiectele de testare automata. Printre aceste cauze putem mentiona:

  • Problema mediului de rulare. In general testele automate ruleaza pe o anumita versiune a aplicatiei respective si intr-un mediu controlat de testare. Insa daca aceste elemente au probleme (de stabilitate, de server, de performanta etc.), atunci aceste lucruri impacteaza si rezultatele testelor automate, devenind inconsistente.
  • Logica in care a fost scris testul. In esenta, ca la development, si la logica testelor automate se aplica principiul simplitatii (keep it simple, keep it short). Insa daca acel test nu a fost scris suficient de bine, nu are suficiente asertii plasate acolo unde ar trebui sau foloseste locatori prea instabili si relativi ori pur si simplu exista scapari din cauza neatentiei umane, atunci aceste lucruri pot conduce la rezultate ciudate.
  • Dependintele externe. De regula, framework-urile de testare in sine folosesc anumite dependite, adica bucatele de cod si functii aditionale importate (imprumutate) ca sa ruleze testele automate. Daca aceste dependinte sunt insa corupte, nu sunt actualizate la zi, sau exista conflicte de functionare intre ele, atunci exista sanse foarte mari ca testele sa produca rezultate aleatorii.
  • Probleme legate de concurenta testelor. Aceasta e o situatie in care uneori anumite teste automate se bazeaza sau depind de rezultatul unor teste precedente, atunci se creeaza contextul pentru niste flaky tests. Daca sa zicem testul precedent facea sa adauge un produs intr-un cos de cumparaturi, iar urmatorul test sa il achizitioneze efectiv, atunci daca primul test a fost subred si a picat, va pica si al doilea.
  • Alte elemente de logica implicate in teste. Uneori se poate intampla ca anumite elemente verificate sa implice date relative, precum timpul (ora, ziua etc.). In aceste situatii, daca sa zicem testul se executa mai lent si nu se ajunge intr-un punct dorit la un anumit moment, rezultatele vor fi inconsistente.

Astfel, motivele pentru care apar in practica testele flaky sunt variate si de foarte multe ori inevitabile. Desigur, ele pot fi destul de suparatoare pentru ca nu le intelegem pe deplin, sau pica exact cand nu ne asteptam si repararea lor nu e chiar foarte simpla.

Cum se pot preveni testele flaky in practica?

Pentru a nu avea prea multe batai de cap cu testele flaky, cea mai buna abordare este sa incercam sa le prevenim. Trebuie insa mentionate aici doua observatii de bun simt rezultate din experientele altora exprimate in spatiul online: nu exista o reteta universal valabila pentru a exclude aparitia testelor fragile, si oricat de mult ne-am stradui, intotdeauna vor aparea astfel de teste cu probleme.

Ca sfaturi generale, pentru a preveni aparitia testelor flaky este bine in primul rand sa fim atenti la logica in care construim testele automate, sa folosim metodele potrivite la locul potrivit, sa fim atenti la ce elemente folosim (variabile / constante declarate, locatori stabili cu un identificator clar etc.). Tot aici e recomandat sa folosim secvente de cod care sa fie adaptabile, sa nu hardcodam date in cod, ci sa parametrizam tot ce se poate pentru a fi mai usor de mentinut acele teste si de a refolosi metodele in alte locuri fara prea multe batai de cap.

Un alt element prin care putem preveni aparitia in practica a testelor flaky este sa avem grija la mediul (environment) unde rulam respectivele teste automate. De multe ori acesta reprezinta contextul care da nastere unor probleme de instabilitate la rularea testelor si de aceea e bine sa vedem cum putem corecta problemele legate de mediul tehnic.

De asemenea, ideal ar fi sa avem pe cat posibil cat mai putine teste automate care sa depinda ca rezultat unele de altele. Acest lucru poate duce la instabilitatea rezultatelor, iar compartimentarea testelor ca secvente de automatizare separate poate ajuta in destule situatii evitarea de flaky tests.

Exista si instrumente care ne pot ajuta sa depistam si sa analizam mai bine testele cu probleme de consistenta. Un astfel de tool dezvoltat sub egida Cypress este Cypress Cloud. Propriu-zis, Cypress Cloud este o extensie a framework-ului de automatizare Cypress care stocheaza rezultatele testelor automate rulate si ne permite sa le inspectam mai usor pe cele failed.

Pagina de documentatie pentru Cypress Cloud

Cypress Cloud prezint astfel mai multe functii prin care putem izola si trata separat testele flaky, care ne pun probleme. O functie extrem de utila care poate ajuta la analizarea testelor flaky este Test Replay, prin care se poate face mai usor debug la testele picate din anumite run-uri, ruland pas cu pas si identificand problemele de inconsistenta.

Concluzii

In incheiere, flaky tests sunt acele teste cu rezultate inconsistente, care in aceleasi conditii de rulare pot sa fie picate sau passed, reprezentand o consecinta negativa a mai multor factori, tehnici sau umani, legati de automatizare.

Ele apar in mod inevitabil in proiectele de acest fel, si important este sa incerca in a le intelege de ce se produc, chiar daca unele nu pot fi fixate in mod absolut, iar altele doar temporar.

Surse consultate

Despre ce sunt flaky tests in testarea automata, cauze si preventie gasesti informatii utile pe: BrowserStack, GitLab, JetBrains, Datadog.

Despre prevenirea testelor flaky, informatii 👉 aici si 👉 aici.

Documentatia despre Cypress Cloud si functiile sale care ne pot ajuta la flaky tests, inclusiv Test Replay.

Mircea-Gabriel Macarie

https://www.linkedin.com/in/mirceamacarie/

Tech enthusiast și QA engineer, membru al comunității Vlog De IT. Interesat de testare software (QA) în general, de User Experience și Web Development.

Related post

Leave a Reply

Your email address will not be published. Required fields are marked *