how run cucumber with jenkins
Denna handledning ger en fullständig översikt över gurka med Jenkins och Excel-ark för att förklara gurka Jenkins-integrationen :
I den här handledningen kommer vi att diskutera Gurka med Jenkins och Excel-ark. Vi hoppas att den här guiden kommer att vara till hjälp för dig.
Vad du kommer att lära dig:
- Gurka med Jenkins
- Jenkins-konfiguration
- Gurka Jenkins-rapport
- Gurka Excel
- Observation
- Slutsats
- Rekommenderad läsning
Gurka med Jenkins
Testa skriptautomatisering
Följande konfiguration måste göras.
Funktionsfil
Funktion:
Som användare
Jag vill kunna lägga till nya klienter i systemet.
Så att jag kan lägga till bokföringsdata för den klienten.
Bakgrund:
Med tanke på att jag är på Githubs hemsida.
När jag anger användarnamn som “xxxxxxxxxx” och lösenord som “xxxxxxx”.
Och klicka på Logga in-knappen.
@Rök
Scenario: Redigera profilen.
Med tanke på att jag klickar på Ditt profilalternativ.
När jag klickar på knappen redigera profil.
Och laddade upp en ny bild.
Då borde jag se en ny profilbild.
@Regression @Everytime
Scenario: Skapa ny kärnan.
Med tanke på att jag klickar på Your Gists-alternativet.
När jag anger filnamn, beskrivning.
Och klicka på Skapa allmän kärnmetod.
Då borde jag se den nya kärnan.
Stepdef-fil
hur man öppnar json-filen i Windows
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-konfiguration
Tillgång Jenkins URL .
Gå till Hantera Jenkins> Hantera plugin .
Installera följande plugins:
- Plugin för gurktestresultat
- Gurka rapporter
- Gurka perf-plugin
Se till att alla beroende plugins installeras framgångsrikt, annars kan rapporteringspluginarna inte fungera.
Navigera nu till Hantera -> Global Tool Configuration.
Ställ in väg för JDK.
Ställ in väg för Maven.
hur man förklarar en lista i java
Skapa en nytt föremål som ett Maven-projekt.
När jobbet har skapats klickar du på konfigurationslänken i den vänstra panelen.
Scrolla ner sidan.
Ställ in hela sökvägen för pom.xml, mål som 'test' och spara konfigurationen.
När ovanstående steg är klara, klicka på Bygg nu länk som finns i den vänstra panelen i Maven Project.
Byggningen kommer att köras och motsvarande testing.xml-fil (som nämns över pom.xml) kommer att köras.
Här är utdata som visas på konsolen.
Konsolutgång
(INFO) T E S T S
(INFO) -------------------
(INFO) Kör TestSuite
Nytt scenario börjar
Starta ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) på port 27348
Endast lokala anslutningar är tillåtna.
log4j: WARN Inga appenders hittades för logger
(org.apache.http.client.protocol.RequestAddCookies).
log4j: WARN Initiera log4j-systemet ordentligt.
log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig för mer information.
25 nov 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Upptäckt 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
Scenariot slutar
Nytt scenario börjar
Starta ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) på port 24866
Endast lokala anslutningar är tillåtna.
25 nov 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Upptäckt dialekt: OSS
Scenariot slutar
2 scenarier (2 godkända)
14 steg (14 passerade)
2m2.677s
hur man skriver junit testfall i java
(INFO) Testkörningar: 1, Fel: 0, Fel: 0, Hoppades över: 0, Förfluten tid: 128.513 s - i TestSuite
(INFO)
(INFO) Resultat:
(INFO)
(INFO) Testkörningar: 1, misslyckanden: 0, fel: 0, hoppade över: 0
(INFO)
(JENKINS) Inspelning av testresultat
(INFO) ------------------------
(INFO) BYGG FRAMGÅNG
(INFO) ------------------------
(INFO) Total tid: 02:51 min
(INFO) Avslutad: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Slutligt minne: 12M / 28M
(INFO) ------------------------
Väntar på att Jenkins ska samla in data
(JENKINS) Arkiverar D: cucumberFinal multiple pom.xml to com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
kanalen stoppas
Färdig: FRAMGÅNG
Gurka Jenkins-rapport
Gurka Excel
Testa skriptautomatisering
Följande konfiguration måste göras.
Testdesignstrategi:
- Skapa ett Excel-läsarverktyg som har förmågan att ta ett excel-arks 'kolumnnamn' som inmatningsparameter och i gengäld kommer det att ge excel-arkets 'kolumnvärde' för det 'kolumnanme'.
- Skapa en funktionsfil som har excel-arkets kolumnnamn som anges i dubbla citat i något av dess steg.
- Skapa nu en motsvarande Stepdef-fil för funktionsfilen och använd parametrarna (arg1, arg2 etc .. genererade om vi angav ordet i dubbelt citat över funktionsfilen) som inmatning för excel-läsaren (skapad i steg 1).
- Nu har vi excel-arkets kolumnvärde som kan användas som inmatning till Stepdef-filen.
- Kör funktionsfilen som skapad i steget ovan.
Funktionsfil
Funktion: Titel på din funktion
Jag vill använda den här mallen för min funktionsfil
Bakgrund:
Med tanke på att jag är på Gmail och kommer åt skärmens 'skärm'.
Med tanke på att jag anger användarnamn som 'användarnamn' och lösenord som 'lösenord'.
Givet Klicka på knappen Logga in.
Scenario: Skapa nytt meddelande från datatabellen
När jag öppnar popup-popupen.
Och jag anger som 'Till' och ämne som 'Ämne' detaljer och klickar på knappen Skicka.
Då borde jag se framgångsmeddelandet.
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 ovanstående konfiguration är klar kör du bara funktionsfilen.
Observation
Stepdef-filen tar data från excel-arket och utför de teststeg som nämns i funktionsfilen.
Här är testfallets exekveringsresultat som nämnts över Eclipse-konsolen.

Slutsats
BDD är framtiden för testautomatisering eftersom det gör det möjligt för alla intressenter att delta i skapandet av testskript, särskilt för att ge sina ingångar över Feature-filen.
Gurka är ett allmänt använt BDD-verktyg och det har många integrationer och funktioner som ännu inte ska implementeras i testautomatisering. Det finns flera grupper / samhällen som aktivt arbetar med gurka.
Om du är väl insatt i gurka kan du arbeta med vilket BDD-verktyg som helst som finns på marknaden, eftersom de flesta verktygen fungerar på samma sätt som gurka.
Vi hoppas att du lärde dig mer om gurka med Jenkins genom denna djupgående handledning.
Rekommenderad läsning
- Python DateTime-handledning med exempel
- Gurka Selen Tutorial: Gurka Java Selen WebDriver Integration
- Unix Shell Scripting Tutorial med exempel
- Selen Find Element by Text Tutorial med exempel
- Java 'detta' Nyckelord: Handledning med kodexempel
- BDD och gurkahandledning med exempel
- C # Handledning för undantagshantering med kodexempel
- Automatiseringstestning med gurkaverktyg och selen - Selenhandledning # 30