Hvad er Cucumber Funktionsfil og trindefinition? (Eksempel)

โšก Smart opsummering

Cucumber Funktionsfiler beskriver adfรฆrd i et letforstรฅeligt Gherkin-sprog, mens trindefinitioner indeholder den kode, der kรธrer hver linje. Cucumber Projektet har brug for begge dele, gemt i et fast mappelayout under en features-mappe.

  • ๐Ÿ”˜ To filer: En funktionsfil angiver, hvad der skal ske; en trindefinitionsfil angiver, hvordan automatiseringen fรฅr det til at ske.
  • โ˜‘๏ธ Sylteagurk-nรธgleord: Funktion, Scenarie, Givet, Hvornรฅr og Sรฅ giver et scenarie dets struktur og dets lรฆsbare form.
  • โœ… Ingen kolon pรฅ trin: Funktion og Scenarie skal bruge et kolon, men Given, When og Then mรฅ ikke, ellers ignoreres trinnet.
  • ๐Ÿงช Datasรฆt: Scenarieoversigt plus en eksempeltabel afspiller รฉt scenarie mod mange rรฆkker input.
  • ๐Ÿ› ๏ธ Delt opsรฆtning: Baggrundslรธft gentages. Givne trin ud af hvert scenarie i en funktion.
  • ๐Ÿ“Š Matching: Cucumber ignorerer sรธgeordet ved matchning, sรฅ to trin deler muligvis aldrig den samme tekst.

Cucumber Funktionsfil og trindefinition forklaret med et eksempel

For hvert cucumber-projekt er der en enkelt mappe i roden af โ€‹โ€‹projektet med navnet "features". Det er her, alle dine cucumber-features vil vรฆre placeret. I denne mappe finder du yderligere mapper, som er step_definition og support-mapperne.

Det layout er vigtigt, fordi Cucumber opdager dine filer efter konvention snarere end efter konfiguration. En feature-fil, der ligger uden for features-mappen, bliver simpelthen aldrig lรฆst.

Hvad er "Funktionsfil"?

Funktionsfilen indeholder en beskrivelse pรฅ hรธjt niveau af Testscenarie i et enkelt sprog. Det er kendt som SylteagurkGherkin er et tekstsprog i almindeligt engelsk.

Cucumber Funktionsfilen bestรฅr af fรธlgende komponenter โ€”

  • Feature: En funktion vil beskrive det aktuelle testscript, som skal udfรธres.
  • Scenario: Scenario beskriver trinene og det forventede resultat for en bestemt testcase.
  • Scenarieoversigt: Samme scenarie kan udfรธres for flere sรฆt data ved hjรฆlp af scenarieoversigt. Dataene leveres af en tabelstruktur adskilt af (II).
  • I betragtning af: Det specificerer konteksten for den tekst, der skal udfรธres. Ved at bruge datatabeller "Given", kan trin ogsรฅ parametreres.
  • Nรฅr"Hvornรฅr" angiver den testhandling, der skal udfรธres.
  • DerefterDet forventede resultat af testen kan reprรฆsenteres ved "Sรฅ".

ร‰n fil indeholder รฉn funktion. Scenarierne nedenunder er de konkrete eksempler, der illustrerer funktionen, og hvert scenarie fรธlger den samme rytme: beskriv en startkontekst, beskriv en begivenhed, beskriv det forventede resultat.

Dernรฆst vil vi lรฆre, hvordan man skriver Feature File i Cucumber med eksempel.

Eksempel pรฅ funktionsfil:

Det originale eksempel, der er offentliggjort med denne vejledning, er gengivet nedenfor prรฆcis som skrevet.

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

โš ๏ธ Rettelse: I eksemplet ovenfor placeres et kolon efter I betragtning af, Nรฅr og DerefterSylteagurk sรฆtter et kolon efter Feature og Scenario kun. Et nรธgleord step efterfulgt af et kolon parser ikke som et step, sรฅ Cucumber ignorerer lydlรธst linjen. Den rettede fil lyder som fรธlger.

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

Indrykning er ikke pรฅkrรฆvet af parseren, men to mellemrum pr. niveau er den konventionelle stil og gรธr en lang funktion langt nemmere at scanne. Animationen nedenfor viser en funktionsfil, der kรธres, og hvert trin bliver grรธnt, nรฅr det passerer.

Animation af en Cucumber funktionsfil kรธrer med hvert Gherkin-trin rapporteret efter tur

Hvad er "trindefinition"?

Trindefinition kortlรฆgger testcase-trinene i feature-filerne (introduceret af Given/When/Then) til kode. Det, der udfรธrer trinene pรฅ Application Under Test og kontrollerer resultaterne mod forventede resultater. For at en trindefinition kan udfรธres, skal den matche den givne komponent i en funktion. Trindefinition er defineret i ruby-filer under "features/step_definitions/*_steps.rb".

Matchet laves alene ud fra trinnets tekst. Cucumber tager ikke nรธgleordet i betragtning, nรฅr den sรธger efter en definition, hvilket er grunden til, at to trin i den samme suite aldrig indeholder identisk tekst, selvom det ene er en Given og det andet en Then.

Eksempel pรฅ trindefinition: Her vil vi bruge ovenfor Cucumber Eksempel pรฅ funktionsfil med sรธgning pรฅ career.guru99.com. Vi bruger funktioner som "Nรฅr, Sรฅ, Givet" som vist nedenfor. Cucumber Eksempler pรฅ Feature File.

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 bemรฆrkning om sprog: Definitionerne ovenfor er Ruby, hvilket er hvor Cucumber startet, og det er derfor mappen er navngivet step_definitions og filerne ender pรฅ _steps.rbDen samme funktionsfil driver trindefinitioner skrevet i Java, Javamanuskript, Python eller C# uden en eneste รฆndring af Gherkin'en. I Cucumber-JVM flytter det regulรฆre udtryk sig ind i en annotation pรฅ en metode:

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

Uanset hvilket sprog du vรฆlger, er trindefinitionen det eneste sted, implementeringsdetaljer hรธrer hjemme.ping selektorer og HTTP-kald ud af feature-filen er det, der lader en ikke-programmรธr lรฆse scenariet. fรธrste Cucumber script Gennemgangen bygger denne parring fra start til slut.

Scenarieoversigt og eksempler i en funktionsfil

At kopiere et scenarie tre gange for at รฆndre รฉn vรฆrdi er den mest almindelige mรฅde, hvorpรฅ en funktionsfil bliver ulรฆselig. Scenarieoversigt erstatter kopierne med en skabelon, og en Eksempler Tabellen leverer vรฆrdierne.

Parametre er skrevet i vinkelparenteser og skal matche en kolonneoverskrift i tabellen nedenunder. Cucumber erstatter vรฆrdierne, fรธr den sรธger efter en matchende trindefinition, sรฅ selve definitionerne ikke krรฆver nogen sรฆrlig hรฅndtering.

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  |

Det er vรฆrd at huske pรฅ et par punkter, nรฅr du bruger dispositioner:

  • Dispositionen kรธrer รฉn gang pr. datarรฆkke. Den fรธrste rรฆkke er headeren og udfรธres aldrig.
  • En scenarieoversigt skal efterfรธlges af mindst รฉt โ€‹โ€‹eksempelafsnit, ellers kรธrer der intet.
  • Tabelrรธrene behรธver ikke at flugte, men justering af dem holder filen lรฆsbar.
  • Hold tabellen lille. En tabel med tredive rรฆkker er normalt et tegn pรฅ, at dataene hรธrer hjemme i en datadrevet test i stedet.

Baggrund, Og, Men og de andre sylteagurk-nรธgleord

Ud over de seks komponenter, der er nรฆvnt tidligere, har Gherkin en hรฅndfuld nรธgleord, der holder lรฆngere funktionsfiler lรฆsbare.

  • Baggrund โ€” en blok af givne trin, der kรธrer fรธr hvert scenarie i funktionen. Det fjerner gentagelsen af โ€‹โ€‹at skrive den samme forudsรฆtning รธverst i hvert scenarie.
  • og og Men โ€” erstatninger for en gentaget Givet, Hvornรฅr eller Sรฅ. De lรฆser bedre og opfรธrer sig identisk; Cucumber matcher trinteksten pรฅ begge mรฅder.
  • Herske โ€” en valgfri gruppeping, tilfรธjet i Gherkin 6, som samler scenarierne, der illustrerer รฉn forretningsregel.
  • Dokumentstrenge โ€” en tekstblok afgrรฆnset af tre dobbelte anfรธrselstegn, der sendes til trindefinitionen som et enkelt argument, nรฅr รฉn linje ikke er nok.
  • Datatabeller โ€” rรธrafgrรฆnsede rรฆkker knyttet til et enkelt trin, der bruges til at overfรธre en liste over vรฆrdier til det pรฅgรฆldende trin.
  • Tags โ€” etiketter, der starter med et at-tegn, placeret over en funktion eller et scenarie, sรฅ en delmรฆngde kan vรฆlges under kรธrsel.
  • Kommentarer โ€” en linje, der starter med en hash. Kommentarer er kun tilladt i starten af โ€‹โ€‹en linje, og Gherkin har ingen blokkommentar.

Samlet set ser en funktionsfil med delt opsรฆtning sรฅdan ud:

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

Almindelige fejl i funktionsfiler og hvordan man retter dem

bro Cucumber Problemer rapporteret af begyndere er ikke fejl i rammevรฆrket. De er smรฅ overtrรฆdelser af Gherkin-reglerne, der fejler stille og roligt.

Mistake Hvad sker Fix
Kolon efter Givet, Hvornรฅr eller Sรฅ Linjen genkendes ikke som et trin og springes over Brug kun et kolon efter Feature og Scenario
To trin med identisk tekst Cucumber behandler dem som dubletter, fordi sรธgeordet ignoreres Omformuler รฉt trin, sรฅ de to lรฆses forskelligt
Funktionsfil uden for funktionsmappen Filen bliver aldrig fundet, og der kรธres ingen test Hold alle .feature filen under funktionsmappen
Femten trin i รฉt scenarie Scenariet holder op med at fungere som dokumentation Sigt efter tre til fem trin og indprent detaljer i trindefinitionen
Udfรธrer derefter en assert pรฅ en databaserรฆkke Testen bestรฅr, mens den brugersynlige adfรฆrd er afbrudt Hรฆvd pรฅ observerbart output sรฅsom siden eller svaret
Scenarieoversigt uden eksempeltabel Skabelonen udfรธres aldrig Tilfรธj et afsnit med eksempler direkte under dispositionen

Det er langt billigere at rette disse, fรธr suiten vokser, end at rette dem bagefter, fordi hvert scenarie, der skrives i mellemtiden, kopierer den samme form. Nรฅr funktionsfilerne fungerer korrekt, er nรฆste trin at tilslutte projektet โ€“ se Cucumber installation gennemgang og den bredere automatiseringstest serien.

Ofte Stillede Spรธrgsmรฅl

Nej. En .feature-fil kan deklarere prรฆcis รฉn funktion, selvom den kan indeholde sรฅ mange scenarier, som du รธnsker. Hvis du har brug for en anden funktion, skal du oprette en anden fil โ€“ det er den begrรฆnsning, der holder mappen navigerbar, efterhรฅnden som en suite vokser.

Det gรธr det ikke. Gherkin er lokaliseret til mere end halvfjerds talte sprog. Tilfรธjelse af en sprogoverskrift pรฅ den fรธrste linje i filen รฆndrer nรธgleordene, sรฅ et team kan skrive scenarier pรฅ det samme sprog, som deres domรฆneeksperter rent faktisk taler.

Den indeholder alt, der ikke er en trindefinition: miljรธopsรฆtning, browserkonfiguration, hooks, der kรธrer fรธr eller efter et scenarie, og delt hjรฆlpekode. Keeping den separate forhindrer trindefinitionsfiler i at blive til en dumping jord.

Cucumber rapporterer trinnet som udefineret i stedet for mislykket og udskriver et foreslรฅet kodestykke, som du kan indsรฆtte i en trindefinitionsfil. Scenariet markeres som ikke bestรฅet, sรฅ et udefineret trin tรฆller aldrig stille og roligt som en succes.

Et tag placeret over en funktion eller et scenarie lader brugeren vรฆlge et delmรฆngde pรฅ udfรธrelsestidspunktet, uafhรฆngigt af mappestrukturen. Teams tagger typisk et smoke-sรฆt, et slow-sรฆt og et work-in-progress-sรฆt og kรธrer derefter kun det, som en given pipeline-fase har brug for.

Store sprogmodeller udarbejder Gherkin ud fra et acceptkriterium godt og genererer de matchende definitionsskeletter endnu hurtigere. RevSe outputtet for duplikeret trintekst og for scenarier, der lรฆkker implementeringsdetaljer, hvilket er hvor genereret Gherkin normalt gรฅr galt.

Meget. Givet en รฅben funktionsfil udleder Copilot det regulรฆre udtryk og metodesignaturen for et udefineret trin og udfylder brรธdteksten fra den omgivende kode. Betragt det som et fรธrste udkast; de foreslรฅede assertions krรฆver stadig en menneskelig kontrol.

Ja, og det er pointen med designet. Definitioner findes i en delt mappe og matches af tekst, ikke af fil, sรฅ et logintrin, der er skrevet รฉn gang, genbruges af alle funktioner, der har brug for det. Genbrug er grunden til, at duplikeret trintekst er forbudt.

Opsummer dette indlรฆg med: