bdd cucumber tutorial with examples
Този урок за краставици обсъжда BDD и неговите предимства, рамка за краставици, настройки на околната среда, създаване на тестов скрипт, характеристики на краставицата, доклади и др.
Краставицата стана много популярна и сега тя се използва широко в индустрията за тестване на софтуер.
Предварителни условия - Предполагаемите получатели трябва да имат познания за Scrum, Maven, TestNG и др.
Какво ще научите:
- Предистория на BDD
- Ползи от поведенческото развитие (BDD)
- BDD инструменти
- Защо краставица?
- Как работи краставицата?
- Настройки на околната среда
- Писане на тестови случаи с използване на краставица
- Създаване на файлове за краставица
- Краставица Характеристики
- TestNG с краставица
- Заключение
- Препоръчително четене
Предистория на BDD
В TDD Framework на Agile методологията обикновено пишем първо тестовите случаи и след това ги изпълняваме. Това е добре да се постигне тестово покритие и да се гарантира, че компилацията е готова за производство.
Въпреки това можем да подобрим TDD рамката, като въведем поведение, функции и т.н. в теста и след това да изпълним същото. Това подобрение на TDD се нарича BDD (поведенческо развитие).
Ползи от поведенческото развитие (BDD)
Някои ползи от използването на BDD са:
# 1) Преодолява пропастта между заинтересованите страни в бизнеса и техническия екип чрез обща платформа. Следователно комуникацията между екипа става по-прозрачна.
# две) Сценарии може да пише всеки, включително хора от страна на клиента, член на бизнес екипа, мениджмънт и др. Следователно изискванията, сценариите се покриват.
# 3) Разработчиците ще напишат кода, съответстващ на сценариите, написани в BDD рамката, вместо да пишат / разработват кода според тяхното разбиране.
# 4) Тестването става по-рязко, времето, прекарано в създаването и последващото изпълнение на тест, се спестява, критични дефекти, особено тези, които могат да повлияят на бизнеса, могат да бъдат намерени в самия преден край.
# 5) Кодът, документацията, свързана с BDD, са лесно разбираеми и поддържаеми, тъй като не са необходими други усилия за поддържане на кода, тъй като документите и съответният код вече са свързани. Следователно споменатото в документацията, т.е. сценарии, ще има съответния код.
# 6) Тъй като имаме много лесни за разбиране сценарии, можем лесно да ги разделим на задачи, подзадачи и т.н. по логичен начин.
# 7) Екипът може да бъде по-динамичен, пъргав, тъй като има предварителна яснота относно сценариите, критериите за приемане и почти точната оценка на теста.
# 8) Много добра платформа за New Joined, който да се грижи за съществуващия екип както по отношение на документацията, така и по отношение на кода, поради неговата простота.
# 9) Не само помага при валидиране на сценариите (най-вече потребителски интерфейс, свързани с поведението), но помага и в тестови случаи на ниво ниво.
# 10) Също така е полезно да проследите напредъка на екипа от първия ден, защото изискванията и сценариите са ясно дефинирани (нещо, което разработчиците обикновено се борят да съберат в TDD).
Следователно внедряването на BDD премахва предположението, че „крайният клиент не мисли за важността на тестването“, „клиентът не иска да се включва в тестовите дейности“ и т.н.
BDD инструменти
Има няколко инструмента за тестване, които ни позволяват да приложим подхода BDD.
Като:
- Краставица
- SpecFlow
- Jbehave
- Маруля
- Конкордион
- FitNesse
- BeanSpec
- Лесно Б
- Jdave
- Givwenzen-flex
- GivWenZen
- Инстинкт
- Стъклена чаша
- Госпецифицирайте
- Грандиозен
- dSpec
- Спецификации
- Пържола
- JSSpec
Сред горните инструменти Jbehave работи доста подобно на Краставицата, но те са малко по-различни по отношение на тяхното изпълнение.
JBEHAVE | КРАСТВА |
---|---|
Поддържа външни източници на данни | Той не поддържа външни източници на данни |
Поддържа истории | Поддържа функции |
Много добра документация | Няма стандартна документация |
Поддържа композитни стъпки | Не поддържа композитни стъпки |
Не е толкова гъвкав | Гъвкави при преминаване параметри |
Не поддържа фон | Поддържа фон |
Не толкова обширни доклади | По-добра гъвкавост при форматиране, вградени отчети |
Разработено с помощта на Java | Разработено с помощта на Ruby |
Защо краставица?
Краставицата се използва за писане на всякакви тестови случаи, особено тестови случаи на ниво на приемане (за които крайните потребители са по-загрижени), написани в стил на поведенческо развитие. Той поддържа използването на езикови анализатори като Gherkin.
Първоначално Cucumber е написан с помощта на езика за програмиране Ruby и е разработен специално за тестване на Ruby. Но сега се поддържа от други програмни езици като Java.
Корнишонът се използва като език, на който тестовите случаи са написани в прост формат и могат да бъдат прочетени и модифицирани от нетехнически потребител.
Освен английски, Краставицата поддържа и други езици.
Как работи краставицата?
Пристигайки до работния му механизъм, първо оставяме потребителите (технически / нетехнически) да напишат желаните тестови случаи (като функции), използвайки синтаксиса на Gherkin, след като приключи, трябва да се уверим, че са одобрени, за да могат следващото ниво.
След това трябва да приложим, т.е.да напишем скриптове за всеки ред (използвайки stepdef файл), както е споменато във файла с характеристиките. След като кодовете се внедрят, следващото нещо ще бъде да стартирате скриптовете (с помощта на файл на бегач).
Настройка на околната среда
Настройката на околната среда за Краставицата е малко сложна в сравнение с работата с друг инструмент като Eclipse или друг IDE.
Предизвикателства
Трябва да се уверим, че версиите на бурканчета от краставици съвпадат с инсталираната версия на Java, както и IDE, в който работим в момента.
Настройки на околната среда
# 1) Приставка за краставица Eclipse : Помага на Eclipse да разбере синтаксиса на корнишоните и подчертава синтаксиса на файла с функции вместо обикновен текст.
Трябва да отидем до Eclipse >> Помощ >> Инсталиране на нов софтуер >> Щракнете върху бутона Добавяне >> Посочете местоположението като това . Името казва „Краставица“ и след това щракнете върху OK и следвайте останалия процес на инсталиране.
Най-накрая рестартирайте вашата IDE, т.е. Eclipse.
# две) Използвайте Maven, за да имате всички буркани, т.е. зависимости, приставки и т.н., както е споменато по-долу.
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) Уверете се, че правим или Ctrl + s, или изпълняваме инсталирането на Maven.
# 4) След това се уверете, че сте изпълнили Maven build, за да избегнете всяка грешка, свързана със зависимостта, така че да нямаме никаква грешка на зависимостта, приставката, несъответствието на версията по-късно.
най-добрият видео конвертор за mac
# 5) След като горните стъпки са изпълнени, нашата среда е готова.
Писане на тестови случаи с използване на краставица
Краставицата включва следните три файла:
- Файл на характеристиката: Тук пишем характеристиките, които ще бъдат тествани във формат корнишон, т.е. Можем дори да стартираме функционалния файл, за да изпълним тестовите скриптове, написани във файла Stepdef.
- Файл Stepdef: След като файлът Feature е готов, всяко изречение от файла Feature може да бъде допълнително внедрено през файла Stepdef.
- Файл на бегач: Това е само за изпълнение на действителния тестов скрипт, написан върху файла Stepdef, като се позовава на файла с характеристиките. Освен това, той има много други опции за персонализиране, отчитане, селективно изпълнение и т.н.
Ето един прост пример за файл 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 { }
Създаване на файлове за краставица
- Файл Stepdef - Src / test / java >> Ново >> Други >> Краставица >> Клас StepDef.
- Файл на характеристиките - Проект >> Ново >> Файл >> посочете името на файла с разширение като ‘.feature’.
- Файл на бегач - Подобно е на всяко друго създаване на Java клас, но тук може да се наложи да внедрим някакъв метод.
Краставица Характеристики
Ето някои от основните характеристики на Краставицата, които ще внедрим в нашия Тестов скрипт.
# 1) Куки за краставици
Това са блоковете на кода, който се изпълнява преди или след всеки сценарий. За да можем да ги дефинираме навсякъде в нашия проект. Например, Определение на стъпка.
Според дефиницията това са само две анотации @After и @Before. В конзолата можем да видим как блоковете се изпълняват и дават ясен изход. Също така можем да изпълним куките за конкретни тагове.
# 2) Етикети с краставици
Те обикновено се използват над файла на характеристиките, за да класифицират сценариите върху файловете на характеристиките според даденото им име на етикет. Можем да имаме няколко маркера за даден сценарий във файла с характеристиките.
Етикетите са дефинирани от потребителя и можем да му дадем всяко име като @Smoke, @Regression и т.н.
# 3) Анотации на краставици
Те са вградени в Краставица. Обикновено маркерите са @Given, @When, @Then.
По-късно обаче, ако имаме нужда, можем да създадем собствена анотация и след това да я използваме в нашата програма. По време на изпълнението, съответстващият код на лепилото, т.е. функциите се записват във файл Stepdef, като @Given, @When, @Then ще бъдат изпълнени.
# 4) Фон от краставици
Това са стъпки или поредица от стъпки, които са общи за всички сценарии във файла с характеристиките.
Позволява ни да добавим някакъв контекст към сценариите за функция, където тя е дефинирана. Тя се изпълнява преди всеки сценарий за функция, в която е дефинирана.
# 5) Таблици с данни за краставици
Краставицата има функцията да поддържа тестване, управлявано от данни, което ни позволява автоматично да стартираме тестов случай няколко пъти с различни входни и валидиращи стойности за даден скрипт.
Краставицата поддържа таблицата с данни. Първият ред се счита за колона, а редовете до него са данните за скриптовете.
# 6) Транспониране на краставица
Това е леко изменение на таблицата с данни за краставици. Тук първата колона ще се счита за колона, а следващите колони се считат за данни за скриптовете.
# 7) Мулти сценарии за краставици
Краставицата ни позволява да извършваме тестване на множество сценарии под един файл с функции.
# 8) Отчитане на краставици
За разлика от отчитането и други инструменти на трети страни, където трябва да направим някаква конфигурация, за да видим отчитането.
Тук в Cucumber имаме вградени приставки като pretty, JSON, HTML, XML, които ни дават изчерпателен отчет за изпълнението на теста.
TestNG с краставица
Все още можем да изпълним JUnit тестовите случаи, написани в Краставица, с помощта на TestNG от следното:
- Трябва да добавим зависимостите към проекта Maven.
- Разширете класа в клас Runner като AbstractTestNGCucumberTests пакет бегач.
- Конвертирайте проекта maven и добавете пакета (където съществува класът бегач).
След това можем да стартираме целия тест за краставици като TestNG и да генерираме отчети, отнасящи се до същия (ако имаме слушателите).
В този урок ще обсъдим 3 различни примера за краставици, за да покрием горните концепции
Пример 1
Той ще обхваща куки, тагове, анотации, фон, множество сценарии и TestNG с краставица.
След като се настрои тестовата среда:
- Добавете приставката Eclipse Cucumber в Eclipse.
- Създайте проект на Maven и добавете всички необходими зависимости към него, а също така добавете зависимостта, свързана с TestNG, в Maven.
- Създайте нов файл с функции.
- Добавете необходимата реализация за него във файла Stepdef.
- Сега създайте файл за стартиране с разширения AbstractTestNGCucumberTests.
- Конвертирайте проекта Maven в TestNG и в testng.xml добавете пътя на пакета от клас на бегач от краставици.
- Стартирайте файла TestNG.xml.
Файл на характеристиките
Особеност:
Като потребител
Искам да мога да добавя нови клиенти в системата
За да мога да добавя счетоводни данни за този клиент
Заден план:
Като се има предвид, че съм на началната страница на Github
Когато посоча потребителско име като „xxxxxxxxxxxxxxxxxxxx“ и парола като „xxx“
И кликнете върху бутона Вход
@Smoke
Сценарий: Редактиране на профила
Като се има предвид, че щраквам върху Вашия профил
Когато щракна върху бутона за редактиране на профила
И качих нова снимка
Тогава би трябвало да виждам нова снимка на профила
@Regression @Everytime
Сценарий: Създайте нова същност
Като се има предвид, че щраквам върху опцията Your Gists
Когато предоставя име на файл, описание
И кликнете върху Създаване на публичен метод на същността
Тогава трябва да видя новата същност
Файл Stepdef
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 } }
Ето резултата от теста на TestNG XML
Отчетът TestNG по подразбиране изглежда като този, даден по-долу.
Пример 2
Той ще покрива таблици с данни и ще транспонира.
След като средата е настроена:
- Добавете приставката Eclipse Cucumber в Eclipse.
- Създайте проект на Maven и добавете към него всички необходими зависимости.
- Създайте нов файл с функции.
- Добавете необходимата реализация за него във файла stepdef.
- Изпълнете директно от файла на характеристиките, като щракнете с десния бутон върху файла >> Изпълни като >> Cucumber.feature
Файл на характеристиките
Особеност: Заглавие на вашата функция
Искам да използвам този шаблон за моя файл с функции
Заден план:
Като се има предвид, че съм на страницата за вход в Gmail
Когато посоча потребителско име и парола
И кликнете върху бутона Вход
Сценарий: Създайте ново съобщение от таблицата с данни
Когато съм на нова имейл страница
И посочвам следните подробности
| To1 | Тема |
| Person1@email.com | Лице1 субект |
| Person2@email.com | Лице2 субект |
Сценарий: Създайте ново съобщение от транспонирана таблица с данни
Когато съм на нова имейл страница
И посочвам следните подробности от таблицата за транспониране
| To1 | Person1@email.com | Person2@email.com |
| Тема | Лице1 субект | Лице2 субект |
Файл 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 }
Изход : Така че горният пример ще влезе в Gmail и ще изпрати два имейла за всеки сценарий, който е за таблицата с данни и таблицата с транспонирани данни.
Пример 3
Тя ще обхваща докладването.
След като средата е настроена:
- Добавете приставката Eclipse Cucumber в Eclipse.
- Създайте проект на Maven и добавете към него всички необходими зависимости.
- Създайте нов файл с функции.
- Добавете необходимата реализация за него във файла Stepdef.
- Създайте клас бегач и изпълнете класа бегач.
- Вижте всички видове отчети.
Файл на характеристиките
Особеност: Заглавие на вашата функция
Искам да използвам този шаблон за моя файл с функции
@ таг1
Сценарий: Заглавие на вашия сценарий
Като се има предвид, че съм на началната страница на Github
Когато посоча потребителско име и парола
И кликнете върху бутона Вход
Тогава трябва да мога да видя опцията за излизане
Файл Stepdef
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 } }
Ето различните видове отчети, които се генерират от Краставица:
HTML отчет
Красива
Джунит
Заключение
Като инструмент с отворен код, Краставицата се използва широко в BDD. И това е много лесно за разбиране и има голям обхват по отношение на новите функции и практически е възможно да се интегрира Краставица със селен или други инструменти / буркани на трети страни и т.н.
Тъй като има активни помощни групи / членове, наистина става лесно за всеки, който току-що е започнал да учи краставица, или за тези, които имат междинни познания по краставица / BDD.
Краставицата освен това поддържа интеграция с Excel листа и Дженкинс.
Препоръчително четене
- Урок за краставици селен: Интеграция на краставица Java Selenium WebDriver
- Урок за Python DateTime с примери
- REST API Тестване с краставица, използвайки BDD подход
- Автоматизирано тестване с помощта на инструмент за краставици и селен - Урок № 30
- Урок за краставици с краставици: Тестване за автоматизация с помощта на корнишън
- Урок за скриптове на Unix Shell с примери
- Намиране на елемент от селен чрез урок с текст с примери
- Java 'this' Ключова дума: Урок с примери за кодове