how run cucumber with jenkins
Ta vadnica nudi popoln pregled kumar z Jenkinsom in Excelovim listom, da razloži integracijo kumar Jenkins :
V tej vadnici bomo o kumarah razpravljali z Jenkinsom in Excelovim listom. Upamo, da vam bo ta vadnica v pomoč.
Kaj se boste naučili:
- Kumare z Jenkinsom
- Jenkinsova konfiguracija
- Poročilo o kumarah Jenkins
- Kumare Excel
- Opazovanje
- Zaključek
- Priporočeno branje
Kumare z Jenkinsom
Avtomatizacija preizkusnega skripta
Izvesti je treba naslednjo konfiguracijo.
Datoteka funkcije
Značilnost:
Kot uporabnik
Želim imeti možnost dodajanja novih strank v sistem.
Tako da lahko dodam računovodske podatke za to stranko.
Ozadje:
Glede na to, da sem na domači strani Github.
Ko uporabniško ime določim kot »xxxxxxxxxx«, geslo pa kot »xxxxxxxx«.
In kliknite gumb Prijava.
@Smoke
Scenarij: Urejanje profila.
Glede na to, da kliknem na možnost Vaš profil.
Ko kliknem na gumb za urejanje profila.
In naložil novo sliko.
Potem bi moral videti novo sliko profila.
@Regression @Everytime
Scenarij: Ustvari novo bistvo.
Glede na to, da kliknem na možnost Vaša seznama.
Ko navedem ime datoteke, opis.
In kliknite na Ustvari javno sliko.
Potem bi moral videti novo bistvo.
Datoteka Stepdef
.net vprašanja in odgovori za izkušene
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 } } Datoteka TestNG
Datoteka tekača
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{ } Jenkinsova konfiguracija
Dostop URL Jenkins .
Pojdi do Manage Jenkins> Manage Plugin .
Namestite naslednje vtičnike:
- Vtičnik za rezultate kumaric
- Poročila o kumarah
- Kumara perf plugin



Prepričajte se, da so med namestitvijo vsi odvisni vtičniki uspešno nameščeni, sicer vtičniki za poročanje morda ne bodo delovali.
Zdaj se pomaknite do Upravljanje -> Globalna konfiguracija orodja.

Nastavite pot za JDK.
Nastavite pot za Maven.

Ustvariti nov element kot projekt Maven.


Ko je opravilo ustvarjeno, kliknite povezavo za konfiguriranje na levi plošči.
Pomaknite navzdol strani.
kako odpreti hudourniško datoteko v operacijskem sistemu Windows

Nastavite celotno pot pom.xml, cilj kot 'test' in shrani konfiguracijo.

Ko so zgornji koraki končani, kliknite na Zgradite zdaj povezava, ki je prisotna na levi plošči projekta Maven.

Gradnja bo izvedena in ustrezna datoteka testing.xml (ki je omenjen v pom.xml) bo izveden.
Tu je izhod, ki je prikazan na konzoli.
Izhod konzole
(INFO) T E S T S
(INFO) ——————————————————-
(INFO) Zagon TestSuite
Začne se nov scenarij
Zagon ChromeDriverja 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) na vratih 27348
Dovoljene so samo lokalne povezave.
log4j: OPOZORILO Za zapisovalnik ni bilo mogoče najti pripisov
(org.apache.http.client.protocol.RequestAddCookies).
log4j: OPOZORILO Prosimo, pravilno inicializirajte sistem log4j.
log4j: OPOZORILO Za več informacij glejte http://logging.apache.org/log4j/1.2/faq.html#noconfig.
25. november 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Zaznano narečje: 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
Scenarij se konča
Začne se nov scenarij
Zagon ChromeDriverja 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) na vratih 24866
Dovoljene so samo lokalne povezave.
25. november 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Zaznano narečje: OSS
Scenarij se konča
2 scenarija (2 opravljena)
14 korakov (14 opravljenih)
2m2.677s
brezplačno orodje za čiščenje Windows 10
(INFO) Izvedeni preskusi: 1, Napake: 0, Napake: 0, Preskočeni: 0, Potekel čas: 128.513 s - v TestSuite
(INFO)
(INFO) Rezultati:
(INFO)
(INFO) Izvedeni testi: 1, napake: 0, napake: 0, preskočeni: 0
(INFO)
(JENKINS) Snemanje rezultatov testa
(INFO) ————————————————————————
(INFO) ZGRADI USPEH
(INFO) ————————————————————————
(INFO) Skupni čas: 02:51 min
(INFO) Končano ob: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Končni pomnilnik: 12M / 28M
(INFO) ————————————————————————
Čakam, da Jenkins konča z zbiranjem podatkov
(JENKINS) Arhiviranje D: cucumberFinal multiple pom.xml v com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
kanal ustavljen
Končano: USPEH
Poročilo o kumarah Jenkins

Kumare Excel
Avtomatizacija preizkusnega skripta
Izvesti je treba naslednjo konfiguracijo.
Strategija oblikovanja preskusov:
- Ustvarite pripomoček za bralnik excel, ki lahko kot vhodni parameter vzame 'ime stolpca' v Excelu, v zameno pa bo za ta 'stolpec' navedel 'vrednost stolpca'.
- Ustvarite funkcijsko datoteko, katere ime stolpca excelovega lista je v katerem koli koraku določeno z dvojnimi narekovaji.
- Zdaj ustvarite ustrezno datoteko Stepdef za funkcijsko datoteko in uporabite parametre (arg1, arg2 itd .. ustvarjene, če smo besedo navedli v dvojnih narekovajih nad funkcijsko datoteko) kot vhod za bralnik excel (ustvarjen v koraku1).
- Zdaj imamo vrednost stolpca excelovega lista, ki jo lahko uporabimo kot vhod v datoteko Stepdef.
- Izvedite datoteko funkcije, kot je bila ustvarjena v zgornjem koraku.
Datoteka funkcije
Značilnost: Naslov vaše funkcije
To predlogo želim uporabiti za svojo funkcijsko datoteko
Ozadje:
Glede na to, da sem na Gmailu in dostopam do zaslona.
Glede na to, da uporabniško ime določim kot »Uporabniško ime«, geslo pa kot »Geslo«.
Če kliknete gumb Prijava.
Scenarij: Ustvari novo sporočilo iz podatkovne tabele
Ko imam dostop do pojavnega okna.
In določim kot »Za« in zadevo kot »Zadeva« in kliknem na gumb za oddajo.
Potem bi moral videti sporočilo o uspehu.
Datoteka 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 Datoteka 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'); } } } Datoteka 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 Ko je zgornja konfiguracija končana, samo zaženite funkcijsko datoteko.
Opazovanje
Datoteka Stepdef zajema podatke iz Excelovega lista in izvede preskusne korake, omenjene v funkcijski datoteki.
Tu je rezultat izvajanja testnega primera, kot je omenjeno prek konzole Eclipse.

Zaključek
BDD je prihodnost testne avtomatizacije, saj vsem zainteresiranim stranem omogoča, da sodelujejo pri ustvarjanju testnega skripta, še posebej, da zagotovijo svoje podatke v datoteki Feature.
Kumara je pogosto uporabljeno orodje BDD in ima veliko integracij in funkcij, ki jih še ni treba uporabiti pri avtomatizaciji preskusov. Obstaja več skupin / skupnosti, ki aktivno delujejo na Kumare.
Če ste dobro seznanjeni s Kumaro, lahko delate na katerem koli orodju BDD, ki je na voljo na trgu, saj večina orodij deluje podobno kot Kumara.
Upamo, da ste se o Cucumberu z Jenkinsom naučili skozi to poglobljeno vadnico.
Priporočeno branje
- Vadnica Python DateTime s primeri
- Vadnica za kumare selena: Integracija kumar Java Selenium WebDriver
- Vadnica za skriptiranje lupine Unix s primeri
- Vadnica za iskanje selena z besedilom z primeri
- Java 'this' ključna beseda: Vadnica s primeri kode
- Vadnica za BDD in kumare s primeri
- Vadnica za ravnanje z izjemami C # s primeri kode
- Avtomatizirano preizkušanje z uporabo orodij za kumare in selen - vaja št. 30
