3. Погружаемся в инструментарий и библиотеки - qa-guru/knowledge-base GitHub Wiki

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"));

⚠️ **GitHub.com Fallback** ⚠️