how run cucumber with jenkins
Acest tutorial oferă o imagine de ansamblu completă a Castravetelor cu foaia Jenkins și Excel pentru a explica integrarea Cetățenilor Jenkins :
În acest tutorial, vom discuta despre Castravete cu foaia Jenkins și Excel. Sperăm că acest tutorial vă va fi de ajutor.
Ce veți învăța:
- Castravete Cu Jenkins
- Configurare Jenkins
- Raportul Castravete Jenkins
- Castravete Excel
- Observare
- Concluzie
- Lectură recomandată
Castravete Cu Jenkins
Testarea automatizării scripturilor
Următoarea configurație trebuie făcută.
Fișier caracteristică
Caracteristică:
Ca utilizator
Vreau să pot adăuga noi clienți în sistem.
Pentru a putea adăuga date contabile pentru clientul respectiv.
Fundal:
Având în vedere că sunt pe pagina principală Github.
Când specific numele de utilizator ca „xxxxxxxxxx” și Parola ca „xxxxxxx”.
Și faceți clic pe butonul Conectare.
@Fum
Scenariu: Editarea profilului.
Având în vedere, dau clic pe opțiunea Profilul tău.
Când fac clic pe butonul Editați profilul.
Și am încărcat o nouă imagine.
Atunci ar trebui să văd o nouă imagine de profil.
@Regresie @Everytime
Scenariu: Creați o esență nouă.
Având în vedere, dau clic pe opțiunea Your Gists.
Când furnizez numele fișierului, descrierea.
Și faceți clic pe Creare metodă publică esențială.
Atunci ar trebui să văd noua esență.
Fișier Stepdef
cel mai bun spion pentru telefonul mobil pentru Android
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 } }
Fișier TestNG
Fișier 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{ }
Configurare Jenkins
Acces URL-ul Jenkins .
Mergi la Gestionați Jenkins> Gestionați pluginul .
Instalați următoarele pluginuri:
- Pluginul Rezultatelor Testului de Castravete
- Rapoarte despre castraveți
- Plugin pentru castraveți perf
Asigurați-vă că, în timp ce instalați, toate pluginurile dependente sunt instalate cu succes, altfel este posibil ca pluginurile de raportare să nu funcționeze.
Acum navigați la Gestionați -> Configurarea instrumentului global.
Seteaza cale pentru JDK.
Seteaza calea pentru Maven.
Creeaza o element nou ca proiect Maven.
algoritm de sortare rapidă c ++
Odată ce jobul a fost creat, faceți clic pe linkul de configurare prezent în panoul din stânga.
Deruleaza in jos pagina.
Setați calea completă a pom.xml, obiectivul ca „test” și Salvați configurația.
Odată ce pașii de mai sus sunt finalizați, faceți clic pe Construiți acum link care este prezent în panoul din stânga al Proiectului Maven.
Construirea va fi executată și cea corespunzătoare fișier testing.xml (care este menționat peste pom.xml) va fi executat.
Iată ieșirea care este afișată pe Consolă.
Ieșire consolă
(INFO) T E S T S
(INFO) ——————————————————-
(INFO) Rularea TestSuite
Începe un nou scenariu
Pornirea ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) pe portul 27348
Sunt permise doar conexiunile locale.
log4j: AVERTISMENT Nu s-au putut găsi anexe pentru logger
(org.apache.http.client.protocol.RequestAddCookies).
log4j: AVERTISMENT Vă rugăm să inițializați sistemul log4j corect.
log4j: AVERTISMENT Consultați http://logging.apache.org/log4j/1.2/faq.html#noconfig pentru mai multe informații.
25 noiembrie 2017 12:56:41 PM org.openqa.selenium.remote.ProtocolHandhake createSession
INFO: Dialect 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
Scenariul se încheie
Începe un nou scenariu
Pornirea ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) pe portul 24866
Sunt permise doar conexiunile locale.
25 noiembrie 2017 12:57:45 PM org.openqa.selenium.remote.ProtocolHandhake createSession
INFO: Dialect detectat: OSS
Scenariul se încheie
2 scenarii (2 trecute)
14 pași (14 trecuți)
2m2.677s
care este cel mai bun downloader de muzică pentru Android
(INFO) Testele rulate: 1, Eșecuri: 0, Erori: 0, Omis: 0, Timpul scurs: 128.513 s - în TestSuite
(INFO)
(INFO) Rezultate:
(INFO)
(INFO) Testele rulate: 1, Eșecuri: 0, Erori: 0, Omis: 0
(INFO)
(JENKINS) Înregistrarea rezultatelor testului
(INFO) —————————————————————————
(INFO) CONSTRUI SUCCES
(INFO) —————————————————————————
(INFO) Timp total: 02:51 min
(INFO) Finalizat la: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Memorie finală: 12M / 28M
(INFO) —————————————————————————
Așteptăm ca Jenkins să termine colectarea datelor
(JENKINS) Arhivare D: cucumberFinal multiple pom.xml to com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
canal oprit
Finalizat: SUCCES
Raportul Castravete Jenkins
Castravete Excel
Testarea automatizării scripturilor
Următoarea configurație trebuie făcută.
Strategia de proiectare a testelor:
- Creați un utilitar de citire Excel, care are capacitatea de a lua ca „parametru de intrare” „coloană” a unei foi Excel și, în schimb, va da „valoarea coloană” a colii Excel pentru „coloană”.
- Creați un fișier de caracteristici, care are numele de coloană al foii Excel specificat în ghilimele duble în oricare dintre pașii săi.
- Acum creați un fișier Stepdef corespunzător pentru fișierul de caracteristici și utilizați parametrii (arg1, arg2 etc. generați dacă am specificat cuvântul în ghilimele duble peste fișierul de caracteristici) ca intrare pentru cititorul Excel (creat în pasul 1).
- Acum avem valoarea de coloană a foii Excel, care poate fi utilizată ca intrare în fișierul Stepdef.
- Executați fișierul caracteristic așa cum a fost creat în pasul de mai sus.
Fișier caracteristică
Caracteristică: Titlul funcției dvs.
Vreau să folosesc acest șablon pentru fișierul meu de caracteristici
Fundal:
Având în vedere că sunt pe Gmail și accesez ecranul „ecran”.
Dat fiind, specific numele de utilizator ca „Nume de utilizator” și Parola ca „Parolă”.
Date Faceți clic pe butonul Conectare.
Scenariu: Creați un mesaj nou din tabelul de date
Când accesez fereastra pop-up „popup”.
Și specific ca „Către” și subiect ca detalii „Subiect” și fac clic pe butonul de trimitere.
Atunci ar trebui să văd mesajul de succes.
fisier 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 Fișier 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'); } } }
Fișier 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
Odată ce configurația de mai sus este completă, trebuie doar să executați fișierul de caracteristici.
Observare
Fișierul Stepdef preia datele din foaia Excel și execută pașii de test menționați în fișierul de caracteristici.
Iată rezultatul execuției cazului de testare, așa cum este menționat pe consola Eclipse.

Concluzie
BDD este viitorul automatizării testelor, deoarece permite tuturor părților interesate să participe la crearea Scriptului de testare, în special pentru a furniza intrările lor prin fișierul Feature.
Castravetele este un instrument BDD utilizat pe scară largă și are o mulțime de integrări și caracteristici care nu sunt încă implementate în automatizarea testelor. Există mai multe grupuri / comunități care lucrează activ la Castravete.
Dacă sunteți bine versat cu Castravetele, puteți lucra la orice instrument BDD disponibil pe piață, deoarece majoritatea instrumentelor funcționează similar cu Castravetele.
Sperăm că ați aflat despre Castravete cu Jenkins prin acest tutorial detaliat.
Lectură recomandată
- Tutorial Python DateTime cu exemple
- Tutorial Castravete Seleniu: Integrare Castravete Java Seleniu WebDriver
- Tutorial Unix Shell Scripting cu exemple
- Tutorial Selenium Find Element By Text cu exemple
- Cuvânt cheie Java „acest”: Tutorial cu exemple de cod
- Tutorial BDD și castraveți cu exemple
- Tutorial de gestionare a excepțiilor C # cu exemple de cod
- Testarea automatizării folosind instrumentul Castravete și Seleniu - Tutorial Seleniu # 30