bdd cucumber tutorial with examples
Ovaj detaljni vodič za krastavce raspravlja o BDD-u i njegovim prednostima, okvir krastavca, postavke okoliša, izrada test skripte, značajke krastavca, izvješća itd.:
Krastavac je postao vrlo popularan i sada se široko koristi u industriji za testiranje softvera.
Preduvjeti - Planirani primatelji trebaju imati znanje o Scrum-u, Mavenu, TestNG-u itd.
Što ćete naučiti:
- Pozadina BDD-a
- Prednosti razvoja vođenog ponašanjem (BDD)
- BDD alati
- Zašto krastavac?
- Kako djeluje krastavac?
- Postavke okoliša
- Pisanje test slučajeva pomoću krastavaca
- Stvaranje datoteka za krastavac
- Značajke krastavaca
- TestNG s krastavcem
- Zaključak
- Preporučena literatura
Pozadina BDD-a
U TDD Framework of Agile metodologiji obično prvo napišemo ispitne slučajeve, a zatim ih izvršavamo. Ovo je dobro postići Test Coverage i osigurati da je gradnja spremna za proizvodnju.
Međutim, TDD okvir možemo poboljšati uvođenjem ponašanja, značajki itd. U test, a zatim izvršiti isti. Ovo poboljšanje TDD-a naziva se BDD (Behaviour Driven Development).
Prednosti razvoja vođenog ponašanjem (BDD)
Neke prednosti upotrebe BDD-a su:
# 1) Premošćuje jaz između poslovnih dionika i tehničkog tima kroz zajedničku platformu. Stoga komunikacija među timom postaje transparentnija.
#dva) Scenarije može napisati bilo tko, uključujući ljude s klijentske strane, člana poslovnog tima, uprave itd. Stoga se zahtjevi i scenariji pokrivaju.
# 3) Programeri će napisati kod koji odgovara scenarijima napisanim u BDD okviru, umjesto da pišu / razvijaju kod prema njihovom razumijevanju.
# 4) Testiranje postaje oštrije, štedi se vrijeme provedeno u stvaranju i naknadnom izvršavanju testa, a kritični nedostaci, posebno oni koji mogu utjecati na poslovanje, mogu se naći na samom prednjem dijelu.
# 5) Kodeks, dokumentacija koja se odnosi na BDD lako je razumljiva i održiva jer nisu potrebni nikakvi napori da bi se kôd održavao jer su dokumenti i pripadajući kod već povezani. Stoga će ono što se spominje u dokumentaciji, tj. Scenariji, imati odgovarajući kôd.
# 6) Budući da imamo vrlo lako razumljive scenarije, lako ih možemo logički podijeliti na zadatke, pod-zadatke itd.
# 7) Tim može biti dinamičniji, spretniji jer postoji jasna predodžba o scenarijima, kriterijima prihvaćanja i gotovo točnoj procjeni testa.
# 8) Vrlo dobra platforma za New Joined kako bi se dotjerao sa postojećim timom i u pogledu dokumentacije i koda zbog svoje jednostavnosti.
# 9) Ne samo da pomaže u provjeri valjanosti scenarija (uglavnom korisničkog sučelja, vezano uz ponašanje), već pomaže i u testnim slučajevima na razini jedinice.
# 10) Također, korisno je pratiti napredak tima od prvog dana jer su zahtjevi i scenariji jasno definirani [nešto što se programeri obično trude prikupiti u TDD-u].
Stoga primjena BDD uklanja pretpostavku da „krajnji klijent ne razmišlja o važnosti testiranja“, „klijent se ne želi uključiti u aktivnosti testiranja“ itd.
BDD alati
Postoji nekoliko alata za testiranje koji nam omogućuju provođenje BDD pristupa.
Kao što su:
- Krastavac
- SpecFlow
- Jbehave
- Zelena salata
- Concordion
- FitNesse
- BeanSpec
- Jednostavno B
- Jdave
- Givwenzen-flex
- GivWenZen
- Instinkt
- Tumbler-staklo
- Gospecificiraj
- Spektakularan
- dSpec
- Naočale
- Odrezak
- JSSpec
Među navedenim alatima Jbehave djeluje prilično slično krastavcu, međutim, oni se malo razlikuju u smislu njihove primjene.
JBEHAVE | KRASTAVAC |
---|---|
Podržava vanjske izvore podataka | Ne podržava vanjske izvore podataka |
Podržava priče | Podržava značajke |
Vrlo dobra dokumentacija | Nema standardne dokumentacije |
Podržava kompozitne korake | Ne podržava složene korake |
Nije tako fleksibilan | Fleksibilni prolazni parametri |
Ne podržava pozadinu | Podržava pozadinu |
Ne tako opsežna izvješća | Bolja fleksibilnost oblikovanja, ugrađena izvješća |
Razvijeno pomoću Jave | Razvijeno pomoću Rubyja |
Zašto krastavac?
Krastavac se koristi za pisanje svih vrsta testnih slučajeva, posebno testnih slučajeva na razini prihvaćanja (oko kojih su krajnji korisnici više zabrinuti) napisanih u stilu bihevioralnog razvoja. Podržava upotrebu jezičnih parsera kao što je Gherkin.
Izvorno je Cucumber napisan pomoću programskog jezika Ruby i razvijen je posebno za testiranje Rubyja. Ali sada je podržavaju i drugi programski jezici kao što je Java.
Kornišon se koristi kao jezik na kojem su test slučajevi napisani u jednostavnom formatu, a netehnički korisnik također ih može čitati i mijenjati.
Osim engleskog, Krastavac podržava i druge jezike.
Kako djeluje krastavac?
Dolaskom u njegov radni mehanizam, prvo dopuštamo korisnicima (tehničkim / netehničkim) da napišu svoje željene testove (kao značajke) koristeći Gherkin sintaksu, nakon što je gotovo, moramo biti sigurni da su odobreni kako bi mogli ići na sljedeću razinu.
Nakon toga trebamo implementirati tj. Napisati skripte za svaki redak (koristeći stepdef datoteku) kako je spomenuto u datoteci značajki. Jednom kada se kodovi implementiraju, sljedeća bi stvar bila pokretanje skripti (pomoću datoteke pokretača).
Postavljanje okoliša
Postavljanje okoliša za krastavac malo je složeno u usporedbi s radom s bilo kojim drugim alatom poput Eclipsea ili bilo kojeg drugog IDE-a.
Izazovi
Moramo biti sigurni da se verzije Cucumber teglica podudaraju s instaliranom Java verzijom, kao i IDE u kojem trenutno radimo.
Postavke okoliša
# 1) Dodatak za krastavce Eclipse : Eclipseu pomaže da razumije sintaksu Gherkin-a i ističe sintaksu datoteke značajki umjesto običnog teksta.
Moramo ići u Eclipse >> Pomoć >> Instaliranje novog softvera >> Kliknite gumb Dodaj >> Odredite mjesto kao ovaj . Ime kaže 'Krastavac', a zatim kliknite U redu i slijedite postupak instalacije ostatka.
Napokon ponovo pokrenite svoj IDE, tj. Eclipse.
#dva) Koristite Maven da biste imali sve staklenke, tj. Ovisnosti, dodatke itd. Kao što je spomenuto u nastavku.
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) Obavezno radimo ili Ctrl + s ili izvodimo Maven instalaciju.
# 4) Nakon toga obavezno izvedite Maven build kako biste izbjegli bilo kakvu pogrešku povezanu s ovisnošću kako kasnije ne bismo imali pogreške u ovisnosti, dodatku ili verziji.
java kako napraviti red
# 5) Jednom kad su gotovi koraci gotovi, naše je okruženje spremno.
Pisanje test slučajeva pomoću krastavaca
Krastavac uključuje sljedeće tri datoteke:
- Datoteka značajke: Ovdje pišemo Značajke koje ćemo testirati u Gherkin formatu, tj. S obzirom na to kada. Možemo čak pokrenuti datoteku značajki za izvršavanje testnih skripti napisanih u datoteci Stepdef.
- Stepdef datoteka: Jednom kada je datoteka značajke spremna, svaka rečenica datoteke značajke može se dalje implementirati preko datoteke Stepdef.
- Datoteka trkača: Ovo je samo za izvršavanje stvarne test skripte napisane preko datoteke Stepdef pozivanjem na datoteku značajki. Osim toga, ima mnogo drugih mogućnosti za prilagodbu, izvještavanje, selektivno izvršavanje itd.
Evo jednostavnog primjera datoteke Runner
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 { }
Stvaranje datoteka za krastavac
- Stepdef datoteka - Src / test / java >> Novo >> Ostalo >> Krastavac >> StepDef klasa.
- Datoteka značajke - Projekt >> Novo >> Datoteka >> navedite naziv datoteke s nastavkom kao '.feature'.
- Datoteka trkača - Slično je bilo kojem drugom stvaranju Java klase, ali možda ćemo ovdje trebati primijeniti neku metodu.
Značajke krastavaca
Evo nekoliko osnovnih značajki krastavca koje ćemo implementirati u našu testnu skriptu.
# 1) Kuke od krastavaca
To su blokovi koda koji se izvodi prije ili nakon svakog scenarija. Tako da ih možemo definirati bilo gdje u našem projektu. Na primjer, Definicija koraka.
Prema definiciji, ovo su samo dvije napomene @After i @Before. U konzoli možemo vidjeti kako se blokovi izvršavaju i daju jasne rezultate. Također možemo izvršiti kuke za određene oznake.
# 2) Oznake krastavaca
Oni se obično koriste preko datoteke značajki za klasificiranje scenarija nad datotekama značajki prema zadanom imenu oznake. U datoteci značajke možemo imati više oznaka za zadani scenarij.
Oznake su definirane od strane korisnika i možemo im dati bilo koje ime poput @ Smoke, @Regression itd.
# 3) Bilješke krastavaca
Oni su ugrađeni u krastavac. Oznake su obično @Given, @When, @Then.
Međutim, kasnije, ako zatreba, možemo stvoriti vlastitu bilješku, a zatim je koristiti u našem programu. Tijekom izvršavanja, odgovarajući kod ljepila tj. Funkcije su zapisane u datoteci Stepdef koja ima @Given, @When, @Then će se izvršiti.
# 4) Pozadina krastavca
To su koraci ili niz koraka koji su zajednički svim scenarijima u datoteci značajki.
Omogućuje nam dodavanje konteksta scenarijima za značajku gdje je definirana. Izvodi se prije svakog scenarija za značajku u kojoj je definirana.
# 5) Tablice podataka o krastavcima
Krastavac ima značajku koja podržava testiranje na temelju podataka, što nam omogućuje automatsko pokretanje testnog slučaja više puta s različitim vrijednostima unosa i provjere valjanosti za datu skriptu.
Krastavac podržava tablicu podataka. Prvi redak smatra se stupcem, a retci do njega podaci su za skripte.
# 6) Transpozicija krastavca
Ovo je neznatna izmjena tablice podataka o krastavcima. Ovdje bi se prvi stupac smatrao stupcem, a sljedeći stupci kao podaci za skripte.
# 7) Više scenarija krastavaca
Krastavac nam omogućuje testiranje više scenarija u jednoj datoteci značajki.
# 8) Izvještavanje o krastavcima
Za razliku od izvješćivanja i ostalih alata trećih strana gdje moramo napraviti određenu konfiguraciju za prikaz izvješća.
Ovdje, u Krastavcu, imamo ugrađene dodatke kao što su pretty, JSON, HTML, XML koji nam daju sveobuhvatno izvješće o izvršenju testa.
TestNG s krastavcem
Još uvijek možemo izvršiti JUnit test slučajeve napisane u Krastavcu pomoću TestNG-a slijedeći:
- Moramo dodati ovisnosti projektu Maven.
- Proširite klasu u klasi Runner kao AbstractTestNGCucumberTests paket trkač.
- Pretvorite maven projekt i dodajte paket (tamo gdje postoji klasa trkača).
Nakon toga možemo pokrenuti cijeli test s krastavcima kao TestNG i generirati izvješća koja se odnose na isti (ako imamo slušatelje).
U ovom uputstvu razgovarat ćemo o 3 različita primjera krastavca kako bismo pokrili gornje koncepte
Primjer 1
Pokrivat će udice, oznake, napomene, pozadinu, više scenarija i TestNG s krastavcem.
Nakon postavljanja testnog okruženja:
- Dodajte dodatak Eclipse Cucumber u Eclipse.
- Stvorite Maven projekt i dodajte mu sve potrebne ovisnosti, a također dodajte ovisnost povezanu s TestNG-om u Maven.
- Stvorite novu datoteku značajki.
- Dodajte potrebnu implementaciju za to u datoteku Stepdef.
- Sada stvorite datoteku pokretača s proširenjima AbstractTestNGCucumberTests.
- Pretvorite projekt Maven u TestNG i u testng.xml dodajte put paketa klase trkača krastavaca.
- Pokrenite datoteku TestNG.xml.
Datoteka značajke
Značajka:
Kao korisnik
Želim moći dodavati nove klijente u sustav
Tako da mogu dodati računovodstvene podatke za tog klijenta
Pozadina:
S obzirom da sam na Github početnoj stranici
Kada navedem Korisničko ime kao 'xxxxxxxxxxxxxxxxxxxx', a Lozinku kao 'xxx'
I kliknite gumb Prijava
@Dim
Scenarij: Uređivanje profila
S obzirom da kliknem na opciju Vaš profil
Kad kliknem na gumb za uređivanje profila
I učitao novu sliku
Tada bih trebao vidjeti novu sliku profila
@Regresija @ Svako vrijeme
Scenarij: Stvorite novu suštinu
S obzirom da kliknem na opciju Your Gists
Kada navedem naziv datoteke, opis
I kliknite na Stvori metodu javne suštine
Tada bih trebao vidjeti novu suštinu
Stepdef datoteka
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 } }
Evo rezultata testa TestNG XML
Zadani TestNG izvještaj izgleda poput dolje navedenog.
Primjer 2
Pokrivat će tablice podataka i transponirati.
Nakon postavljanja okoliša:
- Dodajte dodatak Eclipse Cucumber u Eclipse.
- Izradite Maven projekt i dodajte mu sve potrebne ovisnosti.
- Stvorite novu datoteku značajki.
- Dodajte potrebnu implementaciju za to u datoteku stepdef.
- Izvršite izravno iz datoteke značajke desnim klikom na datoteku >> Pokreni kao >> Cucumber.feature
Datoteka značajke
Značajka: Naslov vaše značajke
Želim koristiti ovaj predložak za svoju datoteku značajki
Pozadina:
S obzirom da sam na stranici za prijavu na Gmail
Kad navedem korisničko ime i lozinku
I kliknite gumb Prijava
Scenarij: Stvorite novu poruku iz tablice podataka
Kad sam na stranici nove e-pošte
I navodim sljedeće detalje
| To1 | Predmet |
| Person1@email.com | Osoba1 subjekt |
| Person2@email.com | Osoba2 subjekt |
Scenarij: Stvorite novu poruku iz prenesene tablice podataka
Kad sam na stranici nove e-pošte
I navedem sljedeće detalje iz tablice transponiranja
| To1 | Person1@email.com | Person2@email.com |
| Predmet | Osoba1 subjekt | Osoba2 subjekt |
Stepdef datoteka
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 }
Izlaz : Dakle, gornji primjer prijavit će se na Gmail i poslati dvije e-poruke za svaki scenarij koji se odnosi na tablicu podataka i tablicu transponiranih podataka.
Primjer 3
Obuhvatit će izvještavanje.
Nakon postavljanja okoliša:
- Dodajte dodatak Eclipse Cucumber u Eclipse.
- Izradite Maven projekt i dodajte mu sve potrebne ovisnosti.
- Stvorite novu datoteku značajki.
- Dodajte potrebnu implementaciju za to u datoteku Stepdef.
- Stvorite klasu trkača i izvršite klasu trkača.
- Pogledajte sve vrste izvješća.
Datoteka značajke
Značajka: Naslov vaše značajke
Želim koristiti ovaj predložak za svoju datoteku značajki
@ tag1
Scenarij: Naslov vašeg scenarija
S obzirom da sam na Github početnoj stranici
Kad navedem korisničko ime i lozinku
I kliknite gumb Prijava
Tada bih trebao vidjeti mogućnost odjave
Stepdef datoteka
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 } }
Evo različitih vrsta izvješća koja generira krastavac:
HTML izvješće
Prilično
Junit
Zaključak
Kao alat otvorenog koda, krastavac se široko koristi u BDD-u. I to je vrlo lako razumjeti i ima puno dosega s obzirom na nove značajke i praktički je moguće integrirati krastavac sa selenom ili bilo kojim drugim alatima / staklenkama treće strane itd.
Budući da ima aktivne grupe za pomoć / članove, stvarno postaje lako svima koji su tek započeli učenje krastavca ili onima koji imaju srednje znanje iz područja Krastavac / BDD.
Krastavac nadalje podržava integraciju s excel listom i Jenkinsom.
Preporučena literatura
- Vodič za krastavac selenij: Integracija Java Selenium WebDriver krastavaca
- Python DateTime Vodič s primjerima
- REST API ispitivanje krastavca korištenjem BDD pristupa
- Ispitivanje automatizacije pomoću alata krastavaca i selena - Vodič br. 30
- Vodič za krastavce krastavaca krastavaca: Ispitivanje automatizacije pomoću kornišona
- Vodič za skripte za Unix Shell sa primjerima
- Selen Pronađi element pomoću tekstualne lekcije s primjerima
- Java 'this' ključna riječ: Vodič sa primjerima koda