Требования:
- Java 11
- Selenium Web Driver. Для корректной работы вам потребуется файл chromedriver
(скачать можно тут). Измените настройки
в файле UiWebDriver.kt (строка 22):
init { System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe") driver = ChromeDriver() driver?.manage()?.window()?.maximize() driver?.manage()?.timeouts()?.implicitlyWait(Duration.ofSeconds(10)) }
- Директория: src/main/java
- Пакет: net.niiqa.clean_arc_example_java.tdo
В пакете содержатся примеры TDO для тестов API и UI (в соответствующих пакетах). Важно: классы TDO являются дженериками, причем в API TDO в качестве обобщения используется класс объекта ответа (например, Response для RestAssured), а в UI TDO - класс веб-элемента (WebElement в Selenium Web Driver).
Реализуется при инжекте клиента:
@Inject
lateinit var client: BaseClient<T>
и при создании переменных:
private var response: T? = null
Паттерн DI реализован при помощи пакета Guice, реализации клиента и/или веб драйвера помещаются в контекст в тестах (см. Test Cases).
В директории src/main/resources/contracts находятся используемые для инициализации клиента для тестов API (и для проверки контрактов) Swagger-файлы.
- Директория: src/test/java
- Пакет: net.niiqa.clean_arc_example_java.tests
Пример реализации тестов API и UI. В данном примере в качестве API клиента используется RestAssured, а UI тесты основаны на Selenium Web Driver.
В тестовый класс инжектится TDO (из контекста):
@Inject
lateinit var endpoint1: Endpoint1Obj<Response>
В UI классе дополнительно подключается экземпляр веб-драйвера для управления сессиями из теста:
@Inject
lateinit var webDriver : UiWrapper<WebElement>
При объявлении указываются конкретные классы используемых ответа и веб-элемента.
- Директория: src/test/java
- Пакет: net.niiqa.clean_arc_example_java.context
Класс контекста имплементирует интерфейс Module из пакета Guice. В методе configure в контекст теста добавляются выбранная для теста реализация клиента/веб-драйвера:
bind(object: TypeLiteral<BaseClient<Response>>() {}).toInstance(BaseClientRa())
а также TDO - таким образом происходит подключение конкретного клиента в TDO и использование результатов его работы (Response, WebELement) в тесте.
- Директория: src/test/resources
Здесь находится файл test_settings.properties содержащий все необходимые для проведения тестов настройки и данные. Файл считывается при помощи модуля Environment, после чего переменные окружения доступны в тесте в параметре settings (см. Custom Framework).
- Директория: src/main/java
- Пакет: net.niiqa.clean_arc_example_java.core
Фреймворк состоит из 3-х основных частей:
- Класс Framework Core (от которого наследуются тесты)
- Пакет интерфейсов (для использования в TDO и клиентах)
- Базовый контекст тестов
Класс, являющийся родительским для тестов и реализующий базовый функционал, например - чтение переменных окружения из файла настроек тестов:
@Inject
private lateinit var environment: Environment
protected var settings : Map<String, String> = HashMap()
@BeforeSuite
fun getEnv() {
environment.readSettings("test_settings.properties")
settings = environment.getEnvironmentSettings()
}
- Директория: src/main/java
- Пакет: net.niiqa.clean_arc_example_java.core.interfaces
В пакете собраны интерфейсы для клиентов, которые в дальнейшем будут использованы в TDO.
- Директория: src/main/java
- Пакет: net.niiqa.clean_arc_example_java.core.context
Подключает необходимые для всех тестов зависимости (например, получение переменных окружения). Инициализация происходит в базовом классе фреймворка FrameworkCore:
@Guice(modules = [BaseContext::class])
open class FrameworkCore() {
// Framework code
}
- Директория: src/main/java
- Пакет: net.niiqa.clean_arc_example_java.integrations
В примере приведены реализации клиентов и драйверов для тестов.
ВАЖНО! Все клиенты должны имплементировать соответствующие интерфейсы из пакета core.interfaces!