how run cucumber with jenkins
Този урок предоставя пълен преглед на краставицата с Дженкинс и лист Excel, за да обясни интеграцията на краставицата Дженкинс :
В този урок ще обсъждаме Краставицата с Дженкинс и лист на Excel. Надяваме се, че този урок ще ви бъде полезен.
Какво ще научите:
- Краставица с Дженкинс
- Конфигурация на Дженкинс
- Краставица Дженкинс Доклад
- Краставица Excel
- Наблюдение
- Заключение
- Препоръчително четене
Краставица с Дженкинс
Автоматизация на тестови скриптове
Трябва да се направи следната конфигурация.
Файл на характеристиките
Особеност:
Като потребител
Искам да мога да добавя нови клиенти в системата.
За да мога да добавя счетоводни данни за този клиент.
Заден план:
Като се има предвид, че съм на началната страница на Github.
Когато посоча потребителско име като „xxxxxxxxxx“ и парола като „xxxxxxx“.
И кликнете върху бутона Вход.
@ Пуши
Сценарий: Редактиране на профила.
Като се има предвид, че щраквам върху опцията Вашият профил.
Когато щракна върху бутона за редактиране на профила.
И качих нова снимка.
Тогава трябва да виждам нова снимка на профила.
@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 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 } }
TestNG файл
Файл Runner
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{ }
Конфигурация на Дженкинс
Достъп URL адрес на Jenkins .
Отидете на Управление на Дженкинс> Управление на приставката .
Инсталирайте следните приставки:
- Приставка за резултати от теста за краставици
- Краставица Доклади
- Краставица перф плъгин
Уверете се, че докато инсталирате всички зависими приставки са инсталирани успешно, иначе приставките за отчитане може да не работят.
Сега отидете до Управление -> Глобална конфигурация на инструмента.
Нагласи път за JDK.
Нагласи пътека за Мейвън.
Създавам нов продукт като проект на Maven.
След като заданието е създадено, щракнете върху връзката за конфигуриране, присъстваща в левия панел.
Превърти надолу страницата.
Задайте пълния път на pom.xml, цел като „тест“ и запази конфигурацията.
След като приключите горните стъпки, щракнете върху Изградете сега връзка, която присъства в левия панел на проекта Maven.
как да използвам торент файл след изтегляне -
Компилацията ще бъде изпълнена и съответната файл testing.xml (което е споменато над pom.xml) ще бъде изпълнено.
Ето изхода, който се показва на конзолата.
Конзолен изход
(ИНФО) T E S T S
(ИНФО) ——————————————————-
(ИНФО) Стартиране на TestSuite
Започва нов сценарий
Стартиране на ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) на порт 27348
Разрешени са само локални връзки.
log4j: ПРЕДУПРЕЖДЕНИЕ Не могат да бъдат намерени приложения за регистратора
(org.apache.http.client.protocol.RequestAddCookies).
log4j: ПРЕДУПРЕЖДЕНИЕ Моля, инициализирайте системата log4j правилно.
log4j: ПРЕДУПРЕЖДЕНИЕ Вижте http://logging.apache.org/log4j/1.2/faq.html#noconfig за повече информация.
25 ноември 2017 г. 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
ИНФО: Открит диалект: OSS
https://avatars3.githubusercontent.com/u/31874017?s=400&u=c41bfae0fa6b9325fb4f209885b51bd02c7d897d&v=4
https://avatars3.githubusercontent.com/u/31874017?s=400&u=c41bfae0fa6b9325fb4f209885b51bd02c7d897d&v=4
Сценарият завършва
Започва нов сценарий
Стартиране на ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) на порт 24866
Разрешени са само локални връзки.
25 ноември 2017 г. 12:57:45 ч. Org.openqa.selenium.remote.ProtocolHandshake createSession
ИНФО: Открит диалект: OSS
Сценарият завършва
2 сценария (2 преминали)
14 стъпки (14 преминали)
2м2.677с
примери за извличане на данни в реалния свят
(INFO) Изпълнени тестове: 1, неуспехи: 0, грешки: 0, пропуснати: 0, изминало време: 128,513 s - в TestSuite
(ИНФОРМАЦИЯ)
(INFO) Резултати:
(ИНФОРМАЦИЯ)
(INFO) Изпълнени тестове: 1, неуспехи: 0, грешки: 0, пропуснати: 0
(ИНФОРМАЦИЯ)
(JENKINS) Записване на резултатите от теста
(ИНФО) ————————————————————————
(ИНФО) СТРОИТЕЛЕН УСПЕХ
(ИНФО) ————————————————————————
(ИНФО) Общо време: 02:51 мин
(INFO) Завършено в: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Окончателна памет: 12M / 28M
(ИНФО) ————————————————————————
Изчаква Дженкинс да завърши събирането на данни
(JENKINS) Архивиране на D: cucumberFinal multiple pom.xml в com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
канал спря
Завършен: УСПЕХ
Краставица Дженкинс Доклад
Краставица Excel
Автоматизация на тестови скриптове
Трябва да се направи следната конфигурация.
Стратегия за проектиране на тестове:
- Създайте помощна програма за четец на Excel, която има способността да приема „име на колона“ на Excel като входен параметър, а в замяна ще даде „стойност на колоната“ на Excel за този „колона“.
- Създайте файл с характеристики, който има име на колона на Excel, посочено в двойни кавички във всяка от стъпките му.
- Сега създайте съответен Stepdef файл за файла на характеристиките и използвайте параметрите (arg1, arg2 и т.н .. генерирани, ако сме посочили думата в двойни кавички над файла с характеристиките) като вход за четеца на Excel (създаден в стъпка 1).
- Сега имаме стойността на колоната на Excel, която може да се използва като вход към файла Stepdef.
- Изпълнете файла с характеристиките, както е създаден в горната стъпка.
Файл на характеристиките
Особеност: Заглавие на вашата функция
Искам да използвам този шаблон за моя файл с функции
Заден план:
Като се има предвид, че съм в Gmail и имам достъп до екран „екран“.
Като се има предвид, аз посочвам Потребителско име като „Потребителско име“ и Парола като „Парола“.
Като кликнете върху бутона Вход.
Сценарий: Създайте ново съобщение от таблицата с данни
Когато имам достъп до изскачащия прозорец „изскачащ”.
И посочвам като „До“ и предмет като „Тема“ подробности и кликвам върху бутона за изпращане.
Тогава трябва да виждам съобщението за успех.
Excel файл
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 Файл Stepdef
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'); } } }
POM файл
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
След като горната конфигурация приключи, просто изпълнете файла с характеристиките.
Наблюдение
Файлът Stepdef взема данните от Excel листа и изпълнява тестовите стъпки, споменати във файла с характеристиките.
Ето резултата от изпълнението на тестовия случай, както е споменато над конзолата Eclipse.

Заключение
BDD е бъдещето на автоматизацията на тестовете, тъй като позволява на всички заинтересовани страни да участват в създаването на тестовия скрипт, особено за да предоставят своите данни за файла на характеристиките.
Краставицата е широко използван BDD инструмент и има много интеграции и функции, които тепърва ще бъдат внедрени в автоматизацията на тестовете. Има няколко групи / общности, които активно работят по Краставицата.
Ако сте добре запознати с Краставицата, тогава можете да работите с всеки BDD инструмент, наличен на пазара, тъй като повечето инструменти работят подобно на Краставицата.
Надяваме се, че сте научили за Краставицата с Дженкинс чрез този задълбочен урок.
Препоръчително четене
- Урок за Python DateTime с примери
- Урок за краставици селен: Интеграция на краставица Java Selenium WebDriver
- Урок за скриптове на Unix Shell с примери
- Намиране на елемент от селен чрез урок с текст с примери
- Java 'this' Ключова дума: Урок с примери за кодове
- Урок за BDD и краставици с примери
- C # Урок за обработка на изключения с примери за кодове
- Автоматизирано тестване с помощта на инструмент за краставици и селен - Урок № 30