Зависимости для создания автотестов в Intellij IDEA JAVA + Maven + JUnit

POM Файл POM (Project Object Model) играет ключевую роль в автоматической сборке проекта в Apache Maven. Он описывает все аспекты проекта, которые необходимы для его сборки и управления зависимостями.

POM

Файл POM (Project Object Model) играет ключевую роль в автоматической сборке проекта в Apache Maven. Он описывает все аспекты проекта, которые необходимы для его сборки и управления зависимостями.

Основные элементы файла POM:

  1. modelVersion — указывает версию модели POM, с которой вы работаете.
  2. groupId — уникальный идентификатор группы проекта. Обычно это обратный домен компании, разработавшей библиотеку.
  3. artifactId — уникальное имя проекта.
  4. version — версия проекта. Используется для идентификации конкретной версии библиотеки в репозиториях.
  5. packaging — тип упаковки проекта. Может быть jar, war и т.д.
  6. dependencies — список зависимостей проекта. Каждая зависимость описывается тегом <dependency>.
POM Файл POM (Project Object Model) играет ключевую роль в автоматической сборке проекта в Apache Maven. Он описывает все аспекты проекта, которые необходимы для его сборки и управления зависимостями.-2

Пример простого файла POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

В этом примере файл POM определяет проект с идентификатором группы com.example, идентификатором артефакта my-project и версией 1.0.0. Тип упаковки проекта — jar. Также указана зависимость от библиотеки JUnit для тестирования.

Когда библиотек в проекте становится слишком много, и список зависимостей занимает больше двух экранов на мониторе, удобно вынести версии библиотек в отдельный файл свойств. Это позволит хранить все версии библиотек в одном месте, что упростит управление зависимостями и обновление версий библиотек в будущем.

POM Файл POM (Project Object Model) играет ключевую роль в автоматической сборке проекта в Apache Maven. Он описывает все аспекты проекта, которые необходимы для его сборки и управления зависимостями.-3
POM Файл POM (Project Object Model) играет ключевую роль в автоматической сборке проекта в Apache Maven. Он описывает все аспекты проекта, которые необходимы для его сборки и управления зависимостями.-4

У тега <scope> есть несколько значений:

  • compile — этот параметр устанавливается по умолчанию для всех. Он означает, что зависимость берётся из репозитория для компиляции.
  • provided — этот параметр похож на compile, но он сообщает JDK, что зависимость используется ещё и во время выполнения.
  • runtime — эта зависимость используется только на этапе выполнения.
  • system — зависимость, отмеченная этим флагом, находится в папке с проектом, и её никогда не ищут в репозиториях. Для этого также указывается путь тегом.

Какие библиотеки нужны будут для процесса автоматизации тестирования?

Junit

JUnit — это самый популярный фреймворк для модульного тестирования приложений на Java. Последняя версия этого инструмента, JUnit 5, предлагает ещё более широкий и мощный набор функций. Без JUnit 5 запуск тестов был бы крайне затруднительным!

Требуется просто добавить следующую зависимость в наш pom.xml:

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

${junit.version} - сразу выносим значение версии в properties

<properties>
<junit.version>5.6.2</junit.version>
</properties>

Фреймворк

Один из самых популярных фреймворков Maven.

Maven — это фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах POM (Project Object Model), написанных на языке XML.

Maven обеспечивает декларативную сборку проекта, где в файлах описания проекта содержится его спецификация, а не отдельные команды выполнения. Все задачи по обработке файлов Maven выполняет посредством их обработки последовательностью встроенных и внешних плагинов. Maven используется для построения и управления проектами, написанными на Java, C#, Ruby, Scala и других языках.

При создании проекта мы использовали его за основу, поэтому у нас и создался проект под MAven. Об этом говорил в данной статье:

Selenium WebDriver

Для управления драйвером из клиентского кода нам нужно подключить требуемую для используемого языка программирования реализацию библиотеки WebDriver.

На этой странице есть все доступные версии библиотеки.

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium-java.version}</version>
</dependency>

Логирование автотестов

В дальнейшем столкнётесь с тем, что упавший тест хорошо бы обработать. Узнать где упал, из за чего, было бы здорово получить даже скриншот. Но также важно получить логи упавшего теста, для того чтобы из отчёта можно было разобрать, что не понравилось JAVA

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j-simple.version}</version>
</dependency>

SQL

В тестах также нам понадобятся Базы данных, чтобы найти/изменить/проверить нужные значения по ходу автотеста:

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.18</version>
</dependency>

Для разных БД нужны разные зависимости, их не сложно найти, главное понять какая у вас. В данном примере postgreSQL

Assertions

В тестах самое главное - это проверки, поэтому вот удобная зависимость для них:

<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.19.0</version>
<scope>test</scope>
</dependency>

Отчёт по прохождению тестов

После тестов всегда нужно знать результат. Давайте внедрим это в наш проект. В данном случае я использую информативный отчёт allure.

Можете подробнее изучить здесь.

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire.version}</version>
<configuration>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
-Dfile.encoding=UTF-8
</argLine>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>${allure-maven.version}</version>
<configuration>
<reportVersion>${reportVersion.version}</reportVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>

Отчёт Allure

Для генерации отчётов будем использовать библиотеку Allure

<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-java-commons</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>
  • Для генерации отчётов Allure для API тестов, понадобятся следующие зависимости:
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-rest-assured</artifactId>
<version>2.17.0</version>
</dependency>

Selenium WebDriver

Для управления драйвером из клиентского кода нам нужно подключить требуемую для используемого языка программирования реализацию библиотеки WebDriver.

На этой странице есть все доступные версии библиотеки.

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium-java.version}</version>
</dependency>

ChromeDriver

При компиляции ваших тестов с запуском браузера Chrome, вы столкнётесь с тем, что для запуска браузера нужно указывать его актуальную версию. Это одно из обязательных условий запуска тестов в браузере! Для этого нужно:

  • Скачать Google Chrome на официальном сайте
  • Загрузить драйвер, перейдя на официальный сайт ChromeDriv
  • После распаковки архива переместим файл драйвера в папку resources.
  • Нужно указать в setProperty расположение данного драйвера
  • И лишь потом запустить его

Это ведь столько времени! Способ выше отлично работает, пока используется одна версия конкретного браузера. Однако в реальном мире подобное управление драйверами сулит большими хлопотами.

Есть актуальное решение, использовать данную зависимость, которая избавит вас от всех хлопот и будет автоматически подтягивать актуальную версию браузера!

<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>${webdrivermanager.version}</version>
</dependency>

Просто перед инициализацией теста нужно будет указать:

WebDriverManager.chromedriver().setup();

WebDriver driver = new ChromeDriver();

И всё у вас актуальная версия, без скачиваний различных файлов!

API тесты

  • В автоматизированном тестировании никуда без тестов API, для реализации их в проекте также нужны зависимости:
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.6.3</version>
<scope>test</scope>
</dependency>
  • Для запуска фреймворков тестирования на JVM (виртаульной машине Java), а также предоставляет API для запуска тестов из консоли, нужна зависимость:
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>1.8.0-M1</version>
</dependency>

В этих примерах мы рассмотрели основные инструменты, необходимые для создания автотестов. Выбор инструментов зависит от индивидуальных предпочтений тестировщика, и это абсолютно нормально. Я поделился инструментами, которые успешно использую уже долгое время, но применять их или нет — решать вам! Информация актуальна на май 2024 года.

Итоговый pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>JAVA</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>UI.JAVA</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>5.6.2</junit.version>
<maven-surefire.version>3.0.0-M5</maven-surefire.version>
<aspectj.version>1.9.5</aspectj.version>
<allure-maven.version>2.11.2</allure-maven.version>
<reportVersion.version>2.4.1</reportVersion.version>
<selenium-java.version>3.141.59</selenium-java.version>
<webdrivermanager.version>5.5.3</webdrivermanager.version>
<slf4j-simple.version>1.7.30</slf4j-simple.version>
<allure.results.directory>target/allure-results</allure.results.directory>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire.version}</version>
<configuration>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
-Dfile.encoding=UTF-8
</argLine>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>${allure-maven.version}</version>
<configuration>
<reportVersion>${reportVersion.version}</reportVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- фреймфорк JUnit Jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Selenium WebDriver позволяет автоматизировать взаимодействие с веб-браузерами -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium-java.version}</version>
</dependency>
<!-- для автоматической версии Chrome driver -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>${webdrivermanager.version}</version>
</dependency>
<!-- эффективно автоматизировать тестирование современных динамических веб приложений - значок $ -->
<!-- <dependency>-->
<!-- <groupId>com.codeborne</groupId>-->
<!-- <artifactId>selenide</artifactId>-->
<!-- <version>6.3.5</version>-->
<!-- </dependency>-->
<!-- для поддержки более ранних версий junit -->
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>
<!-- генерация отчёта allure -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>
<!-- Allure Java Commons предоставляет набор классов и интерфейсов, которые позволяют интегрировать Allure в проекты на основе Java, включая поддержку JUnit и TestNG -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-java-commons</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>
<!-- для отчёта в Allure API -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-rest-assured</artifactId>
<version>2.17.0</version>
</dependency>
<!-- RestAssured упрощает процесс написания тестов для REST API -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
<!-- Maven Plugin API предоставляет интерфейс для разработки собственных плагинов Maven -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.6.3</version>
<scope>test</scope>
</dependency>
<!-- для преобразования XML to Json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220924</version>
</dependency>
<!-- служит основой для запуска фреймворков тестирования на JVM (виртаульной машине Java), а также предоставляет API для запуска тестов из консоли -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>1.8.0-M1</version>
</dependency>
<!-- для логирования -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j-simple.version}</version>
</dependency>
<!-- для подключение к sql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.18</version>
</dependency>
<!-- для подключение к sql по ssh -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
<!-- для рандомных значений -->
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>0.15</version>
</dependency>
<!-- содержит полезные методы для работы с файлами -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- Для удобных assert -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.19.0</version>
<scope>test</scope>
</dependency>
<!-- Для редактирования xml -->
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.8.1</version>
</dependency>
<!-- Hamcrest предоставляет набор готовых утверждений, которые можно использовать для проверки различных условий в тестах-->
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
</dependency>
<!-- Selenium DevTools предоставляет доступ к инструментам разработчика браузера, таким как консоль JavaScript-->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-devtools</artifactId>
<version>4.0.0-rc-1</version>
<scope>test</scope>
</dependency>
<!-- Lombok автоматически генерирует геттеры, сеттеры, конструкторы и другие методы, избавляя разработчика от необходимости писать этот код вручную-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!