bdd cucumber tutorial with examples
Denna djupgående gurkahandledning diskuterar BDD och dess fördelar, gurkramverk, miljöinställningar, skapande av testmanus, gurkafunktioner, rapporter osv .:
Gurka har blivit mycket populär och nu används den i stor utsträckning i mjukvarutestningsindustrin.
Förutsättningar - Avsedda mottagare bör ha kunskap om Scrum, Maven, TestNG, etc.
Vad du kommer att lära dig:
- Bakgrund av BDD
- Fördelar med beteendriven utveckling (BDD)
- BDD-verktyg
- Varför gurka?
- Hur fungerar gurka?
- Miljöinställningar
- Skriva testfall med gurka
- Skapa filer för gurka
- Gurka funktioner
- TestNG med gurka
- Slutsats
- Rekommenderad läsning
Bakgrund av BDD
I TDD Framework of Agile-metodiken skriver vi normalt testfallet och utför sedan dem. Detta är bra för att uppnå testtäckning och se till att byggnaden är redo för produktion.
Vi kan dock förbättra TDD-ramverket genom att introducera beteenden, funktioner etc. i testet och sedan utföra detsamma. Denna förbättring av TDD kallas BDD (Behavior Driven Development).
Fördelar med beteendriven utveckling (BDD)
Några fördelar med att använda BDD är:
# 1) Överbryggar klyftan mellan affärsintressenter och det tekniska teamet genom en gemensam plattform. Därför blir kommunikationen mellan laget mer transparent.
#två) Scenarier kan skrivas av alla inklusive personer från en klientsida, en medlem av affärsgruppen, ledningen etc. Därför täcks kraven, scenarierna.
# 3) Utvecklare kommer att skriva koden enligt scenarierna skrivna i BDD-ramverket istället för att skriva / utveckla koden enligt deras förståelse.
# 4) Testning blir skarpare, tid som spenderas på skapandet och efterföljande utförande av ett test sparas, kritiska defekter, särskilt de som kan påverka verksamheten, finns i själva fronten.
# 5) Kod, dokumentation relaterad till BDD är lätt att förstå och underhålla eftersom inga andra ansträngningar krävs för att underhålla koden eftersom dokumenten och dess motsvarande kod redan är relaterade. Därför kommer det som nämns i dokumentationen, dvs. scenarier, att ha sin motsvarande kod.
# 6) Eftersom vi har mycket lättförståeliga scenarier kan vi enkelt dela upp dem i uppgifter, underuppgifter etc. på ett logiskt sätt.
# 7) Teamet kan vara mer dynamiskt, smidigt eftersom det finns en klarhet i förväg om scenarier, acceptanskriterier och nästan noggrann testuppskattning.
# 8) Mycket bra plattform för en ny gick med att prata med det befintliga teamet både när det gäller dokumentation och koden på grund av dess enkelhet.
# 9) Hjälper inte bara med att validera scenarierna (mestadels UI, beteende-relaterade) utan det hjälper också i testfall på enhetsnivå.
# 10) Det är också användbart att spåra teamets framsteg från första dagen eftersom kraven och scenarierna är tydligt definierade (något som utvecklarna vanligtvis kämpar för att samla i TDD).
Därför tar implementeringen av BDD bort antagandet att 'slutklienten inte tänker på vikten av att testa', 'klienten vill inte engagera sig i testaktiviteterna', etc.
BDD-verktyg
Det finns flera testverktyg som gör det möjligt för oss att implementera BDD-metoden.
Till exempel:
- Gurka
- SpecFlow
- Juppför dig
- Sallad
- Concordion
- FitNesse
- BeanSpec
- Lätt B
- Jdave
- Givwenzen-flex
- GivWenZen
- Instinkt
- Tumbler-glas
- Gospecify
- Spektakulär
- dSpec
- Specifikationer
- Biff
- JSSpec
Bland de ovanstående verktygen fungerar Jbehave ganska likt gurka, men dessa är lite annorlunda när det gäller implementeringen.
JBEHAVE | GURKA |
---|---|
Stöder externa datakällor | Det stöder inte externa datakällor |
Stöder berättelser | Stöder funktioner |
Mycket bra dokumentation | Ingen standarddokumentation |
Stöder kompositsteg | Stöder inte sammansatta steg |
Inte så flexibel | Flexibel i passerande parametrar |
Stödjer inte bakgrund | Stöder bakgrund |
Inte så omfattande rapporter | Bättre formateringsflexibilitet, inbyggda rapporter |
Utvecklat med Java | Utvecklad med Ruby |
Varför gurka?
Gurka används för att skriva alla typer av testfall, särskilt testfall (om vilka slutanvändare är mer berörda) på acceptansnivå, skrivna i en beteendestyrd utvecklingsstil. Det stöder användningen av språkparsers som Gherkin.
Ursprungligen skrevs Gurka med Ruby-programmeringsspråk och utvecklades speciellt för Ruby-testning. Men nu stöds det av andra programmeringsspråk som Java.
Gurka används som språket på vilket testfallet är skrivet i ett enkelt format och kan också läsas och modifieras av en icke-teknisk användare.
Förutom engelska stöder Gurka även andra språk.
Hur fungerar gurka?
Först och främst låter vi användarna (tekniskt / icke-tekniskt) skriva sina önskade testfall (som funktioner) med Gherkin-syntax. När det är klart måste vi se till att de är godkända så att de kan gå till nästa nivå.
Därefter måste vi implementera dvs skriva skript för varje rad (med en stepdef-fil) som nämns i funktionsfilen. När koderna har implementerats skulle nästa sak vara att köra skript (med hjälp av en löpare-fil).
Miljöinställning
Miljöinställningen för Gurka är lite komplex jämfört med att arbeta med något annat verktyg som Eclipse eller någon annan IDE.
Utmaningar
Vi måste se till att versionerna av Gurka burkar matchar den installerade Java-versionen samt IDE där vi för närvarande arbetar.
Miljöinställningar
# 1) Eclipse Gurka-plugin : Det hjälper förmörkelsen att förstå Gherkin-syntaxen och belyser syntaxen för funktionsfilen istället för en vanlig text.
Vi måste gå till Förmörkelse >> Hjälp >> Installera ny programvara >> Klicka på knappen Lägg till >> Ange plats som detta . Namnet säger 'Gurka' och klicka sedan på OK och följ resten av installationsprocessen.
Starta äntligen om din IDE dvs Eclipse.
#två) Använd Maven för att ha alla burkar, dvs beroenden, plugins, etc som nämns nedan.
4.0.0 com cucumber.example 0.0.1-SNAPSHOT jar cucumber.example http://maven.apache.org UTF-8 org.seleniumhq.selenium selenium-java 3.6.0 org.seleniumhq.selenium selenium-chrome-driver 3.6.0 info.cukes cucumber-core 1.2.5 info.cukes cucumber-java 1.2.5 test info.cukes cucumber-junit 1.2.5 test junit junit 4.11 test info.cukes cucumber-testng 1.2.0 info.cukes gherkin 2.12.2 provided log4j log4j 1.2.17 org.apache.poi poi-ooxml 3.9 org.apache.poi poi 3.11-beta3 xml-apis xml-apis 2.0.2 xerces xercesImpl 2.8.0 info.cukes cucumber-jvm-deps 1.0.5 provided org.apache.maven.plugins maven-surefire-plugin 2.18 org.apache.maven.surefire surefire-junit47 2.18
# 3) Se till att om vi gör antingen Ctrl + s eller utför Maven-installation.
# 4) Efter det, se till att utföra Maven-byggnad för att undvika beroendefel så att vi inte har något beroendefel, plugin, versionsmatchfel senare.
konvertera youtube-video till wav-fil
# 5) När ovanstående steg är klara är vår miljö klar.
Skriva testfall med gurka
Gurka innehåller följande tre filer:
- Funktionsfil: Här skriver vi de funktioner som ska testas i Gherkin-format, dvs. givet när då. Vi kan till och med köra funktionsfilen för att köra testskripten skrivna i Stepdef-filen.
- Stepdef-fil: När funktionsfilen är klar kan varje mening i funktionsfilen implementeras ytterligare över Stepdef-filen.
- Runner File: Detta är bara för att exekvera det faktiska testskriptet skrivet över Stepdef-filen genom att hänvisa till funktionsfilen. Bortsett från det har den många andra alternativ för anpassning, rapportering, selektiv körning etc.
Här är ett enkelt exempel på en Runner File
package runner; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; @RunWith(Cucumber.class) @CucumberOptions( features='Features', glue='com.Multi', plugin={'html:target/cucumber-html-report', 'json:target/cucumber.json', 'pretty:target/cucumber-pretty.txt','usage:target/cucumber-usage.json', 'junit:target/cucumber- results.xml'}, dryRun = false, monochrome = true, tags={'@Smoke,@Regression'} ) public class Runner { }
Skapa filer för gurka
- Stepdef-fil - Src / test / java >> Nytt >> Övrigt >> Gurka >> StepDef-klass.
- Funktionsfil - Projekt >> Ny >> Fil >> ange namn för filen med tillägget ”.feature”.
- Runner-fil - Det liknar alla andra Java-klassskapande men vi kan behöva implementera någon metod här.
Gurka funktioner
Här är några av de grundläggande funktionerna i Gurka som vi kommer att implementera i vårt testskript.
# 1) Gurka krokar
Det här är kodblocken som körs före eller efter varje scenario. Så att vi kan definiera dessa, var som helst i vårt projekt. Till exempel, Stegdefinition.
Enligt definitionen är dessa bara två kommentarer @After och @Before. I konsolen kan vi se att blocken körs och ger tydliga resultat. Vi kan också utföra krokarna för specifika taggar.
# 2) Gurktaggar
Dessa används normalt över funktionsfilen för att klassificera scenarierna över funktionsfilerna enligt deras givna taggnamn. Vi kan ha flera taggar för ett visst scenario i funktionsfilen.
Taggar är användardefinierade och vi kan ge vilket namn som helst som @Smoke, @Regression, etc.
# 3) Gurkaanteckningar
Dessa är inbyggda till gurka. Normalt är taggar @Given, @When, @Then.
Men om vi behöver senare kan vi skapa vår egen kommentar och sedan använda den i vårt program. Under körning skrivs matchande limkod, dvs funktioner, i en Stepdef-fil med @Given, @When kommer @Then att köras.
# 4) Gurka bakgrund
Det här är steg eller serie steg som är gemensamma för alla scenarier i funktionsfilen.
Det låter oss lägga till lite sammanhang i scenarierna för en funktion där den är definierad. Den körs före varje scenario för en funktion där den är definierad.
# 5) Gurktabeller
Gurka har funktionen för att stödja datadriven testning, vilket gör att vi kan köra ett testfall automatiskt flera gånger med olika inmatnings- och valideringsvärden för ett givet skript.
Gurka stöder datatabellen. Den första raden betraktas som kolumnen och raderna bredvid den är data för skripten.
# 6) Transportera gurka
Detta är en liten modifiering av gurktabellen. Här skulle den första kolumnen betraktas som kolumn och nästa kolumner betraktas som data för skript.
# 7) Gurka Multi Scenarios
Gurka tillåter oss att testa flera scenarier under en funktionsfil.
# 8) Gurka Rapportering
Till skillnad från rapportering och andra verktyg från tredje part där vi behöver göra en viss konfiguration för att visa rapporteringen.
Här i Gurka har vi inbyggda plugins som pretty, JSON, HTML, XML som ger oss en omfattande rapport om testkörning.
TestNG med gurka
Vi kan fortfarande utföra JUnit-testfall skrivna i Gurka med TestNG genom att följa:
- Vi måste lägga till beroenden i Maven-projektet.
- Utöka klassen i Runner-klass som PackageTestNGCucumberTests-paketlöpare.
- Konvertera maven-projektet och lägg till paketet (där löparklassen finns).
Efter det kan vi köra hela gurktestfallet som TestNG och generera rapporter som rör samma (om vi har lyssnare).
I denna handledning kommer vi att diskutera 3 olika gurkaexempel för att täcka ovanstående begrepp
Exempel 1
Det kommer att täcka krokar, taggar, anteckningar, bakgrund, flera scenarier och TestNG med gurka.
När testmiljön är inställd:
- Lägg till Eclipse Cucumber plugin i Eclipse.
- Skapa ett Maven-projekt och lägg till alla nödvändiga beroenden till det och lägg också till TestNG-relaterat beroende i Maven.
- Skapa en ny funktionsfil.
- Lägg till den nödvändiga implementeringen för den i Stepdef-filen.
- Skapa nu en löparfil med utökade AbstractTestNGCucumberTests.
- Konvertera Maven-projektet till TestNG och lägg i testng.xml till paketvägen för gurklöparklassen.
- Kör filen TestNG.xml.
Funktionsfil
Funktion:
Som användare
Jag vill kunna lägga till nya klienter i systemet
Så att jag kan lägga till bokföringsdata för den klienten
Bakgrund:
Med tanke på att jag är på Githubs hemsida
När jag anger användarnamn som “xxxxxxxxxxxxxxxxxxxx” och lösenord som “xxx”
Och klicka på Logga in-knappen
@Rök
Scenario: Redigera profilen
Med tanke på att jag klickar på Ditt profilalternativ
När jag klickar på knappen redigera profil
Och uppladdad ny bild
Då borde jag se en ny profilbild
@Regression @Everytime
Scenario: Skapa ny kärnan
Med tanke på att jag klickar på Your Gists-alternativet
När jag anger filnamn, beskrivning
Och klicka på Skapa allmän kärnmetod
Då borde jag se den nya kärnan
Stepdef-fil
package com.Multi; import cucumber.api.PendingException; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.api.java.After; import cucumber.api.java.Before; import cucumber.api.java.en.But; import java.util.List; import cucumber.api.PendingException; import cucumber.api.java.it.Data; import cucumber.runtime.ScenarioImpl; import gherkin.formatter.model.Scenario; import gherkin.formatter.model.ScenarioOutline; import cucumber.api.DataTable; import org.junit.Assert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import cucumber.api.cli.Main; public class Step2 { static public String sb; static public String sa; static WebDriver driver = null; @Before('@Smoke,@Regression') public void beforeScenario(){ System.out.println('New scenario begins'); } @After('@Smoke,@Regression') public void afterScenario(){ System.out.println('Scenario ends'); } @MyAnnotation public static void myanno() { System.out.println('my annot gets executed'); } @Given('^I am on Github home page$') public void i_am_on_Github_home_page(){ String site = 'https://www.github.com/login'; System.setProperty('webdriver.chrome.driver', 'Executables\chromedriver.exe'); driver = new ChromeDriver(); driver.navigate().to(site); //driver.findElement(By.cssSelector('a(contains(@href, 'login'))').click(); // Write code here that turns the phrase above into concrete actions } @When('^I specify Username as '((^')*)' and Password as '((^')*)'$') public void i_specify_Username_as_and_Password_as(String arg1, String arg2){ driver.findElement(By.cssSelector('input#login_field')).sendKeys(arg1); driver.findElement(By.cssSelector('input#password')).sendKeys(arg2); // Write code here that turns the phrase above into concrete actions } @When('^Click on SignIn button$') public void click_on_SignIn_button(){ driver.findElement(By.cssSelector('input.btn')).click(); // Write code here that turns the phrase above into concrete actions } @Given('^I click on Your Profile option$') public void i_click_on_Your_Profile_option(){ driver.findElement(By.xpath('//*(@id='user -links')/li(3)/details/summary/img')).click(); List olist = driver.findElements(By.xpath('//*(@id= 'user-links')/li(3)/details/ul/li/a(@class='dropdown-item')')); for(WebElement o:olist) { if(o.getText().equals('Your profile')) { o.click(); break; } } // Write code here that turns the phrase above into concrete actions } @When('^I click on edit profile button$') public void i_click_on_edit_profile_button(){ driver.findElement(By.xpath('//*(@id='js-pjax -container')/div/div(2)/div(1)/a')).click(); // Write code here that turns the phrase above into concrete actions } @When('^Uploaded new picture$') public void uploaded_new_picture() throws InterruptedException{ WebElement s1 = driver.findElement(By.xpath('//*(@class='avatar-upload -container clearfix')/Img')); sb=s1.getAttribute('src'); System.out.println(s1.getAttribute('src')); driver.findElement(By.id('upload-profile -picture')).sendKeys('D://cucumberFinal//multiple//Files//images.jpg'); Thread.sleep(10000); String wh = driver.getWindowHandle(); driver.switchTo().window(wh); Actions actions = new Actions(driver); WebElement element = driver.findElement(By.xpath('//div(@class='facebox -content')/form/div(3)/button')); Thread.sleep(10000); actions.moveToElement(element); //Thread.sleep(10000); actions.click(); //actions.sendKeys('GIST1 Description'); actions.build().perform(); // driver.findElement(By.xpath('//div(@class='facebox -content')/form/div(3)/button')).click(); Thread.sleep(3000); // Write code here that turns the phrase above into concrete actions } @Then('^I should be seeing new profile picture$') public void i_should_be_seeing_new_profile_picture(){ WebElement s1 = driver.findElement(By.xpath('//*(@class='avatar-upload -container clearfix')/Img')); sb=s1.getAttribute('src'); System.out.println(s1.getAttribute('src')); if(!(sb.equals(sa))) { Assert.assertTrue('File Upload successful', true); } // Write code here that turns the phrase above into concrete actions } @Given('^I click on Your Gists option$') public void i_click_on_Your_Gists_option(){ driver.findElement(By.xpath('//*(@id='user-links')/li(3)/details/summary/img')).click(); List olist = driver.findElements(By.xpath('//*(@id= 'user-links')/li(3)/details/ul/li/a(@class='dropdown-item')')); for(WebElement o:olist) { if(o.getText().equals('Your Gists')) { o.click(); break; } } // Write code here that turns the phrase above into concrete actions } @When('^I provide filename, description$') public void i_provide_filename_description() throws InterruptedException { // Write code here that turns the phrase above into concrete actions driver.findElement(By.xpath('//div(@class='edit container')/div(@id='gists')/input')).sendKeys('Gist1'); Thread.sleep(2000); Actions actions = new Actions(driver); WebElement element = driver.findElement(By.xpath('//*(@id='gists')/div(2)/div/div(2)/div/div(5)/div(1)/ div/div/div/div(5)/div/pre/span')); actions.moveToElement(element); actions.click(); actions.sendKeys('GIST1 Description'); actions.build().perform(); // driver.findElement(By.xpath('//*(@id='gists')/div(2)/div/div(2)/div/div(5)/div(1)/ div/div/div/div(5)/div/pre/span')).sendKeys('GIST1 Description'); Thread.sleep(2000); } @When('^click on Create public gist method$') public void click_on_Create_public_gist_method() { driver.findElement(By.xpath('//*(@id='new_gist')/div(2)/div(2)/button(1)')).click(); // Write code here that turns the phrase above into concrete actions } @Then('^i should be seeing the new gist$') public void i_should_be_seeing_the_new_gist(){ List glist = driver.findElements(By.xpath('//div(@class='container repohead-details- container')/ul(1)/li(@class='flex-auto')/div/a')); for(WebElement o:glist) { if(o.getText().equals('Gist1')) { System.out.println('Gist created successfully'); } } // Write code here that turns the phrase above into concrete actions } }
Här är testresultatet för TestNG XML
Standard TestNG-rapporten ser ut som den som ges nedan.
Exempel 2
Det kommer att täcka datatabeller och transponera.
När miljön är inställd:
- Lägg till Eclipse Cucumber plugin i Eclipse.
- Skapa ett Maven-projekt och lägg till alla nödvändiga beroenden till det.
- Skapa en ny funktionsfil.
- Lägg till den nödvändiga implementeringen för den i stepdef-filen.
- Kör direkt från funktionsfilen genom att högerklicka på filen >> Kör som >> Gurka. Funktion
Funktionsfil
Funktion: Titel på din funktion
Jag vill använda den här mallen för min funktionsfil
Bakgrund:
Med tanke på att jag är på Gmail-inloggningssidan
När jag anger användarnamn och lösenord
Och klicka på Logga in-knappen
Scenario: Skapa nytt meddelande från datatabellen
När jag är på ny e-postsida
Och jag specificerar följande detaljer
| To1 | Ämne |
| Person1@email.com | Person1 ämne |
| Person2@email.com | Person2 ämne |
Scenario: Skapa nytt meddelande från den transponerade datatabellen
När jag är på ny e-postsida
Och jag specificerar följande detaljer från transponera tabellen
| To1 | Person1@email.com | Person2@email.com |
| Ämne | Person1 ämne | Person2 ämne |
Stepdef-fil
package com.datatable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.time.*; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; import cucumber.api.DataTable; import cucumber.api.Transpose; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import gherkin.formatter.model.Examples; import cucumber.runtime.CucumberException; import cucumber.runtime.ParameterInfo; import cucumber.runtime.xstream.LocalizedXStreams; public class Step3 { static public WebDriver driver; @Given('^I am on Gmail login page$') public void i_am_on_Gmail_login_page() throws InterruptedException{ System.setProperty('webdriver.chrome.driver', 'Executables/chromedriver.exe'); driver= new ChromeDriver(); Actions act = new Actions(driver); driver.manage().window().maximize(); driver.navigate().to('https://www.google.com/gmail/about'); driver.findElement(By.xpath('//nav/div/a(2)')).click(); Thread.sleep(3000); } @When('^I specify Username and Password$') public void i_specify_Username_and_Password() throws InterruptedException{ driver.findElement(By.xpath('//input(@type='email')')).sendKeys('xxxxxx@xxx. com'); driver.findElement(By.xpath('//*(@id='identifierNext')/content/span')).click(); Thread.sleep(3000); driver.findElement(By.xpath('//input(@type='password')')).sendKeys('xxxxxxxx xxx'); } @When('^Click on SignIn button$') public void click_on_SignIn_button() throws InterruptedException{ driver.findElement(By.xpath('//*(@id='passwordNext')/content/span')).click(); Thread.sleep(5000); } @When('^I am on New Email Page$') public void i_am_on_New_Email_Page(){ } @When('^I specify following details$') public void i_specify_following_details(DataTable tables)throws Throwable{ for (Map row : tables.asMaps(String.class, String.class)) { driver.findElement(By.xpath('//*(@id=':x4')/div/div')).click(); //driver.switchTo(). System.out.println(row.get('To1')); System.out.println(row.get('Subject')); String whandle = driver.getWindowHandle(); driver.switchTo().window(whandle); driver.findElement(By.xpath('//td(@class='eV')/div(1)/div/textarea')).sendKeys (row.get('To1')); driver.findElement(By.xpath('//table(@class='aoP aoC bvf')/tbody/tr/td/form/div(3)/input')).sendKeys(row.get('Subject')); driver.findElement(By.xpath('//table(@class='IZ')/tbody/tr/td/div')).click(); Thread.sleep(3000); } } @When('^I specify following details from transpose table$') public void i_specify_following_details_from_transpose_table(DataTable tables) throws InterruptedException { // DataTable tables = null; for (Map row : tables.transpose().asMaps(String.class, String.class)) { driver.findElement(By.xpath('//*(@id=':x4')/div/div')).click(); //driver.switchTo(). Thread.sleep(2000); System.out.println(row.get('To1')); System.out.println(row.get('Subject')); String whandle = driver.getWindowHandle(); driver.switchTo().window(whandle); driver.findElement(By.xpath('//td(@class='eV')/div(1)/div/textarea')).sendKeys (row.get('To1')); Thread.sleep(3000); driver.findElement(By.xpath('//table(@class='aoP aoC bvf')/tbody/tr/td/form/div(3)/input')).click(); driver.findElement(By.xpath('//table(@class='aoP aoC bvf')/tbody/tr/td/form/div(3)/input')).sendKeys(row.get('Subject')); Thread.sleep(3000); driver.findElement(By.xpath('//table(@class='IZ')/tbody/tr/td/div')).click(); Thread.sleep(3000); } } @When('^then click on Send button$') public void then_click_on_Send_button(){ // Write code here that turns the phrase above into concrete actions } @Then('^I should be able to send the email successfully$') public void i_should_be_able_to_send_the_email_successfully() { // Write code here that turns the phrase above into concrete actions }
Produktion : Så ovanstående exempel ska logga in på Gmail och skicka två e-postmeddelanden för varje scenario som gäller för tabellen Data och Transponerad data.
Exempel 3
Det kommer att omfatta rapportering.
När miljön är inställd:
- Lägg till Eclipse Cucumber plugin i Eclipse.
- Skapa ett Maven-projekt och lägg till alla beroenden som krävs.
- Skapa en ny funktionsfil.
- Lägg till den nödvändiga implementeringen för den i Stepdef-filen.
- Skapa en löparklass och kör löparklassen.
- Visa alla typer av rapporter.
Funktionsfil
Funktion: Titel på din funktion
Jag vill använda den här mallen för min funktionsfil
@ tag1
Scenario: Titel på ditt scenario
Med tanke på att jag är på Githubs hemsida
När jag anger användarnamn och lösenord
Och klicka på Logga in-knappen
Då skulle jag kunna se utloggningsalternativet
Stepdef-fil
package com.cucumber; import cucumber.api.PendingException; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.api.java.en.But; import java.util.List; import cucumber.api.PendingException; import cucumber.api.java.it.Data; import cucumber.api.DataTable; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import cucumber.api.cli.Main; public class Step1 { static WebDriver driver = null; @Given('^I am on Github home page$') public void i_am_on_Github_home_page(){ String site = 'https://www.github.com/login'; System.setProperty('webdriver.chrome.driver', 'Executables\chromedriver.exe'); driver = new ChromeDriver(); driver.navigate().to(site); //driver.findElement(By.cssSelector('a(contains(@href, 'login'))').click(); // Write code here that turns the phrase above into concrete actions } @When('^I specify Username and Password$') public void i_specify_Username_and_Password() { driver.findElement(By.cssSelector('input#login_field')).sendKeys('chintamoni .patra@gmail.com'); driver.findElement(By.cssSelector('input#password')).sendKeys('Test@123'); // Write code here that turns the phrase above into concrete actions } @When('^Click on SignIn button$') public void click_on_SignIn_button(){ driver.findElement(By.cssSelector('input.btn')).click(); // Write code here that turns the phrase above into concrete actions } @Then('^I should be able to see logout option$') public void I_should_be_able_to_see_logout_option() throws InterruptedException{ driver.findElement(By.xpath('//*(@id='user -links')/li(3)/details/summary/img')).click(); WebElement opt = driver.findElement(By.xpath('//*(@id='user- links')/li(3)/details/ul/li')); List olist = opt.findElements(By.xpath('//li/form/button')); for(WebElement o : olist) { System.out.println(o); } //int a = olist.size(); System.out.println(olist.get(0).getText()); olist.get(0).click(); Thread.sleep(2000); // Write code here that turns the phrase above into concrete actions } }
Här är de olika typerna av rapporter som genereras av Gurka:
HTML-rapport
Söt
Junit
Slutsats
Som ett open source-verktyg används gurka i stor utsträckning i BDD. Och det är väldigt lätt att förstå och det har mycket utrymme med avseende på nya funktioner och det är praktiskt taget möjligt att integrera gurka med selen eller andra verktyg / burkar från tredje part etc.
Eftersom den har aktiva hjälpgrupper / medlemmar blir det verkligen lätt för alla som just har börjat lära sig gurka eller för dem som har kunskaper i gurka / BDD.
Gurka stöder vidare integration med Excel-ark och Jenkins också.
Rekommenderad läsning
- Gurka Selen Tutorial: Gurka Java Selen WebDriver Integration
- Python DateTime-handledning med exempel
- REST API-testning med gurka med BDD-metod
- Automatiseringstestning med gurkaverktyg och selen - Selenhandledning # 30
- Gurka Gherkin Tutorial: Automationstestning med Gherkin
- Unix Shell Scripting Tutorial med exempel
- Selen Find Element by Text Tutorial med exempel
- Java 'detta' Nyckelord: Handledning med kodexempel