how run cucumber with jenkins
Denne vejledning giver en komplet oversigt over agurk med Jenkins og Excel ark for at forklare agurk Jenkins integration :
I denne vejledning diskuterer vi Agurk med Jenkins og Excel-ark. Vi håber, at denne vejledning vil være nyttigt for dig.
Hvad du vil lære:
- Agurk med Jenkins
- Jenkins-konfiguration
- Agurk Jenkins-rapport
- Agurk Excel
- Observation
- Konklusion
- Anbefalet læsning
Agurk med Jenkins
Test scriptautomatisering
Følgende konfiguration skal udføres.
Funktionsfil
Funktion:
Som bruger
Jeg vil være i stand til at tilføje nye klienter i systemet.
Så jeg kan tilføje regnskabsdata for den klient.
Baggrund:
Da jeg er på Github-hjemmesiden.
Når jeg angiver brugernavn som “xxxxxxxxxx” og adgangskode som “xxxxxxx”.
Og klik på knappen Log ind.
@Røg
Scenarie: Redigering af profilen.
Da jeg klikker på din profilindstilling.
Når jeg klikker på knappen Rediger profil.
Og uploadet et nyt billede.
Så skulle jeg se et nyt profilbillede.
@Regression @Everytime
Scenarie: Opret ny kerne.
Da jeg klikker på indstillingen Your Gists.
Når jeg angiver filnavnet, beskrivelsen.
Og klik på Opret offentlig kernemetode.
Så skulle jeg se den nye kerne.
Stepdef-fil
hvad er operativsystemet i computeren
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-fil
Runner-fil
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{ } Jenkins-konfiguration
Adgang Jenkins URL .
Gå til Administrer Jenkins> Administrer plugin .
Installer følgende plugins:
- Agurk testresultater plugin
- Agurkrapporter
- Agurk perf plugin



Sørg for, at alle de afhængige plugins er installeret, når de installeres, ellers fungerer rapporterings plugins muligvis ikke.
hvilket er bedre linux eller windows
Naviger nu til Administrer -> Global værktøjskonfiguration.

Indstil sti til JDK.
Indstil sti til Maven.

Lave en nyt emne som et Maven-projekt.


Når jobbet er oprettet, skal du klikke på konfigurationslinket til stede i panelet til venstre.
Rul ned siden.

Indstil den fulde sti for pom.xml, mål som 'test' og Gemme konfigurationen.

Når ovenstående trin er udført, skal du klikke på Byg nu link, der er til stede i det venstre panel af Maven Project.

Bygningen udføres og den tilsvarende testing.xml-fil (som er nævnt over pom.xml) bliver udført.
Her er det output, der vises på konsollen.
Konsol output
(INFO) T E S T S
(INFO) ———————————————————-
(INFO) Kører TestSuite
Nyt scenario begynder
Start af ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) på port 27348
Kun lokale forbindelser er tilladt.
log4j: WARN Ingen appenders kunne findes til logger
(org.apache.http.client.protocol.RequestAddCookies).
log4j: WARN Initialiser log4j-systemet korrekt.
log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig for mere info.
25 nov 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Registreret dialekt: 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
Scenariet slutter
Nyt scenario begynder
Start af ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) på port 24866
Kun lokale forbindelser er tilladt.
25. nov 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Registreret dialekt: OSS
Scenariet slutter
2 scenarier (2 bestået)
14 trin (14 bestået)
2m2.677s
c ++ tegn til int
(INFO) Testkørsel: 1, Fejl: 0, Fejl: 0, Springet over: 0, Forløbet tid: 128.513 s - i TestSuite
(INFO)
(INFO) Resultater:
(INFO)
(INFO) Testkørsel: 1, Fejl: 0, Fejl: 0, Springet over: 0
(INFO)
(JENKINS) Optagelse af testresultater
(INFO) —————————————————————————
(INFO) BYGG SUCCES
(INFO) —————————————————————————
(INFO) Samlet tid: 02:51 min
(INFO) Afsluttet: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Endelig hukommelse: 12M / 28M
(INFO) —————————————————————————
Venter på, at Jenkins er færdig med at indsamle data
(JENKINS) Arkivering D: agurkFinal multiple pom.xml til com / agurk.exempel / 0.0.1-SNAPSHOT / agurk.exempel-0.0.1-SNAPSHOT.pom
kanal stoppet
Færdig: SUCCES
Agurk Jenkins-rapport

Agurk Excel
Test scriptautomatisering
Følgende konfiguration skal udføres.
Testdesignstrategi:
- Opret et excel-læserhjælpeprogram, der har evnen til at tage et excel-arks 'kolonnenavn' som inputparameter, og til gengæld giver det excel-arket 'columnvalue' for det 'columnanme'.
- Opret en funktionsfil, der har excel-arkets kolonnenavn angivet i dobbelt anførselstegn i et hvilket som helst af dens trin.
- Opret nu en tilsvarende Stepdef-fil til funktionsfilen og brug parametrene (arg1, arg2 osv .. genereret, hvis vi specificerede ordet i dobbelt citat over funktionsfilen) som input til excel-læseren (oprettet i trin 1).
- Nu har vi Excel-arkets søjleværdi, som kan bruges som input til Stepdef-filen.
- Udfør funktionsfilen som oprettet i ovenstående trin.
Funktionsfil
Funktion: Titel på din funktion
Jeg vil bruge denne skabelon til min funktionsfil
Baggrund:
I betragtning af at jeg er på Gmail og har adgang til skærmens 'skærm'.
I givet fald angiver jeg brugernavn som “brugernavn” og adgangskode som “adgangskode”.
Givet Klik på knappen Log ind.
Scenarie: Opret ny besked fra datatabellen
Når jeg åbner pop op-pop op.
Og jeg angiver som 'Til' og emne som 'Emne' detaljer og klikker på knappen Send.
Så skulle jeg se succesmeddelelsen.
Excel-fil
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-fil
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-fil
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 Når ovenstående konfiguration er afsluttet, skal du bare udføre funktionsfilen.
Observation
Stepdef-filen tager dataene fra excel-arket og udfører de testtrin, der er nævnt i funktionsfilen.
Her er testsekvensudførelsesresultatet som nævnt over Eclipse-konsollen.

Konklusion
BDD er fremtiden for testautomatisering, da den giver alle interessenter mulighed for at deltage i oprettelsen af testscript, især for at levere deres input over Feature-filen.
Agurk er et meget anvendt BDD-værktøj, og det har mange integrationer og funktioner, som endnu ikke skal implementeres i testautomatisering. Der er flere grupper / samfund, der aktivt arbejder på agurk.
Hvis du er fortrolig med agurk, kan du arbejde på ethvert BDD-værktøj, der er tilgængeligt på markedet, da de fleste værktøjer fungerer på samme måde som agurk.
Vi håber, du har lært om agurk med Jenkins gennem denne dybdegående vejledning.
Anbefalet læsning
- Python DateTime-tutorial med eksempler
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Unix Shell Scripting Tutorial med eksempler
- Selen Find Element by Text Tutorial med eksempler
- Java 'dette' Nøgleord: Vejledning med kodeeksempler
- BDD og agurk tutorial med eksempler
- C # Exception Handling Tutorial med kodeeksempler
- Automatiseringstest ved hjælp af agurkværktøj og selen - Selen Tutorial # 30
