Wat is Cucumber Functiebestand en stapdefinitie? (Voorbeeld)
⚡ Slimme samenvatting
Cucumber Feature-bestanden beschrijven gedrag in Gherkin-code in gewone taal, terwijl stapdefinities de code bevatten die elke regel uitvoert. Cucumber Het project heeft beide nodig, opgeslagen in een vaste mapstructuur onder een map met functionaliteiten.
Elk Cucumber-project heeft een enkele map in de root met de naam "features". Hierin bevinden zich alle Cucumber-features. In deze map vind je ook submappen, namelijk step_definition en support.
Die indeling is belangrijk, omdat Cucumber Het systeem detecteert uw bestanden op basis van conventie in plaats van configuratie. Een feature-bestand dat zich buiten de features-directory bevindt, wordt simpelweg nooit gelezen.
Wat is “Featurebestand”?
Functiebestand bevat een beschrijving op hoog niveau van het Testscenario In eenvoudige bewoordingen. Het staat bekend als augurkjeGherkin is een eenvoudige teksttaal voor Engels.
Cucumber Een featurebestand bestaat uit de volgende onderdelen:
- Kenmerk: Een functie beschrijft het huidige testscript dat moet worden uitgevoerd.
- Scenario: Scenario beschrijft de stappen en de verwachte uitkomst voor een bepaald testgeval.
- Scenariooverzicht: Hetzelfde scenario kan worden uitgevoerd voor meerdere gegevenssets met behulp van scenariooverzicht. De gegevens worden geleverd door een tabelstructuur, gescheiden door (II).
- Gegeven: Het specificeert de context van de uit te voeren tekst. Door gebruik te maken van datatabellen “Gegeven” kan de stap ook worden geparametriseerd.
- .: "Wanneer" specificeert de testactie die moet worden uitgevoerd.
- Neem danDe verwachte uitkomst van de test kan worden weergegeven met "Dan".
Elk bestand bevat één functionaliteit. De scenario's daaronder zijn concrete voorbeelden die de functionaliteit illustreren, en elk scenario volgt hetzelfde ritme: beschrijf een beginsituatie, beschrijf een gebeurtenis, beschrijf het verwachte resultaat.
Vervolgens zullen we leren hoe u een Feature File schrijft Cucumber met voorbeeld.
Voorbeeld van een functiebestand:
Het oorspronkelijke voorbeeld dat bij deze handleiding is gepubliceerd, is hieronder exact zoals het geschreven is weergegeven.
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
⚠️ Correctie: In het bovenstaande voorbeeld wordt een dubbele punt geplaatst na Gegeven, . en Neem dan. Gherkin plaatst een dubbele punt na Kenmerk en Scenario Alleen. Een stap-trefwoord gevolgd door een dubbele punt wordt niet als een stap geïnterpreteerd, dus. Cucumber De regel wordt stilzwijgend genegeerd. Het gecorrigeerde bestand luidt als volgt.
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
Inspringen is niet vereist door de parser, maar twee spaties per niveau is de gebruikelijke stijl en maakt een lange feature veel gemakkelijker te scannen. De onderstaande animatie laat zien hoe een featurebestand wordt verwerkt en hoe elke stap groen kleurt.
Wat is “Stapdefinitie”?
Met de stapdefinitie worden de testcasestappen in de functiebestanden (geïntroduceerd door Gegeven/Wanneer/Dan) toegewezen aan code. Het voert de stappen van de Application Under Test uit en vergelijkt de resultaten met de verwachte resultaten. Om een stapdefinitie uit te voeren, moet deze overeenkomen met de gegeven component in een feature. De stapdefinitie wordt gedefinieerd in ruby-bestanden onder “features/step_definitions/*_steps.rb”.
De overeenkomst wordt uitsluitend op basis van de tekst van de stap gemaakt. Cucumber Het houdt geen rekening met het trefwoord bij het zoeken naar een definitie, waardoor twee stappen in dezelfde suite nooit identieke tekst kunnen bevatten, zelfs als de ene een 'Given' en de andere een 'Then' is.
Voorbeeld voor stapdefinitie: Hier zullen we hierboven gebruiken Cucumber Voorbeeld van een featurebestand voor het browsen op career.guru99.com. We gebruiken features zoals "When, Then, Given", zoals hieronder weergegeven. Cucumber Voorbeelden van functiebestanden.
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
⚠️ Een opmerking over talen: De bovenstaande definities zijn voor Ruby, en dat is waar Cucumber begonnen en daarom heet de map zo step_definitions en de bestanden eindigen op _steps.rbHetzelfde functiebestand stuurt stapdefinities aan die zijn geschreven in Java, Javascript, Python of C# zonder ook maar één wijziging aan de Gherkin. In Cucumber-JVM: de reguliere expressie wordt een annotatie op een methode.
@Given("I am on career.guru99.com") public void i_am_on_the_career_page() { driver.get("http://career.guru99.com"); }
Welke taal je ook kiest, de stapdefinitie is de enige plek waar implementatiedetails thuishoren. Keeping Selectoren en HTTP-aanroepen vanuit het feature-bestand maken het voor een niet-programmeur mogelijk om het scenario te lezen. eerste Cucumber script Door middel van een stapsgewijze handleiding wordt deze combinatie van begin tot eind opgebouwd.
Scenario-overzicht en voorbeelden in een functiebestand
Het driemaal kopiëren van een scenario om één waarde te wijzigen is de meest voorkomende oorzaak dat een feature-bestand onleesbaar wordt. Scenariooverzicht vervangt de kopieën door een sjabloon, en een Voorbeelden De tabel levert de waarden.
Parameters worden tussen punthaken geplaatst en moeten overeenkomen met een kolomkop in de tabel eronder. Cucumber Het vervangt de waarden voordat het zoekt naar een overeenkomende stapdefinitie, dus de definities zelf hoeven niet speciaal behandeld te worden.
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 |
Bij het gebruik van overzichten zijn er een paar belangrijke punten om te onthouden:
- De outline wordt één keer per gegevensrij uitgevoerd. De eerste rij is de koptekst en wordt nooit uitgevoerd.
- Een scenario-overzicht moet worden gevolgd door ten minste één sectie met voorbeelden, anders wordt er niets uitgevoerd.
- De tabelpijpen hoeven niet op één lijn te liggen, hoewel uitlijnen de leesbaarheid van het bestand wel ten goede komt.
- Houd de tabel klein. Een tabel met dertig rijen is meestal een teken dat de gegevens in een te grote tabel thuishoren. datagestuurde test gebruiken.
Achtergrond, En, Maar en de andere Gherkin-trefwoorden
Naast de zes eerder genoemde componenten heeft Gherkin een aantal trefwoorden die ervoor zorgen dat langere feature-bestanden leesbaar blijven.
- Achtergrond — een blok met gegeven stappen dat vóór elk scenario in de functionaliteit wordt uitgevoerd. Het voorkomt dat dezelfde voorwaarde bovenaan elk scenario opnieuw moet worden geschreven.
- En en Maar — vervangingen voor een herhaald Given, When of Then. Ze lezen beter en gedragen zich identiek; Cucumber De staptekst komt in beide gevallen overeen.
- Regel — een optionele groepping, toegevoegd in Gherkin 6, dat de scenario's verzamelt die één bedrijfsregel illustreren.
- Documentstrings — een tekstblok tussen drie dubbele aanhalingstekens, dat als één argument aan de stapdefinitie wordt doorgegeven wanneer één regel niet voldoende is.
- Gegevenstabellen — rijen, gescheiden door verticale strepen, gekoppeld aan één enkele stap, gebruikt om een lijst met waarden aan die stap door te geven.
- Tags — labels die beginnen met een apenstaartje, geplaatst boven een Feature of Scenario, zodat een subset tijdens de uitvoering kan worden geselecteerd.
- Heb je vragen? Stel ze hier. — een regel die begint met een hekje (#). Opmerkingen zijn alleen toegestaan aan het begin van een regel, en Gherkin kent geen blokcommentaren.
Een featurebestand met gedeelde configuratie ziet er in zijn geheel als volgt uit:
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
Veelvoorkomende fouten in featurebestanden en hoe je ze kunt corrigeren
De meeste Cucumber Problemen die door beginners worden gemeld, zijn geen fouten in het framework. Het zijn kleine overtredingen van de Gherkin-regels die onopgemerkt blijven.
| Foutje | Wat gebeurt | Bepalen |
|---|---|---|
| Dubbele punt na 'Gegeven', 'Wanneer' of 'Toen' | De regel wordt niet herkend als een stap en wordt overgeslagen. | Gebruik alleen een dubbele punt na Feature en Scenario. |
| Twee stappen met identieke tekst | Cucumber behandelt ze als duplicaten omdat het trefwoord wordt genegeerd | Herschrijf één stap zodat de twee anders klinken. |
| Functiebestand buiten de functiesmap | Het bestand wordt nooit gevonden en er worden geen tests uitgevoerd. | Bewaar alles .feature bestand in de map 'features' |
| Vijftien stappen in één scenario | Het scenario werkt niet meer als documentatie. | Streef naar drie tot vijf stappen en beschrijf elke stap tot in detail. |
| Vervolgens worden beweringen gedaan op een rij in de database. | De test slaagt, terwijl het voor de gebruiker zichtbare gedrag niet klopt. | Controleer de waarneembare uitvoer, zoals de pagina of het antwoord. |
| Scenariooverzicht zonder voorbeeldtabel | De sjabloon wordt nooit uitgevoerd. | Voeg direct onder de outline een sectie met voorbeelden toe. |
Het oplossen van deze problemen voordat de suite groeit, is veel goedkoper dan ze achteraf op te lossen, omdat elk scenario dat in de tussentijd wordt geschreven dezelfde structuur kopieert. Zodra de feature-bestanden naar behoren functioneren, is de volgende stap het koppelen van het project — zie de Cucumber rondleiding en de bredere automatisering testen series.

