how run cucumber with jenkins
Denne veiledningen gir en komplett oversikt over agurk med Jenkins og Excel-ark for å forklare agurk Jenkins-integrasjonen :
I denne opplæringen vil vi diskutere Agurk med Jenkins og Excel-ark. Vi håper denne veiledningen vil være nyttig for deg.
Hva du vil lære:
- Agurk med Jenkins
- Jenkins-konfigurasjon
- Agurk Jenkins-rapport
- Agurk Excel
- Observasjon
- Konklusjon
- Anbefalt lesing
Agurk med Jenkins
Test skriptautomatisering
Følgende konfigurasjon må gjøres.
Funksjonsfil
Trekk:
Som bruker
Jeg vil kunne legge til nye klienter i systemet.
Slik at jeg kan legge til regnskapsdata for den klienten.
Bakgrunn:
Gitt at jeg er på Github-hjemmesiden.
Når jeg angir brukernavn som “xxxxxxxxxx” og passord som “xxxxxxx”.
Og klikk på Logg på-knappen.
@Røyk
Scenario: Redigering av profilen.
Gitt jeg klikker på alternativet Profil.
Når jeg klikker på rediger profil-knappen.
Og lastet opp et nytt bilde.
Da burde jeg se et nytt profilbilde.
@Regresjon @Hverytime
Scenario: Opprett ny kjerne.
Gitt jeg klikker på Your Gists-alternativet.
Når jeg oppgir filnavn, beskrivelse.
Og klikk på Create public gist method.
Da burde jeg se den nye kjernen.
Stepdef-fil
hvordan åpne en kjørbar jar-fil
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 File
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-konfigurasjon
Adgang Jenkins URL .
Gå til Administrer Jenkins> Administrer programtillegg .
Installer følgende plugins:
- Agurk Test Resultater plugin
- Agurkrapporter
- Agurk perf plugin
hvilket av følgende er en fase i sdlc?
Forsikre deg om at når du installerer alle avhengige programtillegg er vellykket installert, ellers vil rapporteringsprogramtilleggene ikke fungere.
Nå naviger til Administrer -> Global Tool Configuration.
Sett sti for JDK.
Sett sti for Maven.
Lage en ny gjenstand som et Maven-prosjekt.
Når jobben er opprettet, klikker du på konfigureringskoblingen til venstre i panelet til venstre.
Bla nedover siden.
Sett hele banen til pom.xml, mål som 'test' og lagre konfigurasjonen.
Når trinnene ovenfor er gjort, klikker du på Bygg nå lenke som er tilstede i panelet til venstre for Maven Project.
Byggingen vil bli utført og tilsvarende testing.xml-fil (som er nevnt over pom.xml) blir utført.
Her er utdataene som vises på konsollen.
Konsollutgang
[INFO] T E S T S
[INFO] ————————————————————-
[INFO] Kjører TestSuite
Nytt scenario begynner
Starte ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) på port 27348
Bare lokale forbindelser er tillatt.
log4j: WARN Ingen appenders ble funnet for logger
(org.apache.http.client.protocol.RequestAddCookies).
log4j: WARN Vennligst initialiser log4j-systemet riktig.
log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig for mer info.
25. nov 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Oppdaget 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
Scenario avsluttes
Nytt scenario begynner
Starte ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) på port 24866
Bare lokale forbindelser er tillatt.
25. nov 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Oppdaget dialekt: OSS
Scenario avsluttes
2 scenarier (2 bestått)
14 trinn (14 bestått)
2m2.677s
c ++ boblesorteringsmatrise
[INFO] Testkjøring: 1, Feil: 0, Feil: 0, Hoppet over: 0, Forløpt tid: 128.513 s - i TestSuite
[INFO]
[INFO] Resultater:
[INFO]
[INFO] Testkjøring: 1, Feil: 0, Feil: 0, Hoppet over: 0
[INFO]
[JENKINS] Registrerer testresultater
[INFO] ——————————————————————————
[INFO] BYGG SUKSESS
[INFO] ——————————————————————————
[INFO] Total time: 02:51 min
[INFO] Ferdig kl: 2017-11-25T12: 58: 45 + 05: 30
[INFO] Endelig minne: 12M / 28M
[INFO] ——————————————————————————
Venter på at Jenkins skal samle inn data
[JENKINS] Arkivering D: cucumberFinal multiple pom.xml to com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
kanalen stoppet
Ferdig: SUKSESS
Agurk Jenkins-rapport
Agurk Excel
Test skriptautomatisering
Følgende konfigurasjon må gjøres.
Testdesignstrategi:
- Lag et Excel-leserverktøy, som har muligheten til å ta et excel-arks ‘kolonnenavn’ som inndataparameter, og til gjengjeld vil det gi excel-arkets ‘columnvalue’ for det ‘columnanme’.
- Opprett en funksjonsfil som har excel-arkets kolonnenavn spesifisert i dobbelt anførselstegn i noen av trinnene.
- Opprett nå en tilsvarende Stepdef-fil for funksjonsfilen og bruk parametrene (arg1, arg2 etc ..generert hvis vi spesifiserte ordet i dobbelt sitat over funksjonsfilen) som input for excel-leseren (opprettet i trinn 1).
- Nå har vi Excel-arkets kolonneverdi som kan brukes som en inngang til Stepdef-filen.
- Utfør funksjonsfilen som opprettet i trinnet ovenfor.
Funksjonsfil
Trekk: Tittel på funksjonen din
Jeg vil bruke denne malen for funksjonsfilen min
Bakgrunn:
Gitt at jeg er på Gmail og får tilgang til skjermens 'skjerm'.
Gitt jeg spesifiserer brukernavn som 'brukernavn' og passord som 'passord'.
Gitt Klikk på Logg på-knappen.
Scenario: Opprett ny melding fra datatabellen
Når jeg åpner popup-popupen.
Og jeg spesifiserer som 'Til' og emne som 'Emne' detaljer og klikker på send-knappen.
Da burde jeg se suksessmeldingen.
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 konfigurasjonen ovenfor er fullført, er det bare å utføre funksjonsfilen.
Observasjon
Stepdef-filen tar dataene fra excel-arket og utfører teststrinnene som er nevnt i funksjonsfilen.
Her er testutførelsesresultatet som nevnt over Eclipse-konsollen.
Konklusjon
BDD er fremtiden for testautomatisering, ettersom den gjør det mulig for alle interessenter å delta i opprettelsen av testskript, spesielt for å gi sine innspill over funksjonsfilen.
Agurk er et mye brukt BDD-verktøy, og det har mange integrasjoner og funksjoner som ennå ikke er implementert i testautomatisering. Det er flere grupper / lokalsamfunn som jobber aktivt med agurk.
Hvis du er godt kjent med agurk, kan du jobbe med hvilket som helst BDD-verktøy som er tilgjengelig i markedet, ettersom de fleste verktøyene fungerer på samme måte som agurk.
Vi håper du lærte om agurk med Jenkins gjennom denne grundige veiledningen.
Anbefalt lesing
- 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økkelord: Opplæring med kodeeksempler
- BDD og agurkopplæring med eksempler
- C # Exception Handling Tutorial med kodeeksempler
- Automatiseringstesting ved hjelp av agurkverktøy og selen - Selenveiledning nr. 30