Skip to content

3. Погружаемся в инструментарий и библиотеки

Vasenkov Stanislav edited this page May 25, 2022 · 3 revisions

Gradle

Gradle — система для автоматизации сборки приложений, применяющая языки Java, Groovy, JavaScript, Kotlin и другие. Сама система написана на Java, Kotlin и Groovy и поддерживает плагины на других языках. Распространяется бесплатно, как ПО с открытым исходным кодом.

Gradle необходима для ускорения сборки проекта. Можно собрать весь проект руками, но на это уйдет много времени. А можно написать скрип, который сам выполнит все рутинные операции и выдаст готовую сборку.

Особенности Gradle

Использования Groovy вместо XML

В других типах систем сборки кода используется языка разметки XML. Такой подход усложняет написание конфигурации проекта. Использование Groovy расширяет возможности и ускоряет работу.

Открытость

Gradle распространяется по открытой лицензии, поэтому разработчики могут писать для него плагины и библиотеки, что значительно расширяет возможности системы.

Простота миграции

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

Как это работает

Gradle создает текстовый файл сценария сборки (BuildScript), который состоит из:

  • Project. Финальный продукт сборки. Проект может представлять собой JAR-файл, архив или веб-приложение со всеми подключенными библиотеками. Проект может состоять как из одного модуля, так и из нескольких.

  • Task. Задачи, которые необходимо выполнить для того, чтобы собрать проект. Задачи могут быть связаны между собой. Проект считается собранным, когда выполнены все задачи.

  • Dependency. Необходимы для сборки модули и библиотеки. Внешние зависимости обычно называют сторонними библиотеками, а внутренние — модулями проекта.

JUnit 5

Как подключить

Предполагается, что у вас уже установлена библиотека JUnit 5 и вы успели выполнить первое домашнее задание. Если нет, то перейдите по ссылке и следуйте руководству.

Для подключения JUnit 5 к проекту необходимо добавить в раздел dependencies файла build.gradle следующее:

dependencies {
    testImplementation (
            "org.junit.jupiter:junit-jupiter:5.8.2")
}

test {
    useJUnitPlatform()
}

Далее необходимо создать корневой пакет. Для этого в папке src надо перейти в директорию test и в ней создать каталог с именем вашей компании или личным сайтом. При этом домен верхнего уровня должен стоят в начале. К примеру, guru.qa или com.vk. Это необязательное условие, но такой подход считается правилом хорошего тона. Далее все тесты необходимо создавать в корневом пакете.

Аннотация @Test

Аннотации JUnit 5 пока можно считать своеобразными метками, указывающим, что конкретный метод/класс надо выполнить по-особенному. Аннотация @Test необходима для отметки метода/класса в качестве теста JUnit.

Пример:
Система проверит утверждение в скобках, и если тест будет пройден (сообщение в скобках окажется истинной, то тест будет считаться пройденным)

@Test
void assertTets() {
    Assertions.assertTrue(2 < 3);
}

Аннотации @BeforeEach и @AfterEach

Если есть действия, которые необходимо выполнять перед каждым тестом или после него, то необязательно прописывать их в каждом тесте. Можно написать один метод/класс и отметить его как @BeforeEach (перед каждым) или @AfterEach (после каждого). В таком случае эти действия автоматически будут выполнять перед каждым тестом или после него.

@BeforeEach
void openPage() {
    Selenide.open("https://page.com");
}

@AfterEach
void closeWindow() {
    WebDriverRunner.closeWindow();
}

Аннотации @BeforeAll и @AfterAll

Если какие-то методы необходимо выполнять в начале перед всеми действиями или после них, то их следует отметить аннотациями @BeforeAll и @AfterAll соответственно. Также важно отметить, что такие методы должны обязательно быть static

@BeforeAll
static void initDB() {
    //...
    //...
}

@AfterAll
static void cleanDB() {
    //...
    //...
}

Selenide

Selenide — фреймворк, разработанный для автоматизации тестирования с помощью Selenium Web Driver. Представляет собой автоматизированную систему тестирования ПО. Система помогает отправлять HTTP-запросы и получать ответы.

Как подключить

В файле build.gradle необходимо указать:

dependencies {
    testImplementation (
            "com.codeborne:selenide:6.3.5")
}

Вместе с подключенным JUnit 5 будет выглядеть так:

dependencies {
    testImplementation (
            "com.codeborne:selenide:6.3.5",
            "org.junit.jupiter:junit-jupiter:5.8.2")
}

test {
    useJUnitPlatform()
}

Текстовые поля и проверка вывода

Для ввода в текстовые поля сперва необходимо найти на странице необходимый CSS-селектор. Для этого в Chrome надо открыть режим просмотра кода страницы, нажать на иконку выбора элементов (1), навести на необходимое поле (2) и браузер подскажет имя CSS-селектора (2, 4).

Далее напишем код для теста этого текстового поля:

@Test
void fillFormTest() {
    open("https://demoqa.com/text-box");

    $("[id=userName]").setValue("Ivan Ivanov");
    // Код следует повторить для всех полей на странице
}

Отправка формы на странице из примера подразумевает клик по кнопке. Для этого ищем селектор кнопки, но вместо setValue (нам не надо вводить значение в кнопку) указываем click.

@Test
void fillFormTest() {
    open("https://demoqa.com/text-box");

    $("[id=userName]").setValue("Ivan Ivanov");
    $("[id=submit]").click();
}

Далее необходимо проверить, что все данные отправились верно. Для этого напишем отдельные тесты:

@Test
void fillFormTest() {
    open("https://demoqa.com/text-box");

    $("[id=userName]").setValue("Ivan Ivanov");
    $("[id=submit]").click();

    $("[id=output]").shouldHave(text("Ivan Ivanov"));

Если надо проверить несколько значений, то можно поступить так:

$("[id=output]").shouldHave(text("Ivan Ivanov"), text("some text"), text("some text"));

Содержание
Командная строка
Кодировка UTF-8 в Java
Список полезных книг для автоматизаторов тестирования на языке Java
Список полезных книг для автоматизаторов тестирования на языке Python Структура проекта Github README.md

Java:
1. Вводное занятие. Сразу к практике.
2. Git. GitHub. Погружаемся.
3. Погружаемся в инструментарий и библиотеки
4. Основы Java
5. Продолжаем разрабатывать автотесты. PageObjects
6. JUnit 5
7. Allure Reports
8. Работа с файлами
9. Selenide #1
10. Jenkins. Создаем первую задачу
11. Управляем параметрами в коде и в Jenkins
12. Отправляем уведомления о результатах прохождения автотестов
13. Учимся быстро разрабатывать проекты для тестовых заданий
14. Selenoid
15. Библиотека Owner
16. REST API. Пишем автотесты с Rest assured
17. REST API. Декомпозируем UI тесты. Подключаем отчетность
18. REST API. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Allure TestOps
21. Переезд на собственную инфраструктуру Java

Python:
1. Вводное занятие. Сразу к практике!
2. Погружаемся в инструментарий и библиотеки
3. Git. GitHub. Погружаемся.
4. Основы Python
5. Selene #1
6. Основы Python. Часть II
7. Основы Python. Часть III
8. Page Object
9. Allure Reports
10. Работаем с файлами Python
11. Jenkins. Создаем первую задачу и управляем параметрами Python
12. Телеграм бот. Отправляем уведомления о результатах прохождения тестов
13. Pytest
14. Selenoid
15. Pytest. Часть II
16. Venv, Poetry и управление зависимостями проекта
17. REST API. Часть I. Пишем автотесты с Requests
18. REST API. Часть II. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Мобильная автоматизация #2. Разрабатываем автотесты с эмулятором Android устройства
21. Allure TestOps
22. Переезд на собственную инфраструктуру Python

Clone this wiki locally