how run cucumber with jenkins
Dieses Tutorial bietet einen vollständigen Überblick über Gurken mit Jenkins und eine Excel-Tabelle, um die Integration von Gurken-Jenkins zu erläutern ::
In diesem Tutorial werden wir Gurke mit Jenkins und Excel-Tabelle diskutieren. Wir hoffen, dass dieses Tutorial für Sie hilfreich ist.
Was du lernen wirst:
- Gurke mit Jenkins
- Jenkins-Konfiguration
- Gurken Jenkins Bericht
- Gurke Excel
- Überwachung
- Fazit
- Literatur-Empfehlungen
Gurke mit Jenkins
Testskriptautomatisierung
Die folgende Konfiguration muss durchgeführt werden.
Feature-Datei
Merkmal:
Als Benutzer
Ich möchte in der Lage sein, neue Clients in das System aufzunehmen.
Damit ich Buchhaltungsdaten für diesen Kunden hinzufügen kann.
Hintergrund:
Vorausgesetzt, ich bin auf der Github-Homepage.
Wenn ich den Benutzernamen als 'xxxxxxxxxx' und das Passwort als 'xxxxxxx' spezifiziere.
Und klicken Sie auf die Schaltfläche Anmelden.
@Rauch
Szenario: Profil bearbeiten.
Vorausgesetzt, ich klicke auf die Option Ihr Profil.
Wenn ich auf die Schaltfläche Profil bearbeiten klicke.
Und ein neues Bild hochgeladen.
Dann sollte ich ein neues Profilbild sehen.
@Regression @Everytime
Szenario: Erstellen Sie einen neuen Kern.
Vorausgesetzt, ich klicke auf Ihre Gists-Option.
Wenn ich den Dateinamen gebe, Beschreibung.
Und klicken Sie auf Create public gist method.
Dann sollte ich den neuen Kern sehen.
Stepdef-Datei
Wie kann ich eine EPS-Datei öffnen?
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-Datei
Runner-Datei
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
Zugriff Jenkins URL .
Gehe zu Jenkins verwalten> Plugin verwalten .
Installieren Sie die folgenden Plugins:
- Plugin für Gurkentestergebnisse
- Gurkenberichte
- Gurke perf Plugin
Stellen Sie sicher, dass während der Installation alle abhängigen Plugins erfolgreich installiert wurden. Andernfalls funktionieren die Berichts-Plugins möglicherweise nicht.
Navigieren Sie nun zu Verwalten -> Globale Toolkonfiguration.
Stellen Sie die Pfad für JDK.
Stellen Sie die Weg für Maven.
Ein ... kreieren Neuer Gegenstand als Maven-Projekt.
Orakel formt und berichtet Interviewfragen
Klicken Sie nach dem Erstellen des Jobs auf den Link zum Konfigurieren im linken Bereich.
Runterscrollen Die Seite.
Legen Sie den vollständigen Pfad von pom.xml und das Ziel als 'test' und fest sparen die Konfiguration.
Sobald die obigen Schritte abgeschlossen sind, klicken Sie auf Jetzt bauen Link, der im linken Bereich des Maven-Projekts vorhanden ist.
Der Build wird ausgeführt und der entsprechende test.xml Datei (was über die pom.xml erwähnt wird) wird ausgeführt.
Hier ist die Ausgabe, die auf der Konsole angezeigt wird.
Konsolenausgabe
(INFO) T E S T S.
(DIE INFO) -------------------
(INFO) Ausführen von TestSuite
Neues Szenario beginnt
Starten von ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) auf Port 27348
Es sind nur lokale Verbindungen zulässig.
log4j: WARNUNG Für den Logger wurden keine Appender gefunden
(org.apache.http.client.protocol.RequestAddCookies).
log4j: WARNUNG Bitte initialisieren Sie das log4j-System ordnungsgemäß.
log4j: WARN Weitere Informationen finden Sie unter http://logging.apache.org/log4j/1.2/faq.html#noconfig.
25. November 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Erkannter 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
Das Szenario endet
Neues Szenario beginnt
Starten von ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) an Port 24866
Es sind nur lokale Verbindungen zulässig.
25. November 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Erkannter Dialekt: OSS
Das Szenario endet
2 Szenarien (2 bestanden)
14 Schritte (14 bestanden)
2m2.677s
beste Werbeblocker-Erweiterung für Chrom
(INFO) Testlauf: 1, Fehler: 0, Fehler: 0, Übersprungen: 0, Verstrichene Zeit: 128,513 s - in TestSuite
(DIE INFO)
(INFO) Ergebnisse:
(DIE INFO)
(INFO) Testlauf: 1, Fehler: 0, Fehler: 0, Übersprungen: 0
(DIE INFO)
(JENKINS) Aufzeichnung der Testergebnisse
(DIE INFO) ------------------------
(INFO) ERFOLG BAUEN
(DIE INFO) ------------------------
(INFO) Gesamtzeit: 02:51 min
(INFO) Fertiggestellt am: 2017-11-25T12: 58: 45 + 05: 30
(INFO) Endspeicher: 12M / 28M
(DIE INFO) ------------------------
Warten auf Jenkins, um die Datenerfassung abzuschließen
(JENKINS) Archivierung von D: cucumberFinal multiple pom.xml in com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
Kanal gestoppt
Fertig: ERFOLG
Gurken Jenkins Bericht
Gurke Excel
Testskriptautomatisierung
Die folgende Konfiguration muss durchgeführt werden.
Testdesign-Strategie:
- Erstellen Sie ein Excel-Reader-Dienstprogramm, das den Spaltennamen eines Excel-Arbeitsblatts als Eingabeparameter verwenden kann. Im Gegenzug wird der Spaltenwert des Excel-Arbeitsblatts für diesen Spaltenanfang angegeben.
- Erstellen Sie eine Feature-Datei, deren Spaltenname in einem der Schritte in doppelten Anführungszeichen angegeben ist.
- Erstellen Sie nun eine entsprechende Stepdef-Datei für die Feature-Datei und verwenden Sie die Parameter (arg1, arg2 usw., die generiert wurden, wenn wir das Wort in doppelten Anführungszeichen über der Feature-Datei angegeben haben) als Eingabe für den Excel-Reader (erstellt in Schritt 1).
- Jetzt haben wir den Spaltenwert der Excel-Tabelle, der als Eingabe für die Stepdef-Datei verwendet werden kann.
- Führen Sie die im obigen Schritt erstellte Feature-Datei aus.
Feature-Datei
Merkmal: Titel Ihrer Funktion
Ich möchte diese Vorlage für meine Feature-Datei verwenden
Hintergrund:
Vorausgesetzt, ich bin auf Google Mail und greife auf den Bildschirm 'Bildschirm' zu.
Vorausgesetzt, ich gebe Benutzername als 'Benutzername' und Passwort als 'Passwort' an.
Gegeben Klicken Sie auf die Schaltfläche Anmelden.
Szenario: Erstellen Sie eine neue Nachricht aus der Datentabelle
Wenn ich auf das Popup 'Popup' zugreife.
Und ich gebe als 'An' und Betreff als 'Betreff' Details an und klicke auf die Schaltfläche 'Senden'.
Dann sollte ich die Erfolgsmeldung sehen.
Excel-Datei
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-Datei
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-Datei
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
Sobald die obige Konfiguration abgeschlossen ist, führen Sie einfach die Feature-Datei aus.
Überwachung
Die Stepdef-Datei entnimmt die Daten aus dem Excel-Blatt und führt die in der Feature-Datei genannten Testschritte aus.
Hier ist das Ergebnis der Testfallausführung, wie über die Eclipse-Konsole angegeben.
Fazit
BDD ist die Zukunft der Testautomatisierung, da alle Beteiligten an der Erstellung des Testskripts teilnehmen können, insbesondere um ihre Eingaben über die Feature-Datei bereitzustellen.
Cucumber ist ein weit verbreitetes BDD-Tool und verfügt über viele Integrationen und Funktionen, die in der Testautomatisierung noch implementiert werden müssen. Es gibt mehrere Gruppen / Gemeinschaften, die aktiv an Gurken arbeiten.
Wenn Sie mit Cucumber vertraut sind, können Sie an jedem auf dem Markt erhältlichen BDD-Tool arbeiten, da die meisten Tools ähnlich wie Cucumber funktionieren.
Wir hoffen, dass Sie durch dieses ausführliche Tutorial etwas über Gurke mit Jenkins gelernt haben.
Literatur-Empfehlungen
- Python DateTime Tutorial mit Beispielen
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver
- Unix Shell Scripting Tutorial mit Beispielen
- Selenium Find Element By Text Tutorial mit Beispielen
- Java 'this' Schlüsselwort: Tutorial mit Codebeispielen
- BDD- und Gurken-Tutorial mit Beispielen
- Tutorial zur Behandlung von C # -Ausnahmen mit Codebeispielen
- Automatisierungstests mit Gurkenwerkzeug und Selen - Selen-Tutorial Nr. 30