Karate | Test Automation Made Simple

Mi s-a cerut code review si am dat de el. Este simpatic :smiley:

Asa arata un test

Features

Nu vrei sa stii cat de urat e sa te ocupi de Cucumber/Gherkin ca si programator.

Karate pare mai bun ca si JUnit cu Cucumber/Gherkin fiindca nu mai trebuie sa scrii codul pentru pasi separat de test. M-am luptat foarte mult cu code navigation-ul mizerabil la gherkin in IntelliJ.

La un proiect mic e posibil sa fie ok, dar cand ai 5 micro-proiecte intr-un monorepo cu aceeasi pasi (IDE-ul cauta dupa string) trebuie sa selectezi mereu la ce fisier vrei sa te duci. Asta daca le recunoaste.

In general fa orice poti sa nu folosesti Gherkin/Cucumber, iti faci de munca degeaba.

Partea buna in schimb, daca rulezi testele in CI/CD e ca pasul la care cade e mult mai usor de identificat si inteles. Problema e ca nu e sustenabil sa rulezi testele e2e in CI/CD, mai bine implementezi contract testing si unit teste care sa testeze functionalitate in loc de implementare.

Ok … poti sa detaliezi ?

In cazul Gherkin ai urmatorii termeni:
Given, When, Then, And, But

Ca termenii functioneze cu proprozitiile cucumber mai specifice tu o sa iti definesti un step definition file. In step definition o sa definesti string-ul care o sa defineasca ce sa faca acesti pasi. Aici scrii codul de automatizare, e.g. sa apese pe butonul cu rolul de ‘submit’ sau cu data-test-id-ul de ‘feature-x-modal-close’.
Deci prima data scrii testul cu pasii, dar dupa trebuie sa implementezi selectorii, in general vei avea o colectie de selectori/proiect. Daca ai putin noroc selectorii sunt direct exportati din front-end/aplicatie.
Daca te uiti atent in Karate ai doar pasi simpli, cum ai scrie ceva mai complicat vei apela la step definitions.

Cand ajungi sa ai 800-1500 de teste, o sa ai cateva sute de selectori custom.

Ce probleme apar:

  1. O sa ai selectori dublati (fac acelasi lucru doar ca sunt scrise diferit). (prin selectori ma refer si la step definition dublat)
  2. O sa ai selectori/pasi dublati intre mai multe proiecte daca ai monorepo, care pot sa faca ceva usor diferit, dar doar configuratia proiectului/IDE-ului decide din ce proiect vor fi luati step definitions. Pe VSCode nici n-am reusit sa le setez cand am avut mai multe proiecte, trebuia sa le rulez din terminal. Daca vrei sa rulezi un anumit test trebuie sa faci regex pe feature.
  3. IDE-ul nu are de unde stii ca tu ai selectori dublati, nu o sa te atentioneze sa folosesti 'When I click the form submit button" in loc de “When I submit the form”. Fiecare om o sa isi implementeze proprii pasi (step definitions) cum nu reuseste sa scrie un test cu cei existenti sau nu functioneaza. Mai rau, va incerca sa adapteze logica la un step definition facut pentru ceva simplu sa mearga in general si posibil introduce flakyness la teste deja scrise.
  4. QA posibil nu sunt programatori si tu va trebui sa implementezi pasii ceruti de ei oricum.
  5. Te simti ca te-ai intors cu 10 ani in timp, flow-ul meu a fost sa selectez un pas, shift shift, incercam sa imi dau seama in care proiect e de fapt step definition-ul la testul la care ma uit.
  6. Ca sa optimizezi step definition-urile oricum o sa iti faci helperi in framework-ul de automatizare (puppeteer/selenium/robot…), mai bine zis scrii o fateta pentru fiecare functie pe care o folosesti oricum, o sa ai 2-3 nivele de abstractie.
  7. Pasii care sunt cu variabile/tabele sunt greu de cautat, poti avea un pas care are in comun cuvinte cheie.
  8. Mult noroc la ChatGPT si automatizare de teste cu AI
  9. E greu de mock-uit, nu vezi ce mock data folosesti sau formatul e acel tabel ciudat, trebuie sa te duci in 2-3 fisiere pentru preconditie.

Care e alternativa:
Aceeasi colectie de step definitions le faci ca functii/clase normale pe care iti merge autocomplete. Pui ce ai scrie in gherkin in comentarii si dupa vezi ce iti genereaza Github Copilot. Utilizezi functii in acelasi mod cu AAA, in Kotlin de exemplu poti scrie numele functiilor la fel cum le-ai scrie in step definitions cu ``. BDD se poate face si fara Gherkin/Cucumber.