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

