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.

  • 🔘 Twee bestanden: Een featurebestand beschrijft wat er moet gebeuren; een step definition-bestand beschrijft hoe de automatisering dit realiseert.
  • ☑️ Gherkin-trefwoorden: De elementen Feature, Scenario, Given, When en Then geven een scenario structuur en een leesbare vorm.
  • ✅ Geen dubbele punten bij stappen: Feature en Scenario vereisen een dubbele punt, maar Given, When en Then niet, anders wordt de stap overgeslagen.
  • 🧪 Gegevenssets: Een scenariooverzicht plus een tabel met voorbeelden simuleert één scenario met meerdere rijen invoer.
  • ️ Gedeelde configuratie: Achtergrondvernieuwingen herhaalden zich. Gegeven stappen uit elk scenario in een functie.
  • 📊 Passen bij: Cucumber Het negeert het trefwoord bij het matchen, waardoor twee stappen nooit dezelfde tekst kunnen bevatten.

Cucumber Uitleg over feature-bestanden en stapdefinities aan de hand van een voorbeeld.

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.

Animatie van een Cucumber Het feature-bestand wordt uitgevoerd, waarbij elke Gherkin-stap achtereenvolgens wordt gerapporteerd.

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.

Veelgestelde vragen

Nee. Een .feature-bestand mag slechts één Feature declareren, hoewel het zoveel scenario's kan bevatten als u wilt. Als u een tweede Feature nodig hebt, maakt u een tweede bestand aan. Deze beperking zorgt ervoor dat de map overzichtelijk blijft naarmate een suite groeit.

Nee, dat klopt niet. Gherkin is beschikbaar in meer dan zeventig gesproken talen. Door een taalheader toe te voegen aan de eerste regel van het bestand, worden de trefwoorden aangepast, zodat een team scenario's kan schrijven in de taal die de domeinexperts daadwerkelijk spreken.

Het bevat alles wat geen stapdefinitie is: omgevingsinstellingen, browserconfiguratie, hooks die voor of na een scenario worden uitgevoerd, en gedeelde hulpcode. Keeping Het scheidt de stapdefinitiebestanden af, zodat ze niet in een dummy veranderen.ping grond.

Cucumber De stap wordt als ongedefinieerd gerapporteerd in plaats van mislukt, en er wordt een voorgesteld codefragment afgedrukt dat u in een stapdefinitiebestand kunt plakken. Het scenario wordt gemarkeerd als niet geslaagd, waardoor een ongedefinieerde stap nooit stilzwijgend als een succes wordt beschouwd.

Een tag boven een Feature of Scenario stelt de runner in staat om tijdens de uitvoering een subset te selecteren, onafhankelijk van de mapstructuur. Teams maken doorgaans tags aan voor een 'smoke set', een 'slow set' en een 'work-in-progress set', en voeren vervolgens alleen datgene uit wat een bepaalde pipelinefase nodig heeft.

Grote taalmodellen kunnen Gherkin-modellen op basis van een acceptatiecriterium goed ontwikkelen en genereren de bijbehorende definitieskeletten nog sneller. RevBekijk de uitvoer voor dubbele staptekst en voor scenario's die implementatiedetails lekken, want dat is waar gegenereerde Gherkin-code meestal de mist in gaat.

Zeker. Gegeven een open feature-bestand, leidt Copilot de reguliere expressie en de methodesignatuur af voor een ongedefinieerde stap en vult de rest van de code aan op basis van de omringende code. Beschouw dit als een eerste concept; de beweringen die het voorstelt, moeten nog handmatig worden gecontroleerd.

Ja, en dat is precies de bedoeling van het ontwerp. Definities staan ​​in een gedeelde map en worden gekoppeld op basis van tekst, niet op basis van bestand. Een inlogstap die eenmaal is geschreven, wordt dus hergebruikt door elke functie die deze nodig heeft. Hergebruik is de reden waarom dubbele tekst voor inlogstappen verboden is.

Vat dit bericht samen met: