Caracteristici castravete: o prezentare generală
Publicat: 2022-04-20Introducere
Gherkin este un limbaj folosit încă în multe cadre de automatizare a testelor. Uneori pentru că clientul ne cere să-l folosim, alteori pentru că echipa decide să facă acest lucru.
Sincer să fiu, nu a fost dragoste la prima vedere pentru mine. Eu personal am o călătorie destul de lungă cu Gherkin – de la că-l place la început, până la detestarea limbii pentru o vreme, apoi ajungând să-mi placă din nou. În acest articol voi prezenta cele mai importante caracteristici ale Cucumber împreună cu implementarea Java.
Iată toate caracteristicile Castravetelui acoperite în acest articol:
Caracteristică | Descriere |
---|---|
Scenariu | Scenariu simplu |
Schița scenariului | Solicită utilizatorului să furnizeze date de testare în secțiunea „Exemple”. |
Tabele de date | Solicită utilizatorului să furnizeze date de testare pentru etapa de testare |
Contextul scenariului | Partajarea valorilor între pașii de testare |
Tipuri de date castraveți | Tipuri de date gestionate de castraveți |
Expresia regulată de castraveți | Utilizarea expresiei regulate în scenariile de castraveți |
Cârlige de castraveți | Execută cod suplimentar în scenariile de testare |
Fișier de caracteristici
În primul rând, ce este un fișier de caracteristici? În lumea tehnică a fost creată o abordare non-tehnică pentru a permite oamenilor non-tehnici să coopereze cu echipa în timpul dezvoltării unei aplicații. Limbajul Gherkin a fost creat ca un strat suplimentar în abordarea BDD. Testele Gherkin sunt localizate în așa-numitele fișiere de caracteristici care sunt lipite cu codul (Java, Kotlin, C# etc.). De obicei, Gherkin este foarte ușor de utilizat și necesită cunoștințe minime de programare, dar există caracteristici care necesită o anumită codare.
Să începem cu ceva ușor.
Scenariu
Iată cel mai simplu și mai ușor de utilizat exemplu al testului Castraveților:
Caracteristică: Scenariu Context: înainte de scenarii de testare Dat fiind că execut înainte de pas @Test Scenariu: Scenariu Dat fiind că folosesc pasul parametrizat al „Scenariului 1”
Blocul de cod 1. Scenariu
Blocul de cod 1. conține câteva lucruri care trebuie explicate:
- Caracteristică : titlul fișierului caracteristic
- Context : cuvântul cheie care permite utilizatorului să execute pași de testare înainte de fiecare scenariu de testare definit în fișierul de caracteristici
- @Test : Etichetă care spune cadrului de testare ce scenariu de testare trebuie executat. „Test” este definit de utilizator. Putem folosi de exemplu „@SmokeTest”
- Scenariu : Numele scenariului de testare
Testele Gherkin folosesc cuvinte cheie [Given, When, Then, But] înainte de fiecare pas de testare. În singurul nostru pas de testare, cu excepția pasului de fundal, folosim un parametru în care trecem valoarea „Scenariu 1”.
Acum, să vedem cum arată codul Java lipit:
@Given ("Execut înainte de pas") public void iExecuteBeforeStep() { //o oarecare implementare } @Given ("Folosesc pasul parametrizat al lui {șir}") public void iUseParametrizedStepOf(String p) { //o oarecare implementare }
Blocul de cod 2. Implementarea codului Java a scenariului
Schița scenariului
Să facem ceva mai complex:
Caracteristică: Contur scenariu @Test Schiță scenariu: Schiță scenariu Dat fiind că rulez pasul cu „<parameter1>” și „<parameter2>” Exemple: | parametrul 1 | parametrul2 | | parametrul1a | parametrul2a | | parametru1b | parametru2b |
Blocul de cod 3. Structura scenariului
De data aceasta vom folosi Scenario Outline care ne permite să repetăm scenariile de testare cu diferite configurații de date de testare. Blocul de cod 3. conține câteva lucruri de explicat:
- Exemple : matricea datelor de testare care va fi utilizată de scenariile de testare. Primul rând este un antet cu nume de parametri.
Și implementarea java:
@Given ("Eu rulez pasul cu {șir} și {șir}") public void iRunStepWithAnd(String p1, String p2) { //o oarecare implementare }
Blocul de cod 4. Implementarea Java a Scenario Outline
Tabel de date
Schița scenariului este foarte utilă, dar ce se întâmplă dacă nu vrem să repetăm întregul scenariu de testare, ci doar un singur pas de testare? Gherkin are o modalitate de a face asta și se numește „Tabel de date”.
Caracteristică: Tabel de date @Test Scenariu: Scenariul tabelului de date Dat fiind că verific că coloana conține valoarea așteptată | columnName | valoare așteptată | | someColumnName | someExpectedValue |
Blocul de cod 5. Tabel de date
Scenariul cu tabel de date nu diferă mult de Structura scenariului. Singurul lucru este că nu punem cuvântul cheie „Exemple” înaintea tabelului.
Implementarea Java pare puțin mai complexă decât în cazurile anterioare:
@Given(„Verific că coloana conține valoarea așteptată”) public void iVerifyColumnValuesInTableUsingQueryFromFileOnSchema(DataTable dataTable) { List<Map<String, String>> date = dataTable.asMaps(); pentru (Map<String, String> form: data) { String columnName = form.get("columnName"); String waitResult = form.get("expectedValue"); //o oarecare implementare } } }
Blocul de cod 6. Implementarea Java a tabelului de date

Pentru a accesa datele dintr-un tabel de date, creăm un dataTable variabil special de tip „DataTable”. Toate datele vor fi stocate în variabila Listă.
Contextul scenariului
Folosind contextul scenariului, putem partaja date între pași. Să presupunem că avem un scenariu în doi pași în care dorim să transmitem „date” valorice de la pasul 1 la pasul 2 (Blocul de cod 7).
@Test Scenariu: Contextul scenariului Având în vedere că am setat valoarea contextului scenariului „date” Dat fiind că folosesc valoarea contextului scenariului
Blocul de cod 7. Contextul scenariului
În primul rând, trebuie să construim o clasă specială numită ScenarioContext cu caracteristici de context de scenariu de setare și obținere de date (Code Block 8). Contextul scenariului nostru este un HashMap cu o pereche cheie-valoare. Vom identifica valorile după cheia sa.
- scenarioContext() : HashMap a perechii cheie-valoare
- setContext() : metodă cheie-valoare pentru a stoca datele contextului scenariului
- getContext() : metodă de a obține cheia de furnizare a datelor
clasă publică ScenarioContext { privat Map<String, Object> scenarioContext; scenariu publicContext(){ scenarioContext = new HashMap<>(); } public void setContext(Cheie de context, valoare obiect) { scenarioContext.put(key.toString(), valoare); } obiect public getContext(cheie de context){ return scenarioContext.get(key.toString()); } } enumerare publică Context { ID; }
Blocul de cod 8. Implementarea Java a clasei Scenario Context
Având acest lucru, putem folosi metodele implementate. În pasul 1 setăm apoi valoarea în contextul scenariului și în pasul 2 obținem valoarea (Code Block 9).
ScenarioContext scenarioContext = new ScenarioContext(); @Given ("Am setat valoarea contextului scenariului {șir}") public void iSetScenarioContextValue(Valoare șir) { scenarioContext.setContext(Context.ID, valoare); } @Given ("Folosesc valoarea contextului scenariului") public void iUseScenarioContextValue() { String sharedValue = scenarioContext.getContext(Context.ID).toString(); }
Blocul de cod 9. Etapele contextului scenariului
Tipuri de date castraveți
Castravetele gestionează un număr limitat de tipuri de date. Putem defini șiruri de caractere, numere întregi și valori flotante, dar în cazul valorilor booleene trebuie să codificăm câteva soluții.
@Test Scenariu: Scenariu cu variabile Dat fiind că folosesc șirul „șir”, int 1, float 1.1 și boolean „false”
Blocul de cod 10. Tipuri de date castraveți
Codul Java ar arăta cam așa:
@Given ("Folosesc șirul {șir}, int {int}, float {float} și boolean {șir}") public void iUseStringIntFloatAndBoolean(String var1, int var2, double var3, String var4) { boolean f = Boolean.valueOf(var4); //un cod }
Blocul de cod 11. Implementarea Java a Tipurilor de date Castravete
Expresia regulată de castraveți
Aceasta este o altă caracteristică folosită frecvent. Blocul de cod 12 prezintă un scenariu în doi pași care diferă doar prin utilizarea unor valori variabile diferite (var1 și var2). Acesta este de fapt doar un pas, iar în codul Java (Code Block 13) definim o singură metodă, dar cu regex și un parametru var.
@Test Scenariu: scenariu de expresie regulată Dat fiind că folosesc variabila var1 Dat fiind că folosesc variabila var2
Blocul de cod 12. Expresia regulată în castravete
@Given ("^Eu folosesc variabila (.*)") public void examTimeTableInSummerSeason(String var) { dacă (var.equals("var1")){ //un cod } else if(var.equals("var2")){ //un cod } }
Blocul de cod 13. Implementarea Java a expresiei regulate Cucumber
Cârlige de castraveți
Nu în ultimul rând: cârlige de castraveți.
Blocul de cod 14 prezintă cele mai importante 4 cârlige:
- @Before : execută codul înainte de fiecare scenariu de testare
- @After : execută cod după fiecare scenariu de testare
- @BeforeStep : execută cod înainte de fiecare pas de testare
- @AfterStep : execută cod după fiecare pas de testare
@Inainte de public void beforeScenario() { //un cod } @După public void afterScenario() { //un cod } @BeforeStep public void beforeStep() { //un cod } @AfterStep public void afterStep() { //un cod }
Cod Bloc 14. Cârlige de castraveți
rezumat
Sper că te-am convins să folosești Gherkin în teste. Aceste câteva caracteristici vor face testele dvs. mai lizibile și mai ușor de înțeles de către persoanele netehnice. De asemenea, pentru noii tamplari, va fi mai ușor să înțeleagă logica afacerii și să le reducă timpul de îmbarcare.