bdd cucumber tutorial with examples
Tento podrobný výukový program o uhorkách pojednáva o BDD a jeho výhodách, rámci pre uhorky, nastavenia prostredí, vytváraní testovacích skriptov, funkciách uhoriek, správach atď .:
Uhorka sa stala veľmi populárnou a teraz je široko používaná v priemysle testovania softvéru.
Podmienky - Zamýšľaní príjemcovia by mali mať znalosti o programoch Scrum, Maven, TestNG atď.
Čo sa dozviete:
- Pozadie BDD
- Výhody vývoja riadeného správaním (BDD)
- Nástroje BDD
- Prečo Uhorka?
- Ako funguje uhorka?
- Nastavenia prostredia
- Písanie testovacích prípadov pomocou uhorky
- Vytváranie súborov pre uhorku
- Funkcie uhorky
- TestNG s uhorkou
- Záver
- Odporúčané čítanie
Pozadie BDD
V metodike TDD Framework of Agile normálne najskôr napíšeme testovacie prípady a potom ich vykonáme. To je dobré na dosiahnutie pokrytia testu a uistenie sa, že je zostava pripravená na výrobu.
Môžeme však vylepšiť rámec TDD zavedením správania, funkcií atď. Do testu a potom vykonať to isté. Toto vylepšenie TDD sa nazýva BDD (Behavior Driven Development).
Výhody vývoja riadeného správaním (BDD)
Niektoré výhody používania BDD sú:
# 1) Preklenuje priepasť medzi podnikateľskými subjektmi a technickým tímom prostredníctvom spoločnej platformy. Komunikácia medzi tímami sa tak stáva transparentnejšou.
#dva) Scenáre môže písať ktokoľvek vrátane ľudí z klientskej strany, člena obchodného tímu, manažmentu atď. Preto sú požiadavky, scenáre pokryté.
# 3) Vývojári budú písať kód v súlade so scenármi napísanými v rámci BDD namiesto písania / vývoja kódu podľa ich porozumenia.
# 4) Testovanie sa stáva ostrejším, šetrí sa čas strávený vytvorením a následným vykonaním testu, kritické chyby, najmä tie, ktoré môžu mať vplyv na podnik, nájdete v samotnom klientskom rozhraní.
# 5) Kód, dokumentácia súvisiaca s BDD sú ľahko zrozumiteľné a udržiavateľné, pretože na údržbu tohto kódu nie je potrebné žiadne ďalšie úsilie, pretože dokumenty a zodpovedajúci kód už spolu súvisia. Preto to, čo je uvedené v dokumentácii, t. J. Scenáre, bude mať zodpovedajúci kód.
# 6) Pretože máme veľmi ľahko pochopiteľné scenáre, môžeme ich logickým spôsobom ľahko rozdeliť na úlohy, čiastkové úlohy atď.
# 7) Tím môže byť dynamickejší, pohyblivejší, pretože existuje jasná predstava o scenároch, kritériách prijatia a takmer presnom odhade testu.
# 8) Veľmi dobrá platforma pre nových Pripojené k ženíchovi s existujúcim tímom, čo sa týka dokumentácie aj kódu, kvôli jeho jednoduchosti.
# 9) Pomáha nielen pri overovaní scenárov (väčšinou používateľského rozhrania, týkajúcich sa správania), ale pomáha aj v testovacích prípadoch na úrovni jednotky.
# 10) Je tiež užitočné sledovať postup tímu od prvého dňa, pretože požiadavky a scenáre sú jasne definované (niečo, čo sa vývojári zvyčajne snažia zhromaždiť v TDD).
Implementácia BDD preto odstraňuje predpoklad, že „koncový klient nemyslí na dôležitosť testovania“, „klient sa nechce zapojiť do testovacích aktivít“ atď.
Nástroje BDD
Existuje niekoľko testovacích nástrojov, ktoré nám umožňujú implementovať prístup BDD.
Napríklad:
- Uhorka
- SpecFlow
- Jbehave
- Šalát
- Harmonika
- FitNesse
- BeanSpec
- Ľahko B
- Jdave
- Givwenzen-flex
- GivWenZen
- Inštinkt
- Pohár na pohárik
- Gospecify
- Veľkolepé
- dSpec
- Špecifikácie
- Steak
- JSSpec
Medzi vyššie uvedenými nástrojmi funguje Jbehave dosť podobne ako Cucumber, sú však mierne odlišné z hľadiska ich implementácie.
JBEHAVE | Uhorka |
---|---|
Podporuje externé zdroje údajov | Nepodporuje externé zdroje údajov |
Podporuje príbehy | Podporuje funkcie |
Veľmi dobrá dokumentácia | Žiadna štandardná dokumentácia |
Podporuje zložené kroky | Nepodporuje zložené kroky |
Nie také flexibilné | Flexibilné pri odovzdávaní parametrov |
Nepodporuje pozadie | Podporuje pozadie |
Nie také rozsiahle správy | Lepšia flexibilita formátovania, vstavané prehľady |
Vyvinuté pomocou Javy | Vyvinuté pomocou Ruby |
Prečo Uhorka?
Uhorka sa používa na písanie všetkých druhov testovacích prípadov, najmä testovacích prípadov na úrovni prijatia (o ktoré sa viac zaujímajú koncoví používatelia), písaných štýlom vývoja založeného na správaní. Podporuje použitie jazykových analyzátorov, ako je Gherkin.
Cucumber bol pôvodne napísaný pomocou programovacieho jazyka Ruby a bol vyvinutý špeciálne pre testovanie Ruby. Teraz ho však podporujú ďalšie programovacie jazyky, napríklad Java.
Gherkin sa používa ako jazyk, v ktorom sú testovacie prípady napísané v jednoduchom formáte a môže ho tiež čítať a upravovať netechnický používateľ.
Okrem angličtiny podporuje Cucumber aj ďalšie jazyky.
Ako funguje uhorka?
Pokiaľ ide o jeho pracovný mechanizmus, najskôr necháme používateľov (technických / netechnických), aby napísali požadované testovacie prípady (ako funkcie) pomocou Gherkinovej syntaxe, akonáhle je hotové, musíme sa ubezpečiť, že sú schválení, aby mohli prejsť na ďalšiu úroveň.
Potom musíme implementovať, tj. Napísať skripty pre každý riadok (pomocou súboru stepdef), ako je uvedené v súbore funkcií. Po implementácii kódov by ďalšou vecou bolo spustenie skriptov (pomocou súboru bežca).
Environmentálne nastavenie
Environmentálne nastavenie pre Cucumber je mierne zložité v porovnaní s prácou s akýmkoľvek iným nástrojom, ako je Eclipse alebo iný IDE.
Výzvy
Musíme sa uistiť, že verzie pohárov Cucumber sa zhodujú s nainštalovanou verziou Java, ako aj s IDE, v ktorom momentálne pracujeme.
Nastavenia prostredia
# 1) Eclipse Cucumber Plugin : Pomáha Eclipse pochopiť Gherkinovu syntax a zvýrazňuje syntax súboru funkcií namiesto obyčajného textu.
Musíme ísť na Eclipse >> Pomocník >> Inštalácia nového softvéru >> Kliknite na tlačidlo Pridať >> Zadajte umiestnenie ako toto . Názov hovorí „Cucumber“ a potom kliknite na OK a postupujte podľa zvyšného procesu inštalácie.
Nakoniec reštartujte svoje IDE, tj. Eclipse.
#dva) Pomocou nástroja Maven môžete mať všetky poháre, t. J. Závislosti, doplnky atď., Ako je uvedené nižšie.
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) Skontrolujte, či vykonáme Ctrl + s alebo vykonáme inštaláciu Maven.
# 4) Potom nezabudnite vykonať zostavenie Maven, aby ste sa vyhli akejkoľvek chybe súvisiacej so závislosťou, aby sme neskôr nemali žiadnu chybu nesúladu závislostí, doplnkov a verzií.
čo je flash súbor s rázovou vlnou
# 5) Po dokončení vyššie uvedených krokov je naše prostredie pripravené.
Písanie testovacích prípadov pomocou uhorky
Uhorka obsahuje nasledujúce tri súbory:
- Súbor funkcií: Tu píšeme funkcie, ktoré sa majú testovať, vo formáte Gherkin, tj. Môžeme dokonca spustiť súbor funkcií na vykonanie testovacích skriptov napísaných v súbore Stepdef.
- Súbor Stepdef: Keď je súbor Feature pripravený, každú vetu súboru Feature je možné ďalej implementovať cez súbor Stepdef.
- Súbor bežca: Toto je iba na vykonanie skutočného testovacieho skriptu napísaného cez súbor Stepdef pomocou odkazu na súbor funkcií. Okrem toho má mnoho ďalších možností prispôsobenia, vykazovania, selektívneho vykonávania atď.
Tu je jednoduchý príklad súboru 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 { }
Vytváranie súborov pre uhorku
- Súbor Stepdef - Src / test / java >> Nové >> Ostatné >> Uhorka >> StepDef trieda.
- Súbor funkcií - Projekt >> Nový >> Súbor >> zadajte názov súboru s príponou ako „.feature“.
- Pilník bežec - Je to podobné ako pri vytváraní iných tried Java, ale môžeme tu vyžadovať implementáciu nejakej metódy.
Funkcie uhorky
Tu uvádzame niektoré zo základných funkcií uhorky, ktoré budeme implementovať do nášho testovacieho skriptu.
# 1) Háčiky na uhorku
Toto sú bloky kódu, ktorý sa spustí pred alebo po každom scenári. Aby sme ich mohli kdekoľvek v našom projekte definovať. Napríklad, Definícia kroku.
Podľa definície ide iba o dve anotácie @After a @Before. V konzole vidíme, ako sa bloky vykonávajú a poskytujú jasný výstup. Môžeme tiež vykonať háčiky pre konkrétne značky.
# 2) Uhorky značky
Spravidla sa používajú v súbore funkcií na klasifikáciu scenárov v súboroch funkcií podľa ich zadaného názvu značky. V súbore funkcií môžeme mať viac značiek pre daný scenár.
Značky sú definované používateľom a môžeme im dať akýkoľvek názov, napríklad @Smoke, @Regression atď.
# 3) Uhorky - poznámky
Sú zabudované do uhorky. Normálne sú značky @Given, @When, @Then.
Ak však neskôr budeme potrebovať, môžeme si vytvoriť vlastnú anotáciu a potom ju použiť v našom programe. Počas vykonávania sa zodpovedajúci kód lepidla, t. J. Funkcie, zapíšu do súboru Stepdef s vykonaním @Given, @When, @Then.
# 4) Uhorka na pozadí
Toto sú kroky alebo série krokov, ktoré sú spoločné pre všetky scenáre v súbore funkcií.
Umožňuje nám to pridať do kontextu scenárov objektu, kde je definovaný, nejaký kontext. Prebieha pred každým scenárom pre funkciu, v ktorej je definovaná.
# 5) Tabuľky s údajmi o uhorke
Cucumber má funkciu na podporu testovania na základe dát, čo nám umožňuje automaticky spustiť testovací prípad niekoľkokrát s rôznymi vstupnými a validačnými hodnotami pre daný skript.
Uhorka podporuje údajovú tabuľku. Prvý riadok sa považuje za stĺpec a riadky vedľa neho sú údajmi pre skripty.
# 6) Transpozícia uhorky
Toto je nepatrná úprava tabuľky s údajmi o uhorke. Prvý stĺpec by sa tu považoval za stĺpec a nasledujúce stĺpce sa považujú za údaje pre skripty.
# 7) Viacnásobné scenáre uhorky
Uhorka nám umožňuje vykonávať testovanie viacerých scenárov v jednom súbore funkcií.
# 8) Hlásenie uhoriek
Na rozdiel od prehľadov a iných nástrojov tretích strán, kde na zobrazenie prehľadov musíme urobiť určitú konfiguráciu.
Tu v Cucumber máme zabudované doplnky ako pretty, JSON, HTML, XML, ktoré nám poskytujú komplexnú správu o vykonaní testu.
TestNG s uhorkou
Stále môžeme vykonať testovacie prípady JUnit napísané v uhorke pomocou TestNG nasledovným:
- Musíme pridať závislosti do projektu Maven.
- Rozšírte triedu v triede Runner ako bežec balíka AbstractTestNGCucumberTests.
- Konvertujte projekt maven a pridajte balíček (kde existuje trieda bežcov).
Potom môžeme spustiť celý testovací prípad Cucumber ako TestNG a generovať súvisiace správy (ak máme poslucháčov).
V tomto výučbe si povieme 3 rôzne príklady uhorky, ktoré pokryjú vyššie uvedené pojmy
Príklad 1
Bude sa týkať háčikov, značiek, anotácií, pozadia, viacerých scenárov a TestNG s uhorkou.
Po nastavení testovacieho prostredia:
- Pridajte doplnok Eclipse Cucumber do Eclipse.
- Vytvorte projekt Maven a pridajte doň všetky požadované závislosti a tiež pridajte závislosť súvisiacu s TestNG v Maven.
- Vytvorte nový súbor funkcií.
- Pridajte požadovanú implementáciu do súboru Stepdef.
- Teraz vytvorte súbor bežca s rozšírením AbstractTestNGCucumberTests.
- Konvertujte projekt Maven na TestNG a v testng.xml pridajte cestu balíka triedy Cucumber runner.
- Spustite súbor TestNG.xml.
Súbor funkcií
Funkcia:
Ako užívateľ
Chcem mať možnosť pridávať do systému nových klientov
Aby som mohol doplniť účtovné údaje o danom klientovi
Pozadie:
Vzhľadom na to, že som na domovskej stránke Githubu
Keď zadám používateľské meno ako „xxxxxxxxxxxxxxxxxxxx“ a heslo ako „xxx“
A kliknite na tlačidlo Prihlásiť sa
@ Dym
Scenár: Úprava profilu
Vzhľadom na to, že klikám na možnosť Váš profil
Keď kliknem na tlačidlo Upraviť profil
A nahraný nový obrázok
Potom by som mal vidieť nový profilový obrázok
@ Regresia @ Zakaždým
Scenár: Vytvoriť novú podstatu
Vzhľadom na to, že klikám na možnosť Vaše zoznamy
Keď uvediem názov súboru, popis
A kliknite na Vytvoriť metódu verejného súhrnu
Potom by som mal vidieť novú podstatu
Stepdef File
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 } }
Tu je výsledok testu TestNG XML
Predvolená správa TestNG vyzerá ako správa uvedená nižšie.
Príklad 2
Bude pokrývať tabuľky s údajmi a transponovať ich.
Po nastavení prostredia:
- Pridajte doplnok Eclipse Cucumber do Eclipse.
- Vytvorte projekt Maven a pridajte doň všetky požadované závislosti.
- Vytvorte nový súbor funkcií.
- Pridajte požadovanú implementáciu do súboru stepdef.
- Vykonajte priamo zo súboru funkcií kliknutím pravým tlačidlom myši na súbor >> Spustiť ako >> Cucumber.feature
Súbor funkcií
Funkcia: Názov vašej funkcie
Chcem použiť túto šablónu pre svoj súbor funkcií
Pozadie:
Vzhľadom na to, že som na prihlasovacej stránke služby Gmail
Keď zadám užívateľské meno a heslo
A kliknite na tlačidlo Prihlásiť sa
Scenár: Vytvorte novú správu z dátovej tabuľky
Keď som na novej e-mailovej stránke
A upresňujem nasledujúce podrobnosti
| To1 | Predmet |
| Person1@email.com | Osoba1 predmet |
| Person2@email.com | Osoba2 predmet |
Scenár: Vytvorte novú správu z tabuľky prevedených údajov
Keď som na novej e-mailovej stránke
A uvediem nasledujúce podrobnosti z tabuľky transpozície
| To1 | Person1@email.com | Person2@email.com |
| Predmet | Osoba1 predmet | Osoba2 predmet |
Súbor Stepdef
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 }
Výkon : Vyššie uvedený príklad sa teda prihlási do služby Gmail a odošle dva e-maily pre každý scenár, ktorý sa týka tabuľky údajov a tabuľky transponovaných údajov.
Príklad 3
Bude sa týkať podávania správ.
Po nastavení prostredia:
- Pridajte doplnok Eclipse Cucumber do Eclipse.
- Vytvorte projekt Maven a pridajte doň všetky požadované závislosti.
- Vytvorte nový súbor funkcií.
- Pridajte požadovanú implementáciu do súboru Stepdef.
- Vytvorte triedu bežcov a vykonajte triedu bežcov.
- Zobraziť všetky typy prehľadov.
Súbor funkcií
Funkcia: Názov vašej funkcie
Chcem použiť túto šablónu pre svoj súbor funkcií
@ tag1
Scenár: Názov vášho scenára
Vzhľadom na to, že som na domovskej stránke Githubu
Keď zadám užívateľské meno a heslo
A kliknite na tlačidlo Prihlásiť sa
Potom by som mal vidieť možnosť odhlásenia
Stepdef File
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 } }
Tu sú rôzne typy prehľadov, ktoré generuje uhorka:
Správa HTML
Pekná
Junit
Záver
Pretože je nástrojom open-source, je Cucumber v BDD široko používaný. A je to veľmi ľahké pochopiť a má veľa priestoru, pokiaľ ide o nové funkcie, a je prakticky možné integrovať Cucumber so selénom alebo inými nástrojmi / nádobami tretích strán atď.
Pretože má aktívne skupiny / členov pomoci, stane sa skutočne ľahkým pre kohokoľvek, kto sa práve začal učiť uhorku, alebo pre tých, ktorí majú stredne pokročilé znalosti uhorky / BDD.
Uhorka ďalej podporuje integráciu s hárkom programu Excel a tiež s Jenkinsom.
Odporúčané čítanie
- Výukový program Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- Výukový program pre Python DateTime s príkladmi
- Testovanie REST API s uhorkou pomocou prístupu BDD
- Automatizačné testovanie pomocou nástroja Cucumber Tool a selénu - selén - návod č. 30
- Výukový program Cucumber Gherkin: Testovanie automatizácie pomocou programu Gherkin
- Výukový program pre skriptovanie Unixu s príkladmi
- Sprievodca hľadaním prvkov selénom podľa výučby s príkladmi
- Java „toto“ kľúčové slovo: Výukový program s príkladmi kódu