Jenkins является одним из популярных инструментов для непрерывной интеграции, управления сборки и тестирование автоматизации. Maven — популярный инструмент для создания автоматизации, который широко используется для проектов Java. Комбинация селена, Maven, интеграции Jenkins — это вершина непрерывной интеграции и развертывания.
Как часть тестирования автоматизации, мы уверены, что ваша команда поднимается многочисленными Тестовая автоматизация селена скрипты через день. Поскольку сам Selenium не используется для непрерывной интеграции, селена, Maven и Jenkins Integration, используют для управления сборки и непрерывной интеграции. В этой статье мы смотрим на использование Maven и Jenkins с Selenium.
Обзор Selenium, Maven & Jenkins
Maven является популярным инструментом автоматизации сборки, который в основном используется для проектов Java. Преимущество использования Maven заключается в том, что библиотеки Java и плагины загружаются на динамическую базу из центрального хранилища Maven 2.
Зависимости и другая необходимая информация о создании данных хранятся в файле POM.XML проекта. После загрузки зависимости хранятся в локальном кэше (репозиторий .m2) и то же самое используется для генерации сборки. Это упрощает процесс сборки, так как любая новая зависимость проекта должна быть добавлена только в POM.xml, то есть ручной загрузки и монтажные пакеты не требуются.
Селен Это широко используемая система автоматизации тестирования для проверки веб-приложений в разных комбинациях браузеров, платформ и устройств (или эмуляторов). Вы можете обратиться к нашим блогам о том, как Селенская сетка может быть использована для автоматического тестирования браузера Отказ
Jenkins — это инструмент CI/CD с открытым исходным кодом, который помогает в автоматизации мероприятий, связанных с сборкой, тестом и развертыванием. Дженкинс обладает обширной экосистемой плагинов, является открытым источником, а также страстное сообщество — факторы, которые можно отнести к функциям Дженкинса.
В этой Maven и Jenkins с блогом Selenium мы будем использовать Testng, что является популярной тестовой структурой, которая вдохновлена Junit. Он широко используется для таких областей тестирования, как функциональное тестирование, сквозное тестирование и многое другое.
Это набор инструментов, которые мы использовали в демонстрации:
- Maven — Инструмент управления проектами в Java [ Ссылка Несомненно
- Testng — Популярная система автоматизации тестирования [ Ссылка Несомненно
- Селен Webdriver — Библиотека в основном используется для автоматизации взаимодействий браузера [ Ссылка Несомненно
- Дженкинс — Инструмент для непрерывной интеграции (CI) и непрерывного развертывания (CD) [ Ссылка Несомненно
Вот общий поток информации, когда селен, Maven и Jenkins интегрированы:
- После того, как разработчик нажат код в репозиторий (например, GitHub), запускается сборка Jenkins.
- Maven загружает зависимые библиотеки и пакеты и начинает выполнять сборку. Информация, связанная с Test Suite, доступна в Testing.xml, и то же самое используется в
Pom.xml
Отказ - Цель сборки (например, установка) для запуска автоматизированных испытаний установлено. То же самое достигается через плагин Maven-Surefire.
- Плагин Maven-Surefire-Plugin сообщает Testng для проведения тестов, которые находятся под аннотацией @test Отказ
- В зависимости от AUT (Application Community) и комбинации браузера (& OS), на которых выполняются перекрестные тесты браузера, Webdriver Selenium вызывает соответствующий экземпляр браузера и выполняет те же тесты автоматизации.
- Результаты испытаний публикуются в HTML-отчетах, поскольку плагин HTML-издателя используется для генерации отчета.
- Даже если один тестовый случай не удался, полный тест помечен состоянием «Не удалось».
Преимущества использования Maven и Jenkins с Selenium
Прежде чем мы продемонстрировать использование интеграции Selenium Maven Jenkins, мы посмотрим на основные преимущества использования Maven и Jenkins с Selenium:
- Всякий раз, когда изменение выполнено в реализации, изменения развертываются в тестовой среде. Тестирование автоматизации выполняется непрерывно, и разработчики будут проинформированы о результатах сборки и тестирования.
- Испытуемые люксы, которые включают в себя множество тестовых сценариев (или тестовых комбинаций), могут занять более длительную продолжительность для тестирования автоматизации. Ночной запуск по сборке может быть запланирован для сборки и выполнения на сервере Jenkins в таких случаях.
- Как Maven использует POM.XML, он уменьшает общую зависимостью ручной загрузки файлов JAR. Кроме того, тип «Maven Project» в Jenkins помогает начать работу с Maven Selenium, интеграции Jenkins с несколькими настройками конфигурации.
- Настройка интеграции Selenium Maven Jenkins подходит для разработки и тестирования команд, распространяемых в разных географических местах.
Предпосылки для проекта Jenkins Selenium
Для демонстрации Maven и Jenkins с Selenium следует установить следующие программные программы (или доступны) на машине, откуда инициируются тесты:
Демонстрация селена Maven Jenkins Integration
Для экономии времени мы не будем смотреть на каждый шаг создания проекта Maven. В случае, если вы хотите быстрый реконструкцию Maven с Selenium, вы можете ссылаться на этот учебник Maven для автоматизации тестирования Selenium. Шаги, используемые для создания проекта Maven в IMEE IDELEMIC, аналогичны тем, которые используются при создании проекта Maven в Eclipse IDE.
Тестовый люкс — 1
Испытательный сценарий — 1 (Chrome на Windows 10)
- Перейдите к этому URL- https://lambdatest.github.io/sample-todo-app/ Отказ
- Выберите первые два флажка.
- Введите «Счастливые тестирования на лямбдатесте» в текстовом поле ниже со следующим.
- В настоящее время нажмите кнопку «Добавить» и убедитесь, был ли текст добавлен или нет.
Тестовый сценарий — 2 (тесты на 4 различных комбинациях браузера и ОС)
- Перейдите к этому URL- https://www.google.com. .
- Ищите «лямбдатест».
- Нажмите на первый результат теста.
- Теперь поднимите утверждение, если заголовок страницы не соответствует ожидаемому названию.
Выполнение
Соответствующие зависимости и плагины должны быть добавлены в POM.xml проекта. Вот ключевые пакеты (или банки), которые являются частью POM.xml:
- Селен 4 (Альфа)
- Testng Framework (версия 6.9.10)
- Maven Surefire плагин для выполнения тестового набора, который является частью Testng.xml
- Maven Surefire Report Плагин для генерации отчета результатов теста в формат HTML
4.0.0 org.example org.selenium4.CrossBrowserTest 1.0-SNAPSHOT UTF-8 org.testng testng 6.9.10 test org.seleniumhq.selenium selenium-java 4.0.0-alpha-6 org.seleniumhq.selenium selenium-chrome-driver 4.0.0-alpha-6 io.github.bonigarcia webdrivermanager 4.1.0 org.slf4j slf4j-nop 1.7.28 test junit junit 4.13 test com.github.lambdatest lambdatest-tunnel-binary 1.0.4 install maven-compiler-plugin 3.0 1.8 1.8 org.apache.maven.plugins maven-surefire-plugin 2.12.4 testng.xml org.apache.maven.plugins maven-surefire-report-plugin 3.0.0-M5
Если вы намереваетесь добавить любой новый плагин или банку на вышеупомянутый POM.xml, поиск того же на Репозиторий Maven и добавьте соответствующую зависимость/плагин в соответствующем разделе.
Тестовый люкс содержит два тестовых случая, а именно Test_Selenium4_todoApp () & test_selenium4_googlesearch (). Как показано ниже, что показано ниже, реализация этих испытаний хранится в отдельных файлах, а именно CrossBrowsertest.java и googlesearchtest.java, и оба являются частью пакета org.selenium4.
Тестовый сценарий TEST_SELENIM4_TODOAPP () предназначен для выполнения на Chrome (последней версии) для Windows 10. С другой стороны, тестовый сценарий Test_SeleNium4_googlesearch () должен быть выполнен на 4 различных комбинациях браузера и ОС, т.е. Chrome (Neighle) на Windows 10, Edge (84.0) на Windows 10, Chrome (Neighle) на MacOS Mojave и Firefox (последнее ) на ОС X Mavericks.
Записи в Testng.xml для Test_SeleNium4_googlesearch () были выровнены в соответствии с возможностями браузера, создаваемых генератором Lambdatest возможностей. Ниже показано, что возможности образца, создаваемые для Chrome (Neighle) & Windows 10 комбинации:
В реализации мы использовали прослушиватели Testng в Webdriver Selenium для тестирования автоматизации. На уровне Suite определяем имена классов для реализации слушателей в файле Testng XML. Аннотация @Listeners в Testng используется для добавления класса org.selenium4.googlesearchtest.
Как показано ниже, название теста «Испытание Google Search — 1» примет входные параметры, которые указывают браузер, версию, платформу и разрешение дисплея. Эти значения будут переданы методу испытаний в качестве аргументов, используя параметризованные аннотации (i.e. @ org.testng.annotations.parameters (значение = {«браузер», «версия», «платформа», «Разрешение»}).
CrossBrowsertest.java (внедрение тестового сценария — 1)
package org.selenium4; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.net.MalformedURLException; import java.net.URL; public class CrossBrowserTest { /* protected static ChromeDriver driver; */ WebDriver driver = null; String URL = "https://lambdatest.github.io/sample-todo-app/"; public static String status = "passed"; String username = "user-name"; String access_key = "access-key"; @BeforeClass public void testSetUp() throws MalformedURLException { /* WebDriverManager.chromedriver().setup(); driver = new ChromeDriver(); */ DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("build", "Maven Parallel Testing with Jenkins Pipeline [Chrome]"); capabilities.setCapability("name", "Maven Parallel Testing with Jenkins Pipeline [Chrome]"); capabilities.setCapability("platform", "Windows 10"); capabilities.setCapability("browserName", "Chrome"); capabilities.setCapability("version","latest"); capabilities.setCapability("tunnel",false); capabilities.setCapability("network",true); capabilities.setCapability("console",true); capabilities.setCapability("visual",true); driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), capabilities); System.out.println("Started session"); } @Test public void test_Selenium4_ToDoApp() throws InterruptedException { driver.navigate().to(URL); driver.manage().window().maximize(); try { /* Let's mark done first two items in the list. */ driver.findElement(By.name("li1")).click(); driver.findElement(By.name("li2")).click(); /* Let's add an item in the list. */ driver.findElement(By.id("sampletodotext")).sendKeys("Happy Testing at LambdaTest"); driver.findElement(By.id("addbutton")).click(); /* Let's check that the item we added is added in the list. */ String enteredText = driver.findElement(By.xpath("/html/body/div/div/div/ul/li[6]/span")).getText(); if (enteredText.equals("Happy Testing at LambdaTest")) { System.out.println("Demonstration of Jenkins is complete"); } } catch (Exception e) { System.out.println(e.getMessage()); } } @AfterClass public void tearDown() { if (driver != null) { ((JavascriptExecutor) driver).executeScript(+ status); driver.quit(); } } }
Googlesearchtest.java (внедрение тестового сценария — 2)
package org.selenium4; import org.junit.Assert; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.IExecutionListener; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Parameters; import org.testng.annotations.Test; import java.net.MalformedURLException; import java.net.URL; public class GoogleSearchTest implements IExecutionListener { /* protected static EdgeDriver driver; */ String URL = "https://www.google.com/"; String search_string = "LambdaTest"; WebDriver driver = null; WebElement search_box; String exp_title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"; public static String status = "passed"; public static String username = "user-name"; public static String access_key = "access-key"; @Override public void onExecutionStart() { System.out.println("onExecutionStart"); } @BeforeTest @Parameters(value={"browser","version","platform", "resolution"}) public void testSetUp(String browser, String version, String platform, String resolution) throws Exception { /* WebDriverManager.edgedriver().setup(); driver = new EdgeDriver(); */ DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("build", "Google Search - Maven Parallel Testing with Jenkins Pipeline"); capabilities.setCapability("name", "Google Search - Maven Parallel Testing with Jenkins Pipeline"); capabilities.setCapability("platform", platform); capabilities.setCapability("browserName", browser); capabilities.setCapability("version",version); capabilities.setCapability("tunnel",false); capabilities.setCapability("network",true); capabilities.setCapability("console",true); capabilities.setCapability("visual",true); try { driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), capabilities); } catch (MalformedURLException e) { System.out.println("Invalid grid URL"); } System.out.println("Started session"); } @Test public void test_Selenium4_GoogleSearch() throws InterruptedException { driver.navigate().to(URL); driver.manage().window().maximize(); try { /* Enter the search term in the Google Search Box */ search_box = driver.findElement(By.xpath("//input[@name='q']")); search_box.sendKeys(search_string); search_box.submit(); /* driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); */ /* Not a good programming practice, added for demonstration */ Thread.sleep(3000); /* Click on the first result which will open up the LambdaTest homepage */ WebElement lt_link = driver.findElement(By.xpath("//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")); lt_link.click(); /* driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); */ /* Not a good programming practice, added for demonstration */ Thread.sleep(5000); String curr_window_title = driver.getTitle(); Assert.assertEquals(curr_window_title, exp_title); } catch (Exception e) { System.out.println(e.getMessage()); } } @AfterTest public void tearDown() { if (driver != null) { ((JavascriptExecutor) driver).executeScript(+ status); driver.quit(); } } @Override public void onExecutionFinish() { System.out.println("onExecutionFinish"); } }
Код прохождения
Шаг 1 — Необходимые пакеты импортируются до того, как фактическая реализация отключается. Поскольку Framework Testng используется для тестирования; Следовательно, его пакеты также импортируются до того, как его аннотации могут быть использованы.
import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import static org.junit.Assert.*; import org.junit.Test.*;
Шаг 2 — IexcutyListener используется для мониторинга запуска и конца тестового набора, поскольку тестовый сценарий будет выполнен на различных входных комбинациях, которые передаются через файл Testng XML.
IexcutionListener содержит два метода — OnexecutyStart () и OneExcutionfinish (). OneExcutionStart () вызывается до начала теста, а OneCeCutionFinish () вызывается после того, как тесты/тестовые люксы закончили выполнение.
public class GoogleSearchTest implements IExecutionListener { /* protected static EdgeDriver driver; */ String URL = "https://www.google.com/"; ................................ ................................ ................................ @Override public void onExecutionStart() { System.out.println("onExecutionStart"); } @Override public void onExecutionFinish() { System.out.println("onExecutionFinish"); }
Шаг 3 — метод, реализованный под @Beforetest Аннотация будет работать до того, как любой метод теста, принадлежащий к классу в этом теге. Поскольку мы используем параметризованные тестирование с помощью Testng, аннотация @parameters (значение = {«браузер», «версия», «платформа», «Разрешение»}) добавляется в метод теста.
public class GoogleSearchTest implements IExecutionListener { /* protected static EdgeDriver driver; */ String URL = "https://www.google.com/"; String search_string = "LambdaTest"; WebDriver driver = null; .............................. .............................. public static String status = "passed"; public static String username = "user-name"; public static String access_key = "access-key"; .............................. .............................. @BeforeTest @Parameters(value={"browser","version","platform", "resolution"}) public void testSetUp(String browser, String version, String platform, String resolution) throws Exception { .............................. .............................. }
Эти параметры будут переданы значения от Testng.xml, пример параметра, показанного ниже:
Шаг 4 — Способ TestSetup является параметризованным способом, который итеративно принимает тестовые параметры от Testng.xml до конца набора тестового набора.
Поскольку тесты выполняются на Selenium Great Cloud На лямбдатесте учетные данные состоят из имени пользователя и токена доступа, который можно использовать для доступа к AbdateSt Grid — @ hub.lambdatest.com/wd/hub.
public void testSetUp(String browser, String version, String platform, String resolution) throws Exception { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("build", "Google Search - Maven Parallel Testing with Jenkins Pipeline"); capabilities.setCapability("name", "Google Search - Maven Parallel Testing with Jenkins Pipeline"); .............................. .............................. try { driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), capabilities); } catch (MalformedURLException e) { System.out.println("Invalid grid URL"); } System.out.println("Started session");
API RemoteWDRIVE использует возможности удаленного URL-адреса и браузера, которые генерируются с использованием генератора LambdaTest возможностей и передаются к способу в форме входных параметров.
try { driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), capabilities); } catch (MalformedURLException e)
Шаг 5 — Метод испытаний реализован под @Test
Аннотация. Соответствующие методы Selenium (aptelement, sendeys, please и многое другое) используются для определения поиска веб-элемента и выполнения соответствующих действий на одном.
@Test public void test_Selenium4_GoogleSearch() throws InterruptedException { driver.navigate().to(URL); driver.manage().window().maximize(); try { /* Enter the search term in the Google Search Box */ search_box = driver.findElement(By.xpath("//input[@name='q']")); search_box.sendKeys(search_string); search_box.submit(); .......................................... .......................................... } .......................................... .......................................... }
Шаг 6 — Блокировка задержек — это не хорошая практика программирования, но мы добавили несколько задержек для наблюдения за выходом.
WebElement lt_link = driver.findElement(By.xpath("//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")); lt_link.click(); /* Not a good programming practice, added for demonstration */ Thread.sleep(5000); .......................................... ..........................................
Шаг 7 — Метод, который реализован в соответствии с @Aftertest
Аннотация освобождает ресурсы, выделенные экземпляром соответствующей Webdriver.
@AfterClass public void tearDown() { if (driver != null) { ((JavascriptExecutor) driver).executeScript("lambda-status=" + status); driver.quit(); } }
Тестовый люкс — 2
Испытательный сценарий — 1 (Chrome на Windows 10)
- Перейдите к URL https://lambdatest.com.
- Проверьте название страницы
- Сравните название страницы с ожидаемым заголовком
- Утверждать Если названия не совпадают
Выполнение
Это так же, как тот, который используется для тестирования Suite-1, за исключением артефактидов и группировки.
4.0.0 org.example org.selenium.JenkinsMavenTest 1.0-SNAPSHOT UTF-8 org.testng testng 6.9.10 test org.seleniumhq.selenium selenium-java 4.0.0-alpha-6 org.testng testng 6.8.8 org.seleniumhq.selenium selenium-chrome-driver 4.0.0-alpha-6 io.github.bonigarcia webdrivermanager RELEASE test org.slf4j slf4j-nop 1.7.28 test com.github.lambdatest lambdatest-tunnel-binary 1.0.4 junit junit 4.12 test install maven-compiler-plugin 3.0 1.8 1.8 org.apache.maven.plugins maven-surefire-plugin 2.12.4 org.apache.maven.plugins maven-surefire-report-plugin 3.0.0-M5
CrossBrowserTest.java
package org.selenium.JenkinsMavenTest; import org.junit.Assert; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.net.MalformedURLException; import java.net.URL; public class CrossBrowserTest { /* protected static ChromeDriver driver; */ WebDriver driver = null; String URL = "https://www.lambdatest.com"; public static String status = "passed"; public static String username = "user-name"; public static String access_key = "access-key"; public static String expected_title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"; @BeforeClass public void testSetUp() throws MalformedURLException { /* System.setProperty("webdriver.chrome.driver", "C:\\EdgeDriver\\chromedriver.exe"); */ /* WebDriverManager.chromedriver().setup(); driver = new ChromeDriver(); */ DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("build", "(Test -2) Maven Parallel Testing with Jenkins Pipeline"); capabilities.setCapability("name", "(Test -2) Maven Parallel Testing with Jenkins Pipeline"); capabilities.setCapability("platform", "Windows 10"); capabilities.setCapability("browserName", "Chrome"); capabilities.setCapability("version","latest"); capabilities.setCapability("tunnel",false); capabilities.setCapability("network",true); capabilities.setCapability("console",true); capabilities.setCapability("visual",true); driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), capabilities); System.out.println("Started session"); } @Test public void test_Selenium4_Geolocation() throws InterruptedException { driver.navigate().to(URL); driver.manage().window().maximize(); try { String page_title = driver.getTitle(); Assert.assertEquals(page_title, expected_title); } catch (Exception e) { System.out.println(e.getMessage()); } } @AfterClass public void tearDown() { if (driver != null) { driver.quit(); } } }
Для демонстрации Maven и Jenkins с Selenium мы бы выполняли эти два тестовых люкса параллельно, используя проект Freestyle и трубопровода Дженкинса.
Настройка Jenkins для проекта Jenkins Selenium
Перед созданием новой работы в Дженкинс Это создает проект, упомянутый ранее, мы должны создать среду Дженкинса.
Шаг 1: Путь установки JDK должен быть добавлен в переменную системы системы. Это также требуется для JRE (среда выполнения Java).
Шаг 2: Скачать Дженкинс в .war Формат и запустите Jenkins, выполнив следующую команду на терминале:
java -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts allow-popups allow-popups-to-escape-sandbox; style-src 'unsafe-inline' *;" -Dsvnkit.http.sslProtocols=TLSv1 -jar Jenkins.war --httpPort=9090
Вместо 8080 (номер порта по умолчанию, используемый Jenkins) Мы начинаем службу Дженкинса на порту 9090.
Шаг 3: посетите localhost: 9090
В веб-браузере для начала использования Jenkins.
Создайте новый пользователь (с привилегиями администратора). Войдите в систему, используя это имя пользователя, чтобы продолжить использование Jenkins.
Шаг 4: Поскольку проект использует Maven и Jenkins с Selenium, глобальные настройки и пути для Java & Maven должны быть настроены на Jenkins. Для настройки этих настроек перейдите к «Настроить систему» в разделе «Конфигурация системы».
В элементе назвала «глобальные свойства», добавьте следующие переменные среды:
JAVA_HOME -MAVEN_HOME -
В нашем случае записи находятся ниже:
JAVA_HOME - C:\Program Files\Java\jdk1.8.0_251 MAVEN_HOME - C:\apache-maven\apache-maven-3.6.3\
Нажмите на Применять и Сохранить Отказ
Добавление этих переменных среды в конфигурации системы делает настройки Public (I.e. можно использовать для проекта Jenkins Freestyle Project и Jenkins Projection).
Шаг 5: HTML Publisher Plugin Должен быть установлен до того, как может быть выполнено действие после сборки для испытаний. То же самое можно сделать, навигацию на «Управление плагинами» и поиск «HTML Plugiver Plugin» на вкладке «Доступно». Нажмите «Установить» для установки плагина.
Примечание. Для тестирования перекрестных браузеров рекомендуется использовать Jenkins в формате .war, поскольку тесты выполняются в безголовом режиме только тогда, когда Jenkins используется в формате .war.
Селена Maven Jenkins Integration с использованием проекта Freestyle
Для создания проекта Freestyle, который использует интеграцию Selenium Maven Jenkins в качестве демонстрации, выполняет следующие шаги на Jenkins UI (I.E. Localhost: 9090/
)
( Примечание — Номер порта будет варьироваться в зависимости от порта, используемого Дженкинсом)
Шаг 1: В «Jenkins Ui» нажмите «Новый элемент».
Шаг 2: Введите имя работы как «Lambdatest — Selenium Maven Jenkins Integration (проект Maven) и выберите« Freestyle ».
Jenkins также предоставляет возможность создать проект «Maven», где настройки конфигурации, необходимые для настройки проекта, минимальны. Однако для этой демонстрации мы использовали проект «Freestyle».
Шаг 3: Перейти к «Build ‘🡪», вызывающую целей Maven верхнего уровня ». Версия Maven должна указывать на версию Maven, установленную на машине. В нашем случае это Maven 3.6.3.
Шаг 4: Нажмите «Advanced», чтобы установить цели, установите местоположение файлов POM для двух тестовых союзов. В нашем случае местоположения проекта ниже:
Как мы хотим выполнить параллельные сборки, мы используем следующую опцию с помощью команды MVN:
mvn -T 4 clean install
Эта команда выполнит сборки с 4 потоками. В разделе «Цели» вы должны ввести -T 4 чистую установку. Эта же цель установлена для Maven, основанных на обоих проектах. В «POM», дайте абсолютное расположение Pom.xml.
(I.e. Build 1 — C: \ Users \ lenovo \ IdeaProjects \ maven_jenkins \ pom.xml
Build 2 — C: \ Пользователи \ lenovo \ IdeaProjects \ maven_jenkins_2 \ pom.xml)
Шаг 5: «Действие после сборки» — публиковать HTML-отчеты, которые предоставляют информацию об общем сценарии тестов (I.E. Количество прошедших испытаний/неудачных/пропущенных и т. Д.). Выберите «Опубликовать HTML Reports» в «Добавьте действие после сборки».
Шаг 6: Maven Surefire Report Plugin Фалакирует сгенерированный тест — *. XML-файлы под $ {project_dir}/target/onefire-отчеты и рендерируют их с помощью doxia. В «каталоге HTML к Archive» введите абсолютный путь этого местоположения, содержащего VereFire отчетов.
Для тест-люкса 1:
HTML directory to archive - ${project_dir_1}/target/surefire-reports Index Page(s) - index.html Report Title - Test Scenario 1 Report
Для тест-люкса 2:
HTML directory to archive - ${project_dir_2}/target/surefire-reports Index Page(s) - index.html Report Title - Test Scenario 2 Report
Шаг 7: Проект теперь готовится. Нажмите на опцию «Создание сейчас», чтобы вызвать сборку.
Шаг 8: Нажмите на «Вывод консоли», чтобы засвидетельствовать прогресс построения, теста и этапов отчета.
Шаг 9: Как видно в «консольных журналах; Испытания успешно выполняются — пять тестовых случаев как часть первого тестового набора и один тестовый случай в составе второго тестового набора.
------------------------------------------------------- T E S T S ------------------------------------------------------- Running TestSuite onExecutionStart Aug 10, 2020 6:25:33 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS Started session Aug 10, 2020 6:25:33 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS Started session Aug 10, 2020 6:25:34 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Started session Aug 10, 2020 6:25:34 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS Started session Demonstration of Jenkins is complete PASSED: test_Selenium4_ToDoApp =============================================== To Do App Test Tests run: 1, Failures: 0, Skips: 0 =============================================== Aug 10, 2020 6:26:04 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Started session onExecutionFinish Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 107.038 sec Results : Tests run: 5, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ org.selenium4.CrossBrowserTest --- [INFO] Building jar: C:\Users\Lenovo\IdeaProjects\Maven_Jenkins\target\org.selenium4.CrossBrowserTest-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ org.selenium4.CrossBrowserTest --- [INFO] Installing C:\Users\Lenovo\IdeaProjects\Maven_Jenkins\target\org.selenium4.CrossBrowserTest-1.0-SNAPSHOT.jar to C:\Users\Lenovo\.m2\repository\org\example\org.selenium4.CrossBrowserTest\1.0-SNAPSHOT\org.selenium4.CrossBrowserTest-1.0-SNAPSHOT.jar [INFO] Installing C:\Users\Lenovo\IdeaProjects\Maven_Jenkins\pom.xml to C:\Users\Lenovo\.m2\repository\org\example\org.selenium4.CrossBrowserTest\1.0-SNAPSHOT\org.selenium4.CrossBrowserTest-1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ------------------------------------------------------- T E S T S ------------------------------------------------------- Running org.selenium.JenkinsMavenTest.CrossBrowserTest Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@6a38e57f Aug 10, 2020 6:27:35 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS Started session Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 23.51 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0paste the contents of Jenkinsfile as shown below. Click on Apply and Save.
Вот скриншоты отчетов HTML, которые генерируются для двух тестовых апартаментов Plugin Plugin HTML.
Селен Maven Jenkins Integration с использованием трубопровода Дженкинса
В этом разделе Maven и Jenkins с демонстрацией селена мы будем использовать трубопровод Jenkins, который использует удельную область домена (DSL) для реализации трубопровода в качестве кода.
Определение трубопровода Jenkins обычно записывается в файл с именем jenkinsfile. Этот файл будет содержать шаги, необходимые для запуска трубопровода Jenkins. Для быстрой резюме на декларативном трубопроводе Jenkins вы можете проверить это Учебник трубопроводов Дженкинса Отказ
Чтобы интегрировать Maven и Selenium с помощью трубопровода Дженкинса, вы должны выполнить шаги, упомянутые ниже:
Шаг 1: Создайте новый элемент под названием «Lambdatest — Selenium Maven Jenkins Integration (Pipeline Project)« Трубопровод типа ».
Шаг 2: В определении трубопровода вставьте содержимое jenkinsfile, как показано ниже. Нажмите на применить и сохранить.
pipeline { agent any tools { maven 'MAVEN_3.6.3' jdk 'JDK_1.8.0_251' } stages { stage('Run Tests') { environment { PROJECT_DIR_1 = "C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins" PROJECT_DIR_2 = "C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins_2" } parallel { stage('Test Scenario 1') { agent { label "Slave_1" } steps { echo 'maven clean' bat ' mvn -f %PROJECT_DIR_1%\\pom.xml clean install' } post { success { publishHTML ([ allowMissing: false, alwaysLinkToLastBuild: false, includes: '**/*', keepAll: true, reportDir: 'C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins\\target\\surefire-reports', reportFiles: 'index.html', reportName: 'Test Scenario 1 Report' ]) } } } stage('Test Scenario 2') { agent { label "Slave_2" } steps { echo 'maven clean' bat ' mvn -f %PROJECT_DIR_2%\\pom.xml clean install' } post { success { publishHTML ([ allowMissing: false, alwaysLinkToLastBuild: false, includes: '**/*', keepAll: true, reportDir: 'C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins_2\\target\\surefire-reports', reportFiles: 'index.html', reportName: 'Test Scenario 2 Report' ]) } } } } } } }
Шаг 3: В разделе Post-Build Plugin HTML Plugiver используется для создания отчетов о тестировании после выполнения для двух тестовых сценариев.
Трубопровод в проходе
Шаг 1: Эта конкретная работа Jenkins может работать на любом агенте. Раздел с директивой Tools содержит все инструменты, которые должны быть установлены автоматически. То же самое также добавляется в переменную среды пути.
pipeline { agent any tools { maven 'MAVEN_3.6.3' jdk 'JDK_1.8.0_251' }
В машине, где будут выполнены тесты, JDK 1.8.0_251 и Maven 3.6.3 установлены. Алиас Maven и JDK указывают на соответствующие версии Maven и JDK.
Шаг 2: Директива об окружающей среде используется для определения переменных среды Project_dir_1 и Project_dir_2, который указывает на место, где присутствуют проекты Java. Эти переменные среды могут быть использованы для всех этапов или этапов, специфичных этапом, поскольку они определены на прогонах основных этапов.
stages { stage('Run Tests') { environment { PROJECT_DIR_1 = "C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins" PROJECT_DIR_2 = "C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins_2" }
Шаг 3: Параллельная директива в Дженкинсах используется для выполнения стадий трубопровода параллельно. В нашем случае трубопровод Дженкинса состоит из двух этапов — тестовый сценарий 1 и тестовой сценарий 2.
stages { stage('Run Tests') { environment { PROJECT_DIR_1 = "C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins" PROJECT_DIR_2 = "C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins_2" } parallel { stage('Test Scenario 1') { ......................................... ......................................... } stage('Test Scenario 2') { ......................................... ......................................... } } } }
Шаг 4: Действия, выполняемые на обоих этапах, точно аналогичны, за исключением того, что они выполняются на разных проектах. Этап ‘ Тестовый сценарий 1
«Выполнен на узле» Plave_1
«И этап» Тестовый сценарий 2
«Выполнен на узле» Slave_2
‘.
parallel { stage('Test Scenario 1') { agent { label "Slave_1" } ............. ............. stage('Test Scenario 2') { agent { label "Slave_2" }
Если вы намерены выполнить трубопровод на любом агенте, вы можете пропустить с использованием любого конкретного имени агента на этих этапах. Вы можете обратиться к нашему Что такое Дженкинс Блог для понимания создания узлов в Дженкинсах.
В нашем случае мы создали два узла (SLAVE_1 и SLAVE_2) и сделали их онлайн, прежде чем запустить тесты.
Шаг 5: На следующем шаге строить сборку. Command MVN Clean Change выполняется на POM.XML, который присутствует в каталоге проекта. Мы используем машину Windows для выполнения, поэтому мы использовали команду BAT (или Batch) для запуска сборки Maven.
steps { echo 'maven clean' bat ' mvn -f %PROJECT_DIR_1%\\pom.xml clean install' }
Шаг 6: Действие после сборки используется для публикации отчетов HTML для соответствующих этапов. Действия добавляются в соответствии с Директивой «Post». Мы хотим вызвать создание отчета о тестировании только в том случае, если сборка успешна. Следовательно, действия находятся под руководством успеха.
Как видно в демонстрации с использованием Freestyle Project, ReginectDIR установлен на место, где создаются вершины отчетов (i.e. $ {project_dir}/target/onefire-reports). Поле ReportFiles установлено на index.html (i.e. $ {project_dir}/target/surefire-reports/index.html).
post { success { publishHTML ([ allowMissing: false, alwaysLinkToLastBuild: false, includes: '**/*', keepAll: true, reportDir: 'C:\\Users\\Lenovo\\IdeaProjects\\Maven_Jenkins\\target\\surefire-reports', reportFiles: 'index.html', reportName: 'Test Scenario 1 Report' ]) } }
Как только трубопровод добавлен в jenkinsfile, нажмите «Создать сейчас», чтобы начать процесс сборки.
Вы можете наведите курсор на любую сцену и нажать на «logs», чтобы посмотреть на прогресс выполнения этого конкретного этапа. Как видно из сценического снижения, два этапа выполняются параллельно.
Поскольку мы используем параллельные этапы с декларативным трубопроводом в Дженкинах, соответствующие тестовые случаи выполняются параллельно на сетке селена на основе облака на лямбдатесте. Как показано ниже, наш план Lambdatest поддерживает максимум пять тестов для выполнения параллельно.
Как показано ниже, тесты выполнили успешно.
Общее время выполнения составило примерно 6 минут. Вы можете зависеть на любую сцену, чтобы просмотреть журналы, связанные с этим этапом.
Как видно в усеченных журналах, очевидно, что шаги на двух этапах выполняются параллельно:
Вот скриншот отчетов HTML, которые генерируются как часть действий после сборки:
Упаковка
Запуск тестов Selenium в Jenkins дает гибкость для прохождения тестов каждый раз, когда есть изменение программного обеспечения, и эти изменения должны быть проверены на различных входных комбинациях. Maven используется в проектах Java, поскольку оно облегчает задачу управляющих зависимостей через файл POM.XML.
Фристайл проекты в Дженкинсах должны использоваться для проектов, которые не являются высокой сложностью. Трубопровод Jenkins должен использоваться, когда вы хотите определить трубопровод развертывания в качестве кода. Параллельная директива в трубопроводе Дженкинса должна использоваться для использования параллельного исполнения этапов в Дженкинсах. Дженкинсский трубопровод может быть интегрирован с облачной селеной сеткой, такими как лямбдатест , который также позволяет интегрировать Maven и Jenkins с Selenium более эффективным образом.
Мы надеемся, что, следуя в этом руководстве, вы легко интегрируете Maven и Jenkins с Selenium. Спасибо за чтение!
Оригинал: «https://dev.to/himanshusheth004/how-to-integrate-jenkins-maven-with-selenium-3gm8»