how run cucumber with jenkins
Aquest tutorial proporciona una visió general completa de Cogombre amb full de Jenkins i Excel per explicar la integració de Cogombre Jenkins :
En aquest tutorial, parlarem del cogombre amb el full Jenkins i Excel. Esperem que aquest tutorial us sigui útil.
Què aprendreu:
- Cogombre Amb Jenkins
- Configuració de Jenkins
- Informe Jenkins de Cogombre
- Cogombre Excel
- Observació
- Conclusió
- Lectura recomanada
Cogombre Amb Jenkins
Automatització de scripts de prova
Cal fer la configuració següent.
Fitxer de funcions
Característica:
Com a usuari
Vull poder afegir nous clients al sistema.
Per poder afegir dades comptables per a aquest client.
Antecedents:
Donat, estic a la pàgina principal de Github.
Quan especifiqueu el nom d'usuari com a 'xxxxxxxxxx' i la contrasenya com a 'xxxxxxx'.
I feu clic al botó Iniciar sessió.
@Fum
Escenari: S'està editant el perfil.
Donat, faig clic a l'opció El vostre perfil.
Quan faig clic al botó Edita perfil.
I ha penjat una imatge nova.
Llavors hauria de veure una foto de perfil nova.
@Regression @Everytime
Escenari: Crea un nou resum.
Tenint en compte que faig clic a l'opció Your Gists.
Quan proporciono el nom del fitxer, la descripció.
I feu clic a Crea un mètode bàsic públic.
Llavors hauria d’estar veient el nou concepte.
Fitxer Stepdef
com convertir un vídeo de youtube en un fitxer wav
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 } }
Fitxer TestNG
Fitxer 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{ }
Configuració de Jenkins
Accés URL de Jenkins .
Anar a Gestiona Jenkins> Gestiona el connector .
Instal·leu els connectors següents:
- Complement de resultats de proves de cogombre
- Informes de cogombre
- Complement de perfum de cogombre
Assegureu-vos que, durant la instal·lació, tots els connectors dependents estiguin instal·lats correctament, o bé és possible que els connectors d'informes no funcionin.
Ara aneu a Gestiona -> Configuració d'eines globals.
Estableix el fitxer camí per a JDK.
Estableix el fitxer camí per Maven.
Crea un element nou com a Projecte Maven.
Un cop creat el treball, feu clic a l'enllaç de configuració que hi ha al tauler esquerre.
Desplaça cap avall la pàgina.
Definiu el camí complet de pom.xml, l'objectiu com a 'prova' i guardar la configuració.
Un cop fets els passos anteriors, feu clic a Construeix ara enllaç que es troba al tauler esquerre del Projecte Maven.
La compilació s'executarà i la corresponent fitxer testing.xml (que s'esmenta a pom.xml) s'executarà.
preguntes i respostes d'entrevistes manuals per a experimentats
Aquí teniu la sortida que es mostra a la consola.
Sortida de la consola
(INFO) T E S T S
(INFO) ——————————————————-
(INFO) Execució de TestSuite
Comença un nou escenari
S’inicia ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) al port 27348
Només es permeten les connexions locals.
log4j: ADVERTÈNCIA No s'ha pogut trobar cap aplicador per al logger
(org.apache.http.client.protocol.RequestAddCookies).
log4j: AVÍS Si us plau, inicialitzeu el sistema log4j correctament.
log4j: ATENCIÓ Consulteu http://logging.apache.org/log4j/1.2/faq.html#noconfig per obtenir més informació.
25 de novembre de 2017 a les 12:56:41 PM org.openqa.selenium.remote.ProtocolHandhake createSession
INFO: Dialecte detectat: 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
Finalitza l'escenari
Comença un nou escenari
S’inicia ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) al port 24866
Només es permeten les connexions locals.
25 de novembre de 2017 a les 12:57:45 PM org.openqa.selenium.remote.ProtocolHandhake createSession
INFO: Dialecte detectat: OSS
Finalitza l'escenari
2 escenaris (2 aprovats)
14 passos (14 aprovats)
2m2.677s
matriu de classificació de bombolles c ++
(INFO) Execució de les proves: 1, Fallades: 0, Errors: 0, Saltat: 0, Temps transcorregut: 128.513 s - a TestSuite
(INFO)
(INFO) Resultats:
(INFO)
(INFO) Execució de les proves: 1, Fallades: 0, Errors: 0, Omitits: 0
(INFO)
(JENKINS) Gravació dels resultats de les proves
(INFO) —————————————————————————
(INFORMACIÓ) CONSTRUIR ÈXIT
(INFO) —————————————————————————
(INFO) Temps total: 02:51 min
(INFO) Finalitzat a: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Memòria final: 12M / 28M
(INFO) —————————————————————————
Esperant que Jenkins acabi de recopilar dades
(JENKINS) Arxiu D: cucumberFinal multiple pom.xml a com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
canal aturat
Acabat: ÈXIT
Informe Jenkins de Cogombre
Cogombre Excel
Automatització de scripts de prova
Cal fer la configuració següent.
Estratègia de disseny de proves:
- Creeu una utilitat de lector Excel, que tingui la possibilitat de prendre el 'nom de columna' d'un full Excel com a paràmetre d'entrada i, a canvi, donarà el 'valor de columna' del full Excel per a aquest 'columnanme'.
- Creeu un fitxer de funcions que tingui el nom de columna del full Excel especificat entre cometes dobles en qualsevol dels seus passos.
- Ara creeu un fitxer Stepdef corresponent per al fitxer de característiques i utilitzeu els paràmetres (arg1, arg2, etc., generats si especifiquem la paraula entre cometes sobre el fitxer de funcions) com a entrada per al lector Excel (creat al pas 1).
- Ara tenim el valor de columna del full Excel que es pot utilitzar com a entrada al fitxer Stepdef.
- Executeu el fitxer de funcions tal com es va crear al pas anterior.
Fitxer de funcions
Característica: Títol de la funció
Vull utilitzar aquesta plantilla per al meu fitxer de funcions
Antecedents:
Tenint en compte que estic a Gmail i accedeixo a la pantalla 'pantalla'.
Donat especifico el nom d'usuari com a 'Nom d'usuari' i la contrasenya com a 'contrasenya'.
Donat Feu clic al botó Iniciar sessió.
Escenari: Creeu un missatge nou a partir de la taula de dades
Quan accediu a la finestra emergent 'popup'.
I especifico com a 'A' i l'assumpte com a 'Assumpte' i faig clic al botó d'enviament.
Llavors hauria de veure el missatge d’èxit.
Fitxer 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 Fitxer 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'); } } }
Arxiu 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
Un cop finalitzada la configuració anterior, només cal que executeu el fitxer de funcions.
Observació
El fitxer Stepdef pren les dades del full Excel i executa els passos de prova esmentats al fitxer de funcions.
Aquí teniu el resultat de l’execució del cas de prova, tal com s’esmenta a la consola Eclipse.

Conclusió
BDD és el futur de l'automatització de proves, ja que permet a tots els grups d'interès participar en la creació de scripts de prova, especialment per proporcionar les seves aportacions a través del fitxer Feature.
El cogombre és una eina BDD àmpliament utilitzada i té moltes integracions i funcions que encara no s'han implementat en l'automatització de proves. Hi ha diversos grups / comunitats que treballen activament a Cogombre.
Si coneixeu molt bé el Cogombre, podeu treballar en qualsevol eina BDD disponible al mercat, ja que la majoria de les eines funcionen de manera similar a Cogombre.
Esperem que hagueu après sobre Cogombre amb Jenkins a través d’aquest tutorial en profunditat.
Lectura recomanada
- Tutorial de Python DateTime amb exemples
- Tutorial de Cogombre Selenium: Integració de Cogombre Java Selenium WebDriver
- Tutorial de script Unix Shell amb exemples
- Tutorial Selenium Find Element By Text amb exemples
- Paraula clau 'aquesta' de Java: tutorial amb exemples de codi
- Tutorial de BDD i cogombre amb exemples
- Tutorial de maneig d'excepcions C # amb exemples de codi
- Proves d'automatització mitjançant Eina de cogombre i Selenium - Tutorial Selenium # 30