how run cucumber with jenkins
Questo tutorial fornisce una panoramica completa del cetriolo con Jenkins e un foglio Excel per spiegare l'integrazione del cetriolo Jenkins :
In questo tutorial, discuteremo di Cetriolo con Jenkins e del foglio Excel. Speriamo che questo tutorial ti sia utile.
Cosa imparerai:
- Cetriolo Con Jenkins
- Configurazione Jenkins
- Rapporto di Jenkins del cetriolo
- Cetriolo Excel
- Osservazione
- Conclusione
- Lettura consigliata
Cetriolo Con Jenkins
Test Script Automation
È necessario eseguire la seguente configurazione.
File delle caratteristiche
Caratteristica:
Come utente
Voglio poter aggiungere nuovi client nel sistema.
Così posso aggiungere i dati contabili per quel cliente.
Sfondo:
Dato che sono sulla home page di Github.
Quando si specifica il nome utente come 'xxxxxxxxxx' e la password come 'xxxxxxx'.
E fare clic sul pulsante Accedi.
@Fumo
Scenario: Modifica del profilo.
Dato che faccio clic sull'opzione Il tuo profilo.
Quando clicco sul pulsante Modifica profilo.
E ha caricato una nuova foto.
Allora dovrei vedere la nuova immagine del profilo.
@Regression @Everytime
Scenario: Crea una nuova sintesi.
Dato che faccio clic sull'opzione I tuoi Gists.
Quando fornisco il nome del file, la descrizione.
E fai clic su Crea metodo gist pubblico.
Allora dovrei vedere il nuovo succo.
File Stepdef
come eseguire i file .bin
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 } }
File TestNG
File 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{ }
Configurazione Jenkins
Accesso URL di Jenkins .
Vai a Gestisci Jenkins> Gestisci plugin .
Installa i seguenti plugin:
- Plugin Risultati test cetriolo
- Rapporti sui cetrioli
- Plugin perf per cetrioli
Assicurati che durante l'installazione tutti i plug-in dipendenti siano installati correttamente, altrimenti i plug-in di report potrebbero non funzionare.
Ora vai a Gestisci -> Configurazione strumento globale.
Impostare il percorso per JDK.
Impostare il percorso per Maven.
Creare un nuovo oggetto come progetto Maven.
Una volta creato il lavoro, fare clic sul collegamento di configurazione presente nel pannello di sinistra.
Scorri verso il basso la pagina.
Imposta il percorso completo di pom.xml, obiettivo come 'test' e Salva la configurazione.
Una volta completati i passaggi precedenti, fare clic su Costruisci ora collegamento che è presente nel pannello di sinistra del progetto Maven.
qual è il miglior ide python
Verrà eseguita la build e il corrispondente file testing.xml (che è menzionato nel pom.xml) verrà eseguito.
Ecco l'output che viene visualizzato sulla console.
Uscita console
(INFO) T E S T S
(INFORMAZIONI) -------------------
(INFO) Esecuzione di TestSuite
Inizia un nuovo scenario
Avvio di ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) sulla porta 27348
Sono consentite solo connessioni locali.
log4j: WARN Impossibile trovare appendici per logger
(org.apache.http.client.protocol.RequestAddCookies).
log4j: WARN Si prega di inizializzare correttamente il sistema log4j.
log4j: WARN Vedi http://logging.apache.org/log4j/1.2/faq.html#noconfig per maggiori informazioni.
25 novembre 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: dialetto rilevato: 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
Lo scenario finisce
Inizia un nuovo scenario
Avvio di ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) sulla porta 24866
Sono consentite solo connessioni locali.
25 novembre 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: dialetto rilevato: OSS
Lo scenario finisce
2 scenari (2 passati)
14 passaggi (14 passati)
2m2.677s
unisci ordinamento ricorsivo c ++
(INFO) Test eseguiti: 1, Errori: 0, Errori: 0, Saltati: 0, Tempo trascorso: 128,513 s - in TestSuite
(INFORMAZIONI)
(INFO) Risultati:
(INFORMAZIONI)
(INFO) Test eseguiti: 1, Errori: 0, Errori: 0, Ignorato: 0
(INFORMAZIONI)
(JENKINS) Registrazione dei risultati del test
(INFORMAZIONI) ------------------------
(INFO) COSTRUISCI IL SUCCESSO
(INFORMAZIONI) ------------------------
(INFO) Tempo totale: 02:51 min
(INFO) Terminato alle: 25-11-2017T12: 58: 45 + 05: 30
(INFO) Memoria finale: 12M / 28M
(INFORMAZIONI) ------------------------
In attesa che Jenkins finisca di raccogliere dati
(JENKINS) Archiviazione D: cucumberFinal multiple pom.xml in com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
canale interrotto
Finito: SUCCESSO
Rapporto di Jenkins del cetriolo
Cetriolo Excel
Test Script Automation
È necessario eseguire la seguente configurazione.
Strategia di progettazione del test:
- Crea un'utilità di lettura Excel, che ha la capacità di prendere il 'nome colonna' di un foglio Excel come parametro di input e, in cambio, fornirà il 'valore colonna' del foglio Excel per quel 'nome colonna'.
- Crea un file di caratteristiche, che ha il nome colonna del foglio Excel specificato tra virgolette doppie in uno qualsiasi dei suoi passaggi.
- Ora crea un file Stepdef corrispondente per il file delle caratteristiche e usa i parametri (arg1, arg2 ecc. Generati se abbiamo specificato la parola tra virgolette sopra il file delle caratteristiche) come input per il lettore Excel (creato nel passaggio1).
- Ora abbiamo il valore della colonna del foglio Excel che può essere utilizzato come input per il file Stepdef.
- Eseguire il file delle caratteristiche come creato nel passaggio precedente.
File delle caratteristiche
Caratteristica: Titolo della tua caratteristica
Voglio usare questo modello per il mio file di caratteristiche
Sfondo:
Dato che sono su Gmail e sto accedendo alla schermata 'schermata'.
Dato che ho specificato Username come 'Username' e Password come 'Password'.
Dato fare clic sul pulsante Accedi.
Scenario: Crea nuovo messaggio dalla tabella dati
Quando accedo al popup 'popup'.
Specifico come 'A' e oggetto come dettagli 'Oggetto' e faccio clic sul pulsante di invio.
Allora dovrei vedere il messaggio di successo.
file 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 File 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'); } } }
File 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
Una volta completata la configurazione di cui sopra, è sufficiente eseguire il file delle caratteristiche.
Osservazione
Il file Stepdef prende i dati dal foglio Excel ed esegue i passaggi di test menzionati nel file delle caratteristiche.
Ecco il risultato dell'esecuzione del test case come menzionato sulla console Eclipse.

Conclusione
BDD è il futuro dell'automazione dei test in quanto consente a tutte le parti interessate di partecipare alla creazione dello script di test, in particolare per fornire i propri input sul file Feature.
Cucumber è uno strumento BDD ampiamente utilizzato e ha molte integrazioni e funzionalità che devono ancora essere implementate nell'automazione dei test. Ci sono diversi gruppi / comunità che lavorano attivamente su Cucumber.
Se sei esperto con Cucumber, puoi lavorare su qualsiasi strumento BDD disponibile sul mercato poiché la maggior parte degli strumenti funziona in modo simile a Cucumber.
Ci auguriamo che tu abbia imparato a conoscere Cucumber with Jenkins attraverso questo tutorial approfondito.
Lettura consigliata
- Tutorial Python DateTime con esempi
- Esercitazione sul selenio di cetriolo: integrazione con WebDriver di selenio Java di cetriolo
- Tutorial sullo scripting della shell di Unix con esempi
- Selenio Trova elemento per tutorial di testo con esempi
- Parola chiave Java 'questo': tutorial con esempi di codice
- Tutorial BDD e cetriolo con esempi
- Esercitazione sulla gestione delle eccezioni C # con esempi di codice
- Test di automazione utilizzando lo strumento Cucumber e il selenio - Tutorial sul selenio # 30