Документация
Для начала необходимо ознакомиться с документацией по началу работы с Origami Framework
Origami Core
Подключение
Подключается автоматически при добавлении parent в pom проекта.
Аннотации
Чтобы тесты в Test IT и Allure отчетах отображались с указанными шагами, описанием и заголовками необходимо использовать универсальные аннотации (замена Allure и Test IT аннотаций)
Аннотации класса
@Epic, @Feature - стандартные Allure аннотации, в Test IT не используются. @Story - заменяет Allure аннотацию @Story. В Test IT не было аналога, используется в качестве значения пакета для тестовых классов. @DisplayName - заменяет Allure аннотацию @DisplayName. Заменяет Test IT аннотации - @DisplayName, @Title. @Link - заменяет Allure аннотацию @Link. Заменяет Test IT аннотацию - @Link. Для @Link можно выбрать тип ссылки отдельно для Allure(allureType) и отдельно для Test IT(testItType).
Аннотации теста
Тест
@DisplayName - заменяет Allure аннотацию @DisplayName. Заменяет Test IT аннотации - @DisplayName, @Title. @Description - заменяет Allure аннотацию @Description. Заменяет Test IT аннотацию - @Description. @WorkItemIds - стандартная Test IT аннотация, не используется в Allure. Указывается id теста (или id нескольких тестов - @WorkItemIds({"270492", "270493"})), который необходимо пометить как автоматизированный.
Параметризованный тест
Для параметризованного теста так же можно указать @DisplayName - будет влиять только на отображение названия группы тестов в IDE. Значение для теста в Test IT берется из @ParameterizedTest + параметризованные данные.
Шаг
@Step - заменяет Allure аннотацию @Step. Заменяет Test IT аннотации - @Step, @Title.
Аннотации предусловий/постусловий
Ранее в Allure для методов предусловий/постусловий бралось название на англ из метода. Теперь при указании данной аннотации будет взято ее значение.
Добавление описания в Test IT для вложений
В Allure при добавлении аннотации @Attachment к шагу будет добавлено вложение(например: sql запрос, сообщение в очередь и тд.).
Для Test IT реализована аналогичная возможность добавления данных вложений к шагам. Вложения будут добавлены в виде Описания к шагу
при условии, что у шага отсутствует свое описание(@Description).
К методу необходимо добавить аннотацию @Step со значением TEST_IT_ATTACHMENT_TECH_STEP_VALUE. С данным значением
новый шаг не будет создан ни в Allure, ни в Test IT. А описание будет прикреплено к шагу в Test IT, который создавался до вызова данного метода.
Так же необходимо добавить аннотацию @Description, которая будет содержать описание, которое будет прикреплено к шагу.
Task
Позволяет выполнить задачу, которая возвращает результат из отдельного потока. Может вызвать исключение.
Для использования необходимо: 1. Унаследоваться от класса Task 2. Переопределить конструктор с вызовом конструктора родителя
3. Реализовать необходимые для задачи методы - с возвращаемым результатом или без 4. В тестовом методе создать новый объект, где в сигнатуре конструктора: - первый параметр methodName - название метода для запуска в отдельном потоке - последующие параметры (могут быть/могут не быть) - входящие параметры для указанного метода Очередность параметров должна строго соответствовать очередности метода. 5. Вызвать у объекта submit() для запуска задачи в отдельном потоке 6. Вызвать один из нижеперечисленных методов: - get() / get(long timeout, TimeUnit unit) - при необходимости ожидает завершения задачи, а затем извлекает результат - cancel(boolean mayInterruptIfRunning) - пытается завершить выполнение текущей задачи - isCancelled() - возвращает true, если эта задача была отменена до ее завершения - isDone() - возвращает true, если эта задача завершена
Пример
Реализация класса с методами, которые будут выполняться в отдельных потоках
Использование вышеприведенных методов в шаге теста
Asserts
Asserts включает в себя необходимые проверки для использования в тестах.
Environment
Environment необходим для работы с параметрами. Вычитывает параметры из origami.properties, из /config/{stand}.json, где stand - системное свойство. Так же вычитывает параметры из statics/routs.json и statics/any.json (необязательные). Существует возможность указать пользовательские файлы конфигураций. Для этого в origami.properties необходимо указать пути до таких файлов. Название параметра должно начинаться с custom.properties.file.path Если какие-либо параметры определены и в пользовательском файле и в файле stand, то возьмется значение из stand файла.
Существует возможность задать глобальный системный параметр для ssl.trust.store. Для этого необходимо в origami.properties указать путь и пароль от сертификата. Возможно указать как полный путь от корня проекта, так и путь конкретно в resources. В примере приведены оба варианта.
Существует возможность глобально отключить проверку сертификатов для всех HTTPS-соединений
Методы
Получение значения параметра по ключу
Получение значения параметра по ключу или вернется null при отсутствии значения
Параметры из origami.properties будут добавлены в системные параметры.
OrigamiHelper
OrigamiHelper содержит общие методы, такие как ожидания, работа с xml/json и тд.
Allure
Чтобы задать шаблон URL для ссылок типа issue, необязательно создавать отдельный файл allure.properties и в нем прописывать значение параметра. В origami.properties можно задать аналогичный параметр allure.link.issue.pattern. Для генерации отчета в один html файл необходимо запустить mvn allure:report. Сгенерированный файл появится по пути /target/site/allure-maven-plugin/index.html Для генерации excel отчета на основе allure необходимо выполнить команду mvn exec:java@allure-excel. Сгенерированный файл появится по пути /target/allure-report_dd_MM_yyyy.xlsx
Origami Hibernate
Описание
Модуль для работы с базами данных на основе Hibernate.
Подключение
Необходимо добавить зависимость в pom.xml в проекте:
Так же необходимо создать файл конфигурации для работы с требуемой базой: - hibernate-postgres.cfg.xml - hibernate-clickhouse.cfg.xml - hibernate-oracle.cfg.xml - hibernate-mssql.cfg.xml В файле необходимо указать параметр со значением класса драйвера:
Использование
Необходимо унаследовать класс с шагами для работы с конкретной базой данных от CommonFixtureSteps. В конструкторе класса в sessionProperties необходимо указать параметры для подключения и после проинициализировать сессию. Пример:
Запросы SELECT рекомендуется выполнять на языке hql.
Запросы INSERT, UPDATE, DELETE и тд. рекомендуется выполнять на языке sql.
Динамическая схема
При необходимости использования различных схем, например, в рамках различных стендов, реализована возможность использования динамических схем. Для этого в схеме таблицы необходимо указать схему DYNAMIC_SCHEMA.
В параметрах подключения в таком случае необходимо указать схему
Таким образом запрос будет выполнен с той или иной схемой в зависимости от переданного параметра.
Схема по умолчанию
При выполнении некоторых запросов, в БД может срабатывать триггер, например, при выполнении insert, и будет вызываться функция. Выполнение такой функции может проходить в той схеме, к которой установлено подключение, т.е. без явной привязки к схеме. Для такой ситуации добавлена возможно установки подключения к конкретной схеме БД. В параметрах подключения необходимо указать схему по умолчанию
Параметры
- hibernate.excel.result.enabled - параметр необходим для прикрепления результата выборки из базы данных в формате Excel. По умолчанию: false.
Origami Kafka
Подключение
Необходимо добавить зависимость в pom.xml в проекте:
Таблица совместимости SASL механизмов и Security Protocol
Sasl Mechanism PLAINTEXT SASL_PLAINTEXT SSL SASL_SSL — (нет SASL) ✔ ✗ ✔ ✗ PLAIN ✗ ✔ ✗ ✔ SCRAM-SHA-256 ✗ ✔ ✗ ✔ SCRAM-SHA-512 ✗ ✔ ✗ ✔ GSSAPI (Kerberos) ✗ ✔ ✗ ✔ OAUTHBEARER ✗ ✔ ✗ ✔ EXTERNAL ✗ ✗ ✔ ✔
Properties
- setBootstrapServers() - список адресов Kafka-брокеров - setGroupId() - имя группы консьюмеров, которые работают вместе - addSecurityProtocol() - протокол безопасности для подключения клиента. Опционально с указанием regexp для названия стенда. При запуске тестов на стендах, для которых указан протокол, будет использован данный протокол, для запусков на остальных стендов будет использован протокол без указания regexp. - addSaslMechanism() - определяет, какой механизм аутентификации SASL (Simple Authentication and Security Layer) будет использоваться клиентом Kafka - setUsername() - имя пользователя для аутентификации - setPassword() - пароль пользователя для аутентификации - setClientId() - идентификатор приложения (client), зарегистрированного во внешней системе авторизации (например, OAuth-сервере) - setClientSecret() - секретный ключ (пароль), привязанный к этому clientId - setSaslOauthBearerTokenEndpoint() - это URL-адрес, по которому Kafka-клиент будет запрашивать OAuth 2.0 access token у внешнего сервера авторизации, указывая свои clientId, clientSecret. Этот токен затем используется для аутентификации с Kafka-брокером - setSaslOauthBearerJwksEndpoint() - это URL, по которому Kafka-брокер (или клиент) получает открытые ключи для проверки подписи JWT-токенов - setSslTruststoreLocation() - путь к truststore-файлу, в котором хранятся сертификаты доверенных центров сертификации (CA certificates) - setSslTruststorePassword() - пароль для доступа к truststore-файлу - setSaslKerberosServiceName() - определяет имя Kerberos-сервиса, под которым зарегистрирован Kafka-брокер в Kerberos KDC (Key Distribution Center) - setSslKeystoreLocation() - путь к файлу keystore (обычно формата JKS или PKCS12), в котором хранятся приватный ключ и сертификат клиента (или брокера) - setSslKeystorePassword() - пароль для доступа ко всему keystore-файлу (для его открытия) - setSslKeyPassword() - пароль, который защищает приватный ключ внутри keystore - setTopicPrefix() - префикс будет добавлен перед названием топика кафки. Необходим для обхода различий в названии топиков на разных стендах. - setTopicPostfix() - постфикс будет добавлен после названия топика кафки. Необходим для обхода различий в названии топиков на разных стендах - setRetryWaitingTime() - установка общего времени ожидания для попыток чтения - setRetryMaxAttempts() - установка попыток чтения - setRetryReadTimeout() - установка времени ожидания между попытками чтения
Origami RestAssured
Описание
Модуль для работы с HTTP-запросами на основе RestAssured.
Подключение
Необходимо добавить зависимость в pom.xml в проекте:
Использование
Необходимо унаследовать класс CommonSteps от RestSteps. Необходимо использовать метод получения базового RequestSpecBuilder: getRequestSpecBuilder(). В CommonSteps реализуются методы "сборщики" базовых RequestSpecBuilder. Пример:
Далее необходимо унаследоваться от CommonSteps. Унаследованный класс должен содержать методы для работы с конкретным сервисом, который содержит методы получения RequestSpec для методов сервиса. Пример:
Далее необходимо унаследоваться от класса с общими шагами сервиса. Унаследованный класс будет содержать методы, доступные в тесте (методы, выполняющие get, post, put..., методы с проверками).
Методы
RestSteps содержит методы, для проверки статус кодов ответов. Примеры: Статус код 200:
Статус код 404:
Статус код 500:
Метод then(), доступный в классе с шагами проверок. Возвращает последний response для дальнейшей работы с ним.
Так же реализованы методы расширяющие стандартные у RestAssured, которые позволяют добавлять только not null значения в заголовки, параметры и тд.
Origami WebSocket
Подключение
Необходимо добавить зависимость в pom.xml в проекте:
WsSteps
Использование
Необходимо унаследоваться от WsSteps с указанием в конструкторе параметров для подключения. Параметр withWss: true при https, иначе false. Пример:
Методы
Осуществление подписки на топик
Осуществление подписки на топик с маппингом результата на переданный класс
Осуществление отписки от топика и получение результата. В случае переданного класса вернется список из объектов переданного класса. В ином случае вернется List<String>
Методы для отписки от топика при получении сообщения или списка сообщений. При неполучении сообщения в течении 5 сек или заданного интервала тест будет провален.
Аналогичные приведенным выше методы, но с возможностью получения пустого результата (не найдено сообщение в топике)
Осуществление отписки от топика без получения результата.
WsTopic
Представляет собой Enum, который содержит названия топиков.
Использование
Необходимо унаследоваться от WsTopic. Пример:
Origami Selenide
Описание
Модуль для работы с Web UI на основе Selenide.
Подключение
Необходимо добавить зависимость в pom.xml в проекте:
Параметры
- web.site.url - базовый URL-адрес - web.browser.name - браузер для использования. По умолчанию: chrome - web.timeout - таймаут в миллисекундах для провала теста, если условия все еще не выполнены. По умолчанию: 5000 - web.page.load.timeout - таймаут загрузки веб-страницы (в миллисекундах). По умолчанию: 10000
Origami IBM MQ
Подключение
Необходимо добавить зависимость в pom.xml в проекте:
Producer
Использование
Необходимо унаследоваться от IbmMqProducer с указанием в конструкторе параметров для подключения. Пример:
Методы
Отправка сообщения в топик
Browser
Использование
Необходимо унаследоваться от IbmMqBrowser с указанием в конструкторе параметров для подключения. Пример:
Методы
В результате выполнения метода вернется Message. Сообщение останется доступно для чтения из очереди.
Consumer
Использование
Необходимо унаследоваться от IbmMqConsumer с указанием в конструкторе параметров для подключения. Пример:
Методы
В результате выполнения метода вернется первый Message в очереди и сообщение будет более недоступно в очереди.
MessageHelper
MessageHelper содержит вспомогательные методы для работы с Message.
Методы
В результате выполнения метода из переданного Message будет извлечено сообщение в формате byte[] и возвращено String.
Origami Archetype
Origami Archetype поможет при создании нового проекта из готового шаблона.
Инициализация репозитория
Создаем репозиторий(например, на github), клонируем проект на локальную машину(git clone), создаем необходимую ветку
Создание проекта
В консоли IDE или в консоли ubuntu переходим на уровень выше того каталога, где был инициализирован репозиторий и выполняем команду maven:
Дальнейшие действия
В resources/origami.properties необходимо указать актуальные значения для свойств testit(при необходимости). В pom.xml изменить описание проекта на актуальное. Коммитим и пушим сформировавшиеся файлы.
Ошибки
При возникновении ошибки:
Необходимо проверить /home/{YOUR_PROFILE}/.bashrc (на примере ubuntu) Внутри должна быть строчка