Использование в тесте

Для создания UI-тестов, библиотека используется в сочетании с фреймворком JUnit.

Доступно несколько способов:

Выбор подхода зависит от специфики разрабатываемых тестов.

Самостоятельная инициализация окружения

При самостоятельной инициализации окружения необходимо реализовать полный цикл подключения к серверу приложений и получения объекта приложения. Вы должны выполнить эти действия, самостоятельно, написав соответствующий код в методе, аннотированном JUnit-аннотацией @BeforeAll.

Также потребуется реализация процесса отключения от сервера приложений, написав соответствующий код в методе, аннотированном JUnit-аннотацией @AfterAll.

Класс тестов должен сохранять объекты клиента и приложения в статических переменных, обеспечивая доступ к ним во время выполнения тестов.

Пример теста повторяет логику примера Без использования JUnit.

ClientTest.java
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.

ClientTest.java
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

  1. Методы, помеченные аннотациями JUnit (@BeforeAll и @AfterAll), не могут быть объявлены как статические.

  2. Параметры подключения клиента к серверу должны задаваться, например, в файле конфигурации (gs-automation.properties). Детально это рассмотрено в главе Параметры окружения выполнения.

  3. Необходимо использовать аннотацию @TestInstance(Lifecycle.PER_CLASS).

  4. Класс DefaultTestEnvironment содержится в дополнительной компоненте gs-automation-environments.

See also

Расширение JUnit

Библиотека предоставляет специальный компонент gs-automation-junit. В нем содержатся дополнительные классы для интеграции с JUnit.

Расширение JUnit может полностью скрыть процессы подключения и отключения от сервера приложений, делая тесты более простыми и понятными.

Доступно два варианта расширения JUnit:

  1. Расширение тестового класса аннотацией @ExtendWith с указанием резолвера.

  2. Расширение тестового класса наследованием от расширяющего окружения выполнения.

Note

В общем случае рекомендуется использовать вариант расширения аннотацией @ExtendWith.

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

Пример проекта example5 доступен в Коллекции примеров проектов.

Расширение JUnit через @ExtendWith

При этом варианте расширения, тестовый класс нужно аннотировать JUnit-аннотацией @ExtendWith, с указанием резолвера GsAutomationJUnitResolver.

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

Пример, эквивалентный предыдущим, но с использованием расширения JUnit с помощью аннотации @ExtendWith.

ClientResolverTest.java
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

  1. Методы, помеченные аннотациями JUnit (@BeforeAll и @AfterAll), должны быть объявлены как статические.

  2. Параметры подключения клиента к серверу должны задаваться в файле конфигурации (gs-automation.properties). Детально это рассмотрено в главе Параметры окружения выполнения.

  3. Окружение выполнения передается во все методы тестового класса, аннотированые аннотациями JUnit, как аргумент этих методов.

  4. При использовании этого варианта расширения не предоставляется возможность переопределять методы окружения.

  5. Класс GsAutomationJUnitResolver содержится в дополнительной компоненте gs-automation-junit.

  6. Объекты клиента и приложения доступны через аксессоры класса GsAutomationJUnitResolver.Environment

See also

Расширение JUnit наследованием

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

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

Пример, эквивалентный предыдущим, но использующий расширение JUnit через наследование.

ClientExcensionTest.java
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

  1. Методы, помеченные аннотациями JUnit (@BeforeAll и @AfterAll), могут быть объявлены как статическими так и не статическими.

  2. Параметры подключения клиента к серверу должны задаваться любым удобным способом. Например, в файле конфигурации (gs-automation.properties). Детально это рассмотрено в главе Параметры окружения выполнения.

  3. Класс GsAutomationJUnitEnvironment содержится в дополнительной компоненте gs-automation-junit.

  4. Не требуется использовать дополнительные аннотации.

See also