how run cucumber with jenkins
Ten samouczek zapewnia pełny przegląd ogórka z Jenkinsem i arkuszem Excela, aby wyjaśnić integrację ogórka Jenkins :
W tym samouczku będziemy omawiać Ogórek z Jenkinsem i arkuszem Excela. Mamy nadzieję, że ten samouczek będzie dla Ciebie pomocny.
Czego się nauczysz:
- Ogórek Z Jenkinsem
- Konfiguracja Jenkinsa
- Raport Cucumber Jenkins
- Ogórek Excel
- Obserwacja
- Wniosek
- rekomendowane lektury
Ogórek Z Jenkinsem
Automatyzacja skryptów testowych
Należy wykonać następującą konfigurację.
Plik funkcji
Funkcja:
Jako użytkownik
Chcę mieć możliwość dodawania nowych klientów do systemu.
Aby móc dodać dane księgowe dla tego klienta.
Tło:
Biorąc pod uwagę, że jestem na stronie głównej Github.
Kiedy określę nazwę użytkownika jako „xxxxxxxxxx” i hasło jako „xxxxxxx”.
I kliknij przycisk Zaloguj się.
@Palić
Scenariusz: Edycja profilu.
Biorąc pod uwagę, że kliknąłem opcję Twój profil.
Kiedy klikam przycisk edycji profilu.
I przesłał nowe zdjęcie.
Wtedy powinienem zobaczyć nowe zdjęcie profilowe.
@Regression @Everytime
Scenariusz: Utwórz nową treść.
Biorąc pod uwagę, że klikam opcję Your Gists.
Kiedy podam nazwę pliku, opis.
I kliknij Utwórz publiczną metodę sedna.
Wtedy powinienem zobaczyć nowy sens.
Plik Stepdef
jak uruchomić plik torrent
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 } }
Plik testNG
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{ }
Konfiguracja Jenkinsa
Dostęp Adres URL Jenkinsa .
Iść do Zarządzaj Jenkinsem> Zarządzaj wtyczką .
Zainstaluj następujące wtyczki:
- Wtyczka wyników testu ogórka
- Raporty ogórkowe
- Wtyczka Cucumber Perf
Upewnij się, że podczas instalacji wszystkie zależne wtyczki zostały pomyślnie zainstalowane, w przeciwnym razie wtyczki raportujące mogą nie działać.
Teraz przejdź do Zarządzaj -> Globalna konfiguracja narzędzi.
Ustaw ścieżka do JDK.
Ustaw ścieżka dla Mavena.
Stwórz nowa pozycja jako projekt Maven.
Po utworzeniu zadania kliknij łącze konfiguracji znajdujące się w panelu po lewej stronie.
Przewiń w dół Strona.
Ustaw pełną ścieżkę do pom.xml, cel jako „test” i zapisać konfiguracja.
jak dodać maven do zaćmienia
Po wykonaniu powyższych czynności kliknij plik Buduj teraz link, który jest obecny w lewym panelu projektu Maven.
Kompilacja zostanie wykonana i odpowiedni plik Plik testing.xml (który jest wymieniony w pom.xml) zostanie wykonany.
Oto dane wyjściowe wyświetlane w konsoli.
Wyjście konsoli
[INFO] T E S T S
[INFO] ———————————————————-
[INFO] Uruchamiam TestSuite
Rozpoczyna się nowy scenariusz
Uruchamianie ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) na porcie 27348
Dozwolone są tylko połączenia lokalne.
log4j: WARN Nie znaleziono programów dołączających do programu rejestrującego
(org.apache.http.client.protocol.RequestAddCookies).
log4j: WARN Proszę poprawnie zainicjować system log4j.
log4j: WARN Zobacz http://logging.apache.org/log4j/1.2/faq.html#noconfig, aby uzyskać więcej informacji.
25 listopada 2017 12:56:41 org.openqa.selenium.remote.ProtocolHandshake createSession
INFORMACJE: Wykryty 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
Scenariusz się kończy
Rozpoczyna się nowy scenariusz
Uruchamianie ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) na porcie 24866
Dozwolone są tylko połączenia lokalne.
25 listopada 2017 12:57:45 org.openqa.selenium.remote.ProtocolHandshake createSession
INFORMACJE: Wykryty dialekt: OSS
Scenariusz się kończy
2 scenariusze (2 zaliczone)
14 kroków (14 zaliczonych)
2m2,677s
C ++ niezdefiniowany błąd odwołania
[INFO] Uruchomione testy: 1, Błędy: 0, Błędy: 0, Pominięto: 0, Czas, który upłynął: 128,513 s - w TestSuite
[INFO]
[INFO] Wyniki:
[INFO]
[INFO] Uruchomione testy: 1, niepowodzenia: 0, błędy: 0, pominięte: 0
[INFO]
[JENKINS] Zapisywanie wyników testu
[INFO] —————————————————————————
[INFO] TWORZENIE SUKCESU
[INFO] —————————————————————————
[INFO] Całkowity czas: 02:51 min
[INFO] Zakończono: 2017-11-25T12: 58: 45 + 05: 30
[INFO] Pamięć końcowa: 12 M / 28 M.
[INFO] —————————————————————————
Czekam, aż Jenkins zakończy zbieranie danych
[JENKINS] Archiwizacja D: cucumberFinal multiple pom.xml to com / cucumber.example / 0.0.1-SNAPSHOT / cucumber.example-0.0.1-SNAPSHOT.pom
kanał został zatrzymany
Ukończony SUKCES
Raport Cucumber Jenkins
Ogórek Excel
Automatyzacja skryptów testowych
Należy wykonać następującą konfigurację.
Strategia projektowania testów:
- Utwórz narzędzie do czytania programu Excel, które może pobrać „nazwę kolumny” arkusza programu Excel jako parametr wejściowy iw zamian poda „wartość kolumny” arkusza programu Excel dla tego „kolumny”.
- Utwórz plik funkcji, którego nazwa kolumny arkusza programu Excel jest określona w podwójnych cudzysłowach w każdym z jego kroków.
- Teraz utwórz odpowiedni plik Stepdef dla pliku funkcji i użyj parametrów (arg1, arg2 itp. Wygenerowanych, jeśli określimy słowo w podwójnym cudzysłowie nad plikiem funkcji) jako dane wejściowe dla czytnika programu Excel (utworzonego w kroku 1).
- Teraz mamy wartość kolumny arkusza Excela, której można użyć jako danych wejściowych do pliku Stepdef.
- Uruchom plik elementu, tak jak został utworzony w powyższym kroku.
Plik funkcji
Funkcja: Tytuł Twojej funkcji
Chcę użyć tego szablonu dla mojego pliku funkcji
Tło:
Biorąc pod uwagę, że jestem na Gmailu i mam dostęp do ekranu „screen”.
Biorąc pod uwagę, określam nazwę użytkownika jako „nazwę użytkownika” i hasło jako „hasło”.
Biorąc pod uwagę Kliknij przycisk Zaloguj się.
Scenariusz: Utwórz nową wiadomość z tabeli danych
Kiedy uzyskuję dostęp do wyskakującego okienka „popup”.
I określam jako „Do” i temat jako „Temat” szczegóły i klikam przycisk Prześlij.
Wtedy powinienem zobaczyć komunikat o sukcesie.
plik 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 Plik 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'); } } }
Plik 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
Po zakończeniu powyższej konfiguracji po prostu uruchom plik funkcji.
Obserwacja
Plik Stepdef pobiera dane z arkusza programu Excel i wykonuje kroki testowe wymienione w pliku funkcji.
Oto wynik wykonania przypadku testowego, jak wspomniano w konsoli Eclipse.

Wniosek
BDD to przyszłość automatyzacji testów, ponieważ umożliwia wszystkim zainteresowanym stronom udział w tworzeniu skryptu testowego, a zwłaszcza dostarczanie danych wejściowych w pliku funkcji.
Cucumber jest szeroko stosowanym narzędziem BDD i ma wiele integracji i funkcji, które nie zostały jeszcze zaimplementowane w automatyzacji testów. Istnieje kilka grup / społeczności aktywnie pracujących nad ogórkiem.
Jeśli jesteś dobrze zaznajomiony z ogórkiem, możesz pracować z dowolnym narzędziem BDD dostępnym na rynku, ponieważ większość narzędzi działa podobnie do ogórka.
Mamy nadzieję, że dzięki temu dogłębnemu samouczkowi dowiedziałeś się o Cucumber with Jenkins.
rekomendowane lektury
- Python DateTime Tutorial z przykładami
- Cucumber Selenium Tutorial: Integracja Cucumber Java Selenium WebDriver
- Samouczek dotyczący skryptów powłoki Unix z przykładami
- Selenium Find Element By Text Samouczek z przykładami
- Słowo kluczowe „this” w języku Java: samouczek z przykładami kodu
- Samouczek BDD i ogórek z przykładami
- C # samouczek obsługi wyjątków z przykładami kodu
- Testowanie automatyzacji przy użyciu narzędzia Cucumber i selenu - samouczek dotyczący selenu nr 30