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.
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.
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.

