Использование в тесте¶
Для создания UI-тестов, библиотека используется в сочетании с фреймворком JUnit.
Доступно несколько способов:
Выбор подхода зависит от специфики разрабатываемых тестов.
Самостоятельная инициализация окружения¶
При самостоятельной инициализации окружения необходимо реализовать полный цикл
подключения к серверу приложений и получения объекта приложения.
Вы должны выполнить эти действия,
самостоятельно, написав соответствующий код в методе, аннотированном JUnit-аннотацией @BeforeAll
.
Также потребуется реализация процесса отключения от
сервера приложений, написав соответствующий код в методе, аннотированном JUnit-аннотацией @AfterAll
.
Класс тестов должен сохранять объекты клиента и приложения в статических переменных, обеспечивая доступ к ним во время выполнения тестов.
Пример теста повторяет логику примера Без использования JUnit.
package ru.bitec.gsautomation.examples.example2;
import org.junit.jupiter.api.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import ru.bitec.gs.automation.client.Client;
import ru.bitec.gs.automation.client.ClientBuilder;
import ru.bitec.gs.automation.client.login.LoginStrategy;
import ru.bitec.gs.automation.client.login.LoginStrategyFactory;
import ru.bitec.gs.automation.client.ui.Application;
import ru.bitec.gs.automation.security.CredentialsFactory;
import ru.bitec.gs.automation.security.UserPassword;
import ru.bitec.gs.automation.security.UserPasswordSolution;
public class ClientTest {
private static Application application; // Объект приложения
private static Client client; // Объект клиента gs-automation
@BeforeAll
public static void beforeAll() throws Exception {
UserPasswordSolution userCredential = CredentialsFactory.userPasswordSolution("admin", "admin", "PGTEST");
UserPassword adminCredential = CredentialsFactory.userPassword("admin", "admin");
LoginStrategy loginStrategy = LoginStrategyFactory.urlCredentials(userCredential, "gtk-Gs3_QAApplication", "gtk-ru.bitec.app.btk.Btk_Notification#Head");
RemoteWebDriver remoteWebDriver = new ChromeDriver();
client = ClientBuilder.forWebDriver(remoteWebDriver).setUrl("http://localhost:8080").setLoginStrategy(loginStrategy).setAdminCredentials(adminCredential).build();
application = client.login();
}
@AfterAll
public static void afterAll() throws Exception {
client.logout();
client.close();
}
@Test
public void loginAndOpenCloseApplication_noExceptions() {
application.mainForm().mainMenu().itemByCaption("gs-automation", "Редакторы на карточке").click();
}
}
Полный пример проекта example2
доступен в Коллекции примеров проектов.
Использование стандартной инициализации окружения¶
Библиотека предоставляет класс DefaultTestEnvironment
.
Класс управляет подключением и отключением клиента от сервера.
Для его использования нужно унаследоваться от этого класса и изменить методы,
аннотированные JUnit-аннотациями @BeforeAll
и @AfterAll
.
Пример с использованием класса
DefaultTestEnvironment
.
package ru.bitec.gsautomation.examples.example3;
import org.junit.jupiter.api.*;
import ru.bitec.gs.automation.environment.DefaultTestEnvironment;
@TestInstance(Lifecycle.PER_CLASS)
public class ClientTest extends DefaultTestEnvironment {
@BeforeAll
public void beforeAll() throws Exception {
super.testClassPrelude();
}
@AfterAll
public void afterAll() throws Exception {
super.testClassEpilogue();
}
@Test
public void loginAndOpenCloseApplication_noExceptions() {
application.mainForm().mainMenu().itemByCaption("gs-automation", "Редакторы на карточке").click();
}
}
Полный пример проекта example3
доступен в Коллекции примеров проектов.
Преимущества использования DefaultTestEnvironment
очевидны: упрощается структура тестового класса и сокращается количество необходимого кода.
Note
Методы, помеченные аннотациями JUnit (
@BeforeAll
и@AfterAll
), не могут быть объявлены как статические.Параметры подключения клиента к серверу должны задаваться, например, в файле конфигурации (
gs-automation.properties
). Детально это рассмотрено в главе Параметры окружения выполнения.Необходимо использовать аннотацию
@TestInstance(Lifecycle.PER_CLASS)
.Класс
DefaultTestEnvironment
содержится в дополнительной компоненте gs-automation-environments.
See also
Спецификация: Параметры окружения
Спецификация: Репозиторий библиотеки
API:
ru.bitec.gs.automation.environment.DefaultTestEnvironment
Справочник API: API окружения выполнения
Руководство пользователя: Состав библиотеки
Руководство пользователя: Параметры окружения выполнения
Расширение JUnit¶
Библиотека предоставляет специальный компонент gs-automation-junit. В нем содержатся дополнительные классы для интеграции с JUnit.
Расширение JUnit может полностью скрыть процессы подключения и отключения от сервера приложений, делая тесты более простыми и понятными.
Доступно два варианта расширения JUnit:
Расширение тестового класса аннотацией @ExtendWith с указанием резолвера.
Расширение тестового класса наследованием от расширяющего окружения выполнения.
Note
В общем случае рекомендуется использовать вариант расширения аннотацией @ExtendWith.
Применяйте расширение наследованием тогда, когда нужна максимальная гибкость инициализации и использования окружения.
Пример проекта example5
доступен в Коллекции примеров проектов.
Расширение JUnit через @ExtendWith¶
При этом варианте расширения, тестовый класс нужно аннотировать JUnit-аннотацией
@ExtendWith, с указанием резолвера GsAutomationJUnitResolver
.
Резолвер выполнит инициализацию окружения выполнения тестов и обеспечит передачу окружения в тестовые методы через аргумент. После выполнения тестов тестового класса резолвер корректно остановит окружение.
Пример, эквивалентный предыдущим, но с использованием расширения JUnit с помощью аннотации @ExtendWith.
package ru.bitec.gsautomation.examples.example5;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import ru.bitec.gs.automation.client.ui.Application;
import ru.bitec.gs.automation.junit.GsAutomationJUnitResolver;
@ExtendWith(GsAutomationJUnitResolver.class)
public class ClientResolverTest {
@Test
public void loginAndOpenCloseApplication_noExceptions(GsAutomationJUnitResolver.Environment env) {
Application application = env.getApplication();
application.mainForm().mainMenu().itemByCaption("gs-automation", "Редакторы на карточке").click();
}
}
Note
Методы, помеченные аннотациями JUnit (
@BeforeAll
и@AfterAll
), должны быть объявлены как статические.Параметры подключения клиента к серверу должны задаваться в файле конфигурации (
gs-automation.properties
). Детально это рассмотрено в главе Параметры окружения выполнения.Окружение выполнения передается во все методы тестового класса, аннотированые аннотациями JUnit, как аргумент этих методов.
При использовании этого варианта расширения не предоставляется возможность переопределять методы окружения.
Класс
GsAutomationJUnitResolver
содержится в дополнительной компоненте gs-automation-junit.Объекты клиента и приложения доступны через аксессоры класса
GsAutomationJUnitResolver.Environment
See also
Спецификация: Параметры окружения
Спецификация: Репозиторий библиотеки
Справочник API: API интеграции с JUnit
Руководство пользователя: Состав библиотеки
Руководство пользователя: Параметры окружения выполнения
Расширение JUnit наследованием¶
При использовании этого варианта расширения JUnit, тестовый класс наследуется от специального типа окружения выполнения тестов.
При применении наследования достигается максимальная гибкость конфигурирования
окружения выполнения тестов, так как тестовый класс приобретает все свойства окружения
и неследует его поведение. Допускается переопределение методов окружения и программное
управление инициализацией клиента
.
Пример, эквивалентный предыдущим, но использующий расширение JUnit через наследование.
package ru.bitec.gsautomation.examples.example5;
import org.junit.jupiter.api.Test;
import ru.bitec.gs.automation.junit.GsAutomationJUnitEnvironment;
public class ClientTest extends GsAutomationJUnitEnvironment {
@Test
public void loginAndOpenCloseApplication_noExceptions() {
application.mainForm().mainMenu().itemByCaption("gs-automation", "Редакторы на карточке").click();
}
}
Класс теста теперь предельно прост: остался только сам тестовый сценарий.
Note
Методы, помеченные аннотациями JUnit (
@BeforeAll
и@AfterAll
), могут быть объявлены как статическими так и не статическими.Параметры подключения клиента к серверу должны задаваться любым удобным способом. Например, в файле конфигурации (
gs-automation.properties
). Детально это рассмотрено в главе Параметры окружения выполнения.Класс
GsAutomationJUnitEnvironment
содержится в дополнительной компоненте gs-automation-junit.Не требуется использовать дополнительные аннотации.
See also
Спецификация: Параметры окружения
Спецификация: Репозиторий библиотеки
API:
ru.bitec.gs.automation.junit.GsAutomationJUnitEnvironment
Справочник API: API интеграции с JUnit
Руководство пользователя: Состав библиотеки
Руководство пользователя: Параметры окружения выполнения