3. Погружаемся в инструментарий и библиотеки - qa-guru/knowledge-base GitHub Wiki
Gradle — система для автоматизации сборки приложений, применяющая языки Java, Groovy, JavaScript, Kotlin и другие. Сама система написана на Java, Kotlin и Groovy и поддерживает плагины на других языках. Распространяется бесплатно, как ПО с открытым исходным кодом.
Gradle необходима для ускорения сборки проекта. Можно собрать весь проект руками, но на это уйдет много времени. А можно написать скрип, который сам выполнит все рутинные операции и выдаст готовую сборку.
В других типах систем сборки кода используется языка разметки XML. Такой подход усложняет написание конфигурации проекта. Использование Groovy расширяет возможности и ускоряет работу.
Gradle распространяется по открытой лицензии, поэтому разработчики могут писать для него плагины и библиотеки, что значительно расширяет возможности системы.
Инструмент подстраивается под любую архитектуру проекта, что позволяет использовать его практически во всех сферах разработки и тестирования.
Gradle создает текстовый файл сценария сборки (BuildScript), который состоит из:
-
Project. Финальный продукт сборки. Проект может представлять собой JAR-файл, архив или веб-приложение со всеми подключенными библиотеками. Проект может состоять как из одного модуля, так и из нескольких.
-
Task. Задачи, которые необходимо выполнить для того, чтобы собрать проект. Задачи могут быть связаны между собой. Проект считается собранным, когда выполнены все задачи.
-
Dependency. Необходимы для сборки модули и библиотеки. Внешние зависимости обычно называют сторонними библиотеками, а внутренние — модулями проекта.
Предполагается, что у вас уже установлена библиотека 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
. Это необязательное условие, но такой подход считается правилом хорошего тона. Далее все тесты необходимо создавать в корневом пакете.
Аннотации JUnit 5 пока можно считать своеобразными метками, указывающим, что конкретный метод/класс надо выполнить по-особенному. Аннотация @Test
необходима для отметки метода/класса в качестве теста JUnit.
Пример:
Система проверит утверждение в скобках, и если тест будет пройден (сообщение в скобках окажется истинной, то тест будет считаться пройденным)
@Test
void assertTets() {
Assertions.assertTrue(2 < 3);
}
Если есть действия, которые необходимо выполнять перед каждым тестом или после него, то необязательно прописывать их в каждом тесте. Можно написать один метод/класс и отметить его как @BeforeEach (перед каждым) или @AfterEach (после каждого). В таком случае эти действия автоматически будут выполнять перед каждым тестом или после него.
@BeforeEach
void openPage() {
Selenide.open("https://page.com");
}
@AfterEach
void closeWindow() {
WebDriverRunner.closeWindow();
}
Если какие-то методы необходимо выполнять в начале перед всеми действиями или после них, то их следует отметить аннотациями @BeforeAll и @AfterAll соответственно. Также важно отметить, что такие методы должны обязательно быть static
@BeforeAll
static void initDB() {
//...
//...
}
@AfterAll
static void cleanDB() {
//...
//...
}
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"));