Vad är Cucumber Funktionsfil och stegdefinition? (Exempel)

⚡ Smart sammanfattning

Cucumber funktionsfiler beskriver beteende i Gherkin i enkelt språk, medan stegdefinitioner innehåller koden som kör varje rad. Cucumber projektet behöver båda, lagrade i en fast mapplayout under en features-katalog.

  • 🔘 Två filer: En funktionsfil anger vad som ska hända; en stegdefinitionsfil anger hur automatiseringen får det att hända.
  • ☑️ Nyckelord för gurka: Funktion, Scenario, Givet, När och Sedan ger ett scenario dess struktur och dess läsbara form.
  • ✅ Inga kolon på stegen: Feature och Scenario får ta kolon, men Given, When och Then får inte, annars ignoreras steget.
  • 🧪 Dataset: Scenarioöversikt plus en exempeltabell spelar upp ett scenario mot många rader med indata.
  • 🛠️ Delad installation: Bakgrundslyft upprepade gånger Givna steg ur varje scenario i en funktion.
  • 📊 Matchning: Cucumber ignorerar nyckelordet vid matchning, så två steg kanske aldrig delar samma text.

Cucumber funktionsfil och stegdefinition förklarad med ett exempel

För varje cucumber-projekt finns det en enda katalog i rotkatalogen för projektet som heter "features". Det är här alla dina cucumber-funktioner kommer att finnas. I den här katalogen hittar du ytterligare kataloger, vilka är step_definition och support-katalogerna.

Den layouten spelar roll, eftersom Cucumber upptäcker dina filer enligt konvention snarare än genom konfiguration. En funktionsfil som finns utanför funktionskatalogen läses helt enkelt aldrig.

Vad är "Funktionsfil"?

Funktionsfilen innehåller beskrivningar på hög nivå av Testscenario enkelt uttryckt. Det är känt som GurkaGherkin är ett textspråk i vanlig engelska.

Cucumber Funktionsfilen består av följande komponenter —

  • Leverans: En funktion skulle beskriva det aktuella testskriptet som måste köras.
  • Scenario: Scenario beskriver stegen och det förväntade resultatet för ett visst testfall.
  • Scenario översikt: Samma scenario kan köras för flera uppsättningar data med hjälp av scenarioöversikt. Data tillhandahålls av en tabellstruktur separerad med (II).
  • Med tanke på: Den anger sammanhanget för texten som ska köras. Genom att använda datatabeller "Given" kan steg också parametreras.
  • När"När" anger vilken teståtgärd som måste utföras.
  • SedanDet förväntade resultatet av testet kan representeras av "Sedan".

En fil innehåller en funktion. Scenarierna nedanför är de konkreta exemplen som illustrerar funktionen, och varje scenario följer samma rytm: beskriv ett startsammanhang, beskriv en händelse, beskriv det förväntade resultatet.

Därefter kommer vi att lära oss hur man skriver Feature File in Cucumber med exempel.

Exempel på funktionsfil:

Det ursprungliga exemplet som publicerades med denna handledning återges nedan exakt som det var skrivet.

Feature: Visit career guide page in career.guru99.com
Scenario: Visit career.guru99.com
Given: I am on career.guru99.com
When: I click on career guide menu
Then: I should see career guide page

⚠️ Rättelse: exemplet ovan placerar ett kolon efter Med tanke på, När och SedanGurka sätter ett kolon efter Leverans och Scenario endast. Ett nyckelord step följt av ett kolon tolkas inte som ett steg, så Cucumber ignorerar raden i tysthet. Den korrigerade filen lyder som följer.

Feature: Visit career guide page in career.guru99.com

  Scenario: Visit career.guru99.com
    Given I am on career.guru99.com
    When I click on career guide menu
    Then I should see career guide page

Indrag krävs inte av parsern, men två mellanslag per nivå är den konventionella stilen och gör en lång funktion mycket enklare att skanna. Animationen nedan visar en funktionsfil som körs och varje steg blir grönt när det passerar.

Animering av en Cucumber funktionsfil som körs med varje Gherkin-steg rapporterat i tur och ordning

Vad är "Stegdefinition"?

Stegdefinition mappar testfallsstegen i funktionsfilerna (introducerade av Given/When/Then) till kod. Det som exekverar stegen på Application Under Test och kontrollerar resultaten mot förväntade resultat. För att en stegdefinition ska kunna exekveras måste den matcha den givna komponenten i en funktion. Stegdefinitionen definieras i rubyfiler under "features/step_definitions/*_steps.rb".

Matchningen görs enbart utifrån stegets text. Cucumber tar inte hänsyn till nyckelordet när den letar efter en definition, vilket är anledningen till att två steg i samma svit aldrig kan innehålla identisk text även om det ena är en Givet och det andra en Sedan.

Exempel för stegdefinition: Här kommer vi att använda ovan Cucumber Exempel på funktionsfil för att bläddra på career.guru99.com. Vi kommer att använda funktioner som "När, Sedan, Givet" som visas nedan. Cucumber Exempel på funktionsfiler.

Step 1:

Given (/^ I am on career.guru99.com$/) do

Browser.goto "http://career.guru99.com" -This will visit career.guru99 on browser

end

Step 2:
When (/^ click on career guide menu$/) do

Browser.text (:name, " career guide" ).click – This will click "career guide menu"

end

Step 3:

Then (/^ I should see career guide page$/) do

Browser.goto "http://career.guru99.com/category/career-guide/" - It will visit "career guide page"

end

⚠️ En anmärkning om språk: definitionerna ovan är Ruby, vilket är där Cucumber startade och det är därför mappen fått namnet step_definitions och filerna slutar på _steps.rbSamma funktionsfil driver stegdefinitioner skrivna i Java, JavaManus, Python eller C# utan en enda ändring av gurkan. I Cucumber-JVM flyttar det reguljära uttrycket till en annotering på en metod:

@Given("I am on career.guru99.com")
public void i_am_on_the_career_page() {
    driver.get("http://career.guru99.com");
}

Oavsett vilket språk du väljer är stegdefinitionen den enda platsen där implementeringsdetaljer hör hemma.ping selektorer och HTTP-anrop från funktionsfilen är det som låter en icke-programmerare läsa scenariot. först Cucumber skript Genomgången bygger denna parning från början till slut.

Scenarieöversikt och exempel i en funktionsfil

Att kopiera ett scenario tre gånger för att ändra ett värde är det vanligaste sättet att en funktionsfil blir oläslig. Scenario översikt ersätter kopiorna med en mall, och en Exempel tabellen anger värdena.

Parametrar skrivs inom vinkelparenteser och måste matcha en kolumnrubrik i tabellen under dem. Cucumber ersätter värdena innan den letar efter en matchande stegdefinition, så själva definitionerna behöver ingen särskild hantering.

Scenario Outline: Search the career guide
  Given I am on career.guru99.com
  When I search for "<keyword>"
  Then I should see the <section> section

  Examples:
    | keyword   | section       |
    | interview | Interview Tips|
    | resume    | Resume Guide  |

Några punkter är värda att komma ihåg när du använder dispositioner:

  • Dispositionen körs en gång per datarad. Den första raden är rubriken och körs aldrig.
  • En scenarioöversikt måste följas av minst ett exempelavsnitt, annars körs ingenting.
  • Tabellpiporna behöver inte vara i linje, men om de justeras blir filen läsbar.
  • Håll tabellen liten. En tabell med trettio rader är vanligtvis ett tecken på att informationen hör hemma i en datadrivet test istället.

Bakgrund, Och, Men och de andra gurka-nyckelorden

Utöver de sex komponenter som listats tidigare har Gherkin en handfull nyckelord som gör längre funktionsfiler läsbara.

  • Bakgrund — ett block med givna steg som körs före varje scenario i funktionen. Det tar bort upprepningen av att skriva samma förutsättning högst upp i varje scenario.
  • Och och Men — ersättningar för upprepade *Givet*, *When* eller *Then*. De läses bättre och beter sig identiskt; Cucumber matchar stegtexten åt vilket håll som helst.
  • Regel — en valfri gruppping, tillagd i Gherkin 6, som samlar scenarierna som illustrerar en affärsregel.
  • Dokumentsträngar — ett textblock inhägnat av tre dubbla citattecken, som skickas till stegdefinitionen som ett enda argument när en rad inte räcker.
  • Datatabeller — röravgränsade rader kopplade till ett enda steg, används för att överföra en lista med värden till det steget.
  • Taggar — etiketter som börjar med ett at-tecken, placerade ovanför en funktion eller ett scenario så att en delmängd kan väljas vid körning.
  • Kommentarer — en rad som börjar med en hash. Kommentarer är endast tillåtna i början av en rad, och Gherkin har ingen blockkommentar.

Sammantaget ser en funktionsfil med delad installation ut så här:

Feature: Career guide navigation

  Background:
    Given I am on career.guru99.com

  Scenario: Open the career guide menu
    Given I am signed in
    And my profile is complete
    When I click on career guide menu
    Then I should see career guide page
    But I should not see the admin panel

Vanliga misstag i funktionsfiler och hur man åtgärdar dem

bro Cucumber Problem som rapporteras av nybörjare är inte ramverksfel. De är små brott mot Gherkin-reglerna som misslyckas i tysthet.

Misstag Vad händer Fast
Kolon efter Givet, När eller Sedan Raden känns inte igen som ett steg och hoppas över Använd endast kolon efter Feature och Scenario
Två steg med identisk text Cucumber behandlar dem som dubbletter eftersom sökordet ignoreras Omformulera ett steg så att de två läses olika
Funktionsfil utanför funktionskatalogen Filen upptäcks aldrig och inga testkörningar görs Håll varje .feature filen under funktionsmappen
Femton steg i ett scenario Scenariot slutar fungera som dokumentation Sikta på tre till fem steg och lägg till detaljer i stegdefinitionen
Sedan görs anspråk på en databasrad Testet klarar det men det användarvänliga beteendet är trasigt Hävda på observerbar utdata såsom sidan eller svaret
Scenarieöversikt utan exempeltabell Mallen körs aldrig Lägg till ett exempelavsnitt direkt under dispositionen

Att fixa dessa innan sviten växer är mycket billigare än att fixa dem efteråt, eftersom varje scenario som skrivs under tiden kopierar samma form. När funktionsfilerna fungerar som de ska är nästa steg att koppla in projektet – se Cucumber genomgång och det bredare automatiseringstestning serien.

Vanliga frågor

Nej. En .feature-fil kan deklarera exakt en funktion, även om den kan innehålla så många scenarier som du vill. Om du behöver en andra funktion, skapa en andra fil – den begränsningen är det som gör att mappen är navigerbar allt eftersom en svit växer.

Det gör det inte. Gherkin är lokaliserat till fler än sjuttio talade språk. Genom att lägga till en språkrubrik på den första raden i filen byter man nyckelord, så att ett team kan skriva scenarier på samma språk som deras domänexperter faktiskt talar.

Den innehåller allt som inte är en stegdefinition: miljöinställningar, webbläsarkonfiguration, hookar som körs före eller efter ett scenario och delad hjälpkod. Keeping den separata hindrar stegdefinitionsfiler från att förvandlas till en dummfilping jord.

Cucumber rapporterar steget som odefinierat snarare än misslyckat och skriver ut ett föreslaget kodavsnitt som du kan klistra in i en stegdefinitionsfil. Scenariot markeras som inte godkänt, så ett odefinierat steg räknas aldrig tyst som en lyckad åtgärd.

En tagg placerad ovanför en funktion eller ett scenario låter löparen välja en delmängd vid körningstillfället, oberoende av mappstrukturen. Team taggar vanligtvis en "smoke set", en "slow set" och en "work-in-progress"-uppsättning, och kör sedan bara det som ett givet pipeline-steg behöver.

Stora språkmodeller utarbetar Ghurkin väl utifrån ett acceptanskriterium och genererar matchande definitionsskelett ännu snabbare. RevVisa utdata för duplicerad stegtext och för scenarier som läcker implementeringsdetaljer, vilket är där genererad Gherkin vanligtvis går fel.

Mycket. Givet en öppen funktionsfil härleder Copilot det reguljära uttrycket och metodsignaturen för ett odefinierat steg och fyller i brödtexten från omgivande kod. Behandla det som ett första utkast; de påståenden som föreslås behöver fortfarande en mänsklig kontroll.

Ja, och det är poängen med designen. Definitioner finns i en delad mapp och matchas av text, inte av fil, så ett inloggningssteg som skrivits en gång återanvänds av varje funktion som behöver det. Återanvändning är anledningen till att duplicerad stegtext är förbjuden.

Sammanfatta detta inlägg med: