how run cucumber with jenkins
Овај водич даје потпун преглед краставца са Јенкинсом и Екцел листом како би објаснио интеграцију краставца Јенкинс :
У овом упутству ћемо разговарати о Краставцу са Јенкинс-ом и Екцел табелом. Надамо се да ће вам овај водич бити од помоћи.
Шта ћете научити:
- Краставац са Џенкинсом
- Јенкинс конфигурација
- Извештај о краставцима Јенкинс
- Краставац Екцел
- Посматрање
- Закључак
- Препоручено читање
Краставац са Џенкинсом
Тест Сцрипт Аутоматион
Треба извршити следећу конфигурацију.
Датотека карактеристика
Одлика:
Као корисник
Желим да могу да додам нове клијенте у систем.
Тако да могу додати рачуноводствене податке за тог клијента.
Позадина:
С обзиром на то да сам на Гитхуб почетној страници.
Када наведем корисничко име као „кккккккккк“, а лозинку као „ккккккк“.
И кликните на дугме Пријави се.
@Смоке
Сценарио: Уређивање профила.
С обзиром да кликнем на опцију Ваш профил.
Када кликнем на дугме за уређивање профила.
И отпремио нову слику.
Тада бих требао да видим нову слику профила.
@Регрессион @Еверитиме
Сценарио: Направите нову суштину.
С обзиром да кликнем на опцију Иоур Гистс.
Када наведем назив датотеке, опис.
И кликните на Цреате публиц гист метход.
Тада бих требао да видим нову суштину.
Степдеф датотека
програми који користе ц ++
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 scenrio begins'); } @After('@Smoke,@Regression') public void afterScenario(){ System.out.println('Scenrio 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 } }
ТестНГ датотека
Датотека тркача
package runner; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; import cucumber.api.testng.AbstractTestNGCucumberTests; import cucumber.api.SnippetType; @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, strict = true, tags={'@Smoke,@Regression'}, monochrome = true, snippets=SnippetType.CAMELCASE ) public class Runner extends AbstractTestNGCucumberTests{ }
Јенкинс конфигурација
Приступ Јенкинс УРЛ .
Иди на Манаге Јенкинс> Манаге Плугин .
Инсталирајте следеће додатке:
- Додатак за резултате теста краставаца
- Извештаји о краставцима
- Краставац перф додатак
отварање јар датотека на Виндовс 10
Уверите се да су током инсталирања сви зависни додаци успешно инсталирани, иначе додаци за извештавање можда неће функционисати.
Сада идите на Управљање -> Глобална конфигурација алата.
Подесите путања за ЈДК.
Подесите стаза за Мавена.
Створити Нова ставка као пројекат Мавен.
Када се посао креира, кликните везу за конфигурисање која се налази на левој табли.
Померите се надоле страница.
Поставите пуни пут пом.кмл, циљ као „тест“ и сачувати конфигурација.
Када завршите горње кораке, кликните на Буилд Нов веза која је присутна на левој табли пројекта Мавен.
Изградња ће бити извршена и одговарајућа датотеку тестинг.кмл (који је споменут преко пом.кмл) извршиће се.
Ево излаза који се приказује на конзоли.
Излаз конзоле
(ИНФО) Т Е С Т С
(ИНФО) ——————————————————-
(ИНФО) Покретање ТестСуите-а
Нови сценарио почиње
Покретање ЦхромеДривер-а 2.33.506120 (е3е53437346286ц0бц2д2дц9аа4915ба81д9023ф) на порту 27348
Дозвољене су само локалне везе.
лог4ј: УПОЗОРЕЊЕ Нису пронађени додаци за логгер
(орг.апацхе.хттп.цлиент.протоцол.РекуестАддЦоокиес).
лог4ј: УПОЗОРЕЊЕ Молимо вас да правилно иницијализујете систем лог4ј.
лог4ј: УПОЗОРЕЊЕ Погледајте хттп://логгинг.апацхе.орг/лог4ј/1.2/фак.хтмл#ноцонфиг за више информација.
25. новембра 2017. 12:56:41 орг.опенка.селениум.ремоте.ПротоцолХандсхаке цреатеСессион
ИНФО: Откривен дијалект: ОСС
хттпс://аватарс3.гитхубусерцонтент.цом/у/31874017?с=400&у=ц41бфае0фа6б9325фб4ф209885б51бд02ц7д897д&в=4
хттпс://аватарс3.гитхубусерцонтент.цом/у/31874017?с=400&у=ц41бфае0фа6б9325фб4ф209885б51бд02ц7д897д&в=4
Сценарио се завршава
Нови сценарио почиње
Покретање ЦхромеДривер-а 2.33.506120 (е3е53437346286ц0бц2д2дц9аа4915ба81д9023ф) на порту 24866
Дозвољене су само локалне везе.
25. новембра 2017. 12:57:45 орг.опенка.селениум.ремоте.ПротоцолХандсхаке цреатеСессион
ИНФО: Откривен дијалект: ОСС
Сценарио се завршава
2 сценарија (2 прошло)
14 корака (14 пређених)
2м2.677с
како да отворим торрент датотеку
(ИНФО) Покренути тестови: 1, неуспеси: 0, грешке: 0, прескочени: 0, протекло време: 128,513 с - у ТестСуите
(ИНФО)
(ИНФО) Резултати:
(ИНФО)
(ИНФО) Извршени тестови: 1, неуспеси: 0, грешке: 0, прескочени: 0
(ИНФО)
(ЈЕНКИНС) Снимање резултата теста
(ИНФО) ————————————————————————
(ИНФО) ГРАДИТИ УСПЕХ
(ИНФО) ————————————————————————
(ИНФО) Укупно време: 02:51 мин
(ИНФО) Завршено у: 2017-11-25Т12: 58: 45 + 05: 30
(ИНФО) Коначна меморија: 12М / 28М
(ИНФО) ————————————————————————
Чекајући да Јенкинс заврши са прикупљањем података
(ЈЕНКИНС) Архивирање Д: цуцумберФинал мултипле пом.кмл у цом / цуцумбер.екампле / 0.0.1-СНАПСХОТ / цуцумбер.екампле-0.0.1-СНАПСХОТ.пом
канал заустављен
Завршено: УСПЕХ
Извештај о краставцима Јенкинс
Краставац Екцел
Тест Сцрипт Аутоматион
Треба извршити следећу конфигурацију.
Стратегија дизајна теста:
- Направите услужни програм за Екцел читач, који има могућност да узме „назив колоне“ екцел листа као улазни параметар, а заузврат ће дати Екцел вредност „цолумнвалуе“ за тај „цолумнанме“.
- Направите датотеку са карактеристикама, која има назив колоне екцел листа наведен у двоструким наводницима у било ком кораку.
- Сада створите одговарајућу Степдеф датотеку за датотеку функције и користите параметре (арг1, арг2 итд .. генерисане ако смо реч навели у двоструким наводницима преко датотеке карактеристика) као улаз за Екцел читач (креиран у кораку1).
- Сада имамо вредност ступца екцел листа која се може користити као улаз у датотеку Степдеф.
- Извршите датотеку са карактеристикама као што је креирано у горњем кораку.
Датотека карактеристика
Одлика: Наслов ваше функције
Желим да користим овај образац за своју датотеку карактеристика
Позадина:
С обзиром да сам на Гмаилу и приступам екрану „екран“.
С обзиром да корисничко име наводим као „Корисничко име“, а лозинку као „Лозинку“.
Дати Кликните на дугме Пријави се.
Сценарио: Направите нову поруку из табеле података
Када приступам искачућем прозору.
И одредим као „До“ и предмет као „Предмет“ и кликнем на дугме за слање.
Тада бих требао да видим поруку о успеху.
Екцел датотека
package com.cuexcel; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.google.common.collect.Maps; import gherkin.formatter.model.Row; public class Excel { private static String sheet = 'Sheet1'; private static String worksheet = 'D:\cucumberFinal\cuexcel\Files\tdata.xls'; static HashMap excelinfo = new HashMap(); public static String get(String ColName) throws IOException { FileInputStream fis; int k =0; String ColValue=null; fis = new FileInputStream(worksheet); HSSFWorkbook wb = new HSSFWorkbook(fis); HSSFSheet ws = wb.getSheet(sheet); int rows = ws.getPhysicalNumberOfRows(); HSSFRow HeaderRow = ws.getRow(0); for(Integer i=1;i Степдеф датотека
package com.cuexcel; import java.io.IOException; import java.util.ArrayList; 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.interactions.Actions; import cucumber.api.Scenario; import cucumber.api.java.Before; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.api.Scenario; import com.cuexcel.Excel; public class CExcel { static public WebDriver driver; Excel e; @Before public static void callexcel() throws IOException, InterruptedException { System.setProperty('webdriver.chrome.driver', 'Executables/chromedriver.exe'); driver= new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to('https://www.google.com/gmail/about'); } @Given('^I am on Gmail and accessing screen '((^')*)'$') public void i_am_on_Gmail_and_accessing_screen(String arg1) throws Throwable { // Write code here that turns the phrase above into concrete actions driver.findElement(By.xpath('//nav/div/a(2)')).click(); //arg1=Excel.get().get(0).toString(); System.out.println(e.get(arg1) + ' - is clicked'); Thread.sleep(3000); } @Given('^I specify Username as '((^')*)' and Password as '((^')*)'$') public void i_specify_Username_as_and_Password_as(String arg1, String arg2) throws Throwable { //arg1=Excel.get().get(1).toString(); //arg2=Excel.get().get(2).toString(); driver.findElement(By.xpath('//input(@type='email')')).sendKeys(e.get(arg1). toString()); driver.findElement(By.xpath('//*(@id='identifierNext')/content/span')).click(); Thread.sleep(3000); driver.findElement(By.xpath('//input(@type='password')')). sendKeys (e.get(arg2). toString()); } @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 accessing the popup '((^')*)'$') public void i_am_accessing_the_popup(String arg1) throws Throwable { // Write code here that turns the phrase above into concrete actions //arg1=Excel.get().get(3).toString(); driver.findElement(By.xpath('//*(@id=':x4')/div/div')).click(); System.out.println(e.get(arg1) + '- being clicked'); } @When('^I specify to as '((^')*)' and subject as '((^')*)' details and click on submit button$') public void i_specify_to_as_and_subject_as_details_and_click_on_submit_button(String arg1, String arg2) throws Throwable { // Write code here that turns the phrase above into concrete actions String whandle = driver.getWindowHandle(); driver.switchTo().window(whandle); //arg1=Excel.get().get(4).toString(); //arg2=Excel.get().get(5).toString(); driver.findElement(By.xpath('//td(@class='eV')/div(1)/div/textarea')).sendKeys (e.get(arg1)); driver.findElement(By.xpath('//table(@class='aoP aoC bvf')/tbody/tr/td/form/div(3)/input')).sendKeys(e.get(arg2)); driver.findElement(By.xpath('//table(@class='IZ')/tbody/tr/td/div')).click(); Thread.sleep(3000); } @Then('^i should be seeing the success message$') public void i_should_be_seeing_the_success_message() throws Throwable { // Write code here that turns the phrase above into concrete actions WebElement sent = driver.findElement(By.xpath('//*(@id='link_vsm')')); if(sent.isDisplayed()) { System.out.println('Message sent successfully'); } } }
ПОМ датотека
4.0.0 com cuexcel 0.0.1-SNAPSHOT jar cuexcel 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 net.masterthought cucumber-reporting 3.11.0 org.apache.maven.plugins maven-surefire-plugin 2.18 org.apache.maven.surefire surefire-junit47 2.18
Када је горенаведена конфигурација завршена, само извршите датотеку са карактеристикама.
Посматрање
Датотека Степдеф узима податке са Екцел листа и извршава кораке теста поменуте у датотеци карактеристика.
Ево резултата извршења тест случаја како је поменуто преко конзоле Ецлипсе.

Закључак
БДД је будућност аутоматизације теста, јер омогућава свим заинтересованим странама да учествују у креирању тест скрипте, посебно да дају своје уносе преко датотеке Феатуре.
Краставац је широко коришћени БДД алат и има пуно интеграција и карактеристика које тек треба применити у аутоматизацији тестова. Постоји неколико група / заједница које активно раде на краставцу.
Ако сте добро упућени у краставац, тада можете радити на било ком БДД алату који је доступан на тржишту јер већина алата ради слично краставцу.
Надамо се да сте о овом краставцу са Јенкинсом сазнали кроз овај детаљни водич.
Препоручено читање
- Питхон ДатеТиме Водич са примерима
- Водич за краставац селенијум: Интеграција Јава Селениум ВебДривер краставца
- Водич за скрипте за Уник Схелл са примерима
- Водич за текст помоћу примера у тексту за проналажење селена
- Јава 'тхис' кључна реч: Водич са примерима кода
- Водич за БДД и краставац са примерима
- Водич за руковање изузецима за Ц # са примерима кода
- Испитивање аутоматизације помоћу алата за краставце и селена - Туториал бр. 30