Для создания шагов в отчёте без использования аннотаций будем использовать "жизненный цикл" Allure.
Создание шага:
var stepId = UUID.randomUUID().toString(); var stepResult = new StepResult(); stepResult.setName(stepName); Allure.getLifecycle().startStep(stepId, stepResult);
Обновление шага (например, для изменения статуса):
Allure.getLifecycle().updateStep(stepId, s -> s.setStatus(Status.PASSED));
Остановка шага:
Allure.getLifecycle().stopStep(stepId);
Добавление вложения (скриншот, лог и т.д.):
Allure.getLifecycle().addAttachment();
Эти и другие методы выносятся в отдельный статический хелпер.
Следующие тесты иллюстрируют работу "жизненного цикла" Allure.
Тест посылает слово с ошибкой в метод проверки орфографии, проверяет ответ от сервиса (проверка в данном примере условна).
@DisplayName("Проверка метода checkText сервиса SpellService") @Tag("Позитивный") @Test @Description("Проверка метода checkText сервиса SpellService для примера работы фреймворка") void checkSpellService() { var request = new CheckTextRequest(); request.setText("масква"); var response = spellServiceClient.checkText(request); Assert.areNotEqualAndAccumulate(0, response.getSpellResult().getError().size(), "Пустой ответ от сервиса"); Assert.areEqual(1, response.getSpellResult().getError().stream(). filter(s -> s.getS().contains("Москва")).collect(Collectors.toList()).size(), "В ответе от сервиса нет 'Москва'"); }
Первый шаг теста в отчёте создаётся в методе getResponse хелпера, от которого наследуется SpellServiceClient. Параметры request и response добаляются в шаг во входящем и исходящем интерсепторах (перехватчиках сообщений).
Обратимся в тесте к несуществующему методу. Тест "сломан". Вместо запроса и ответа в параметры шага передаётся ошибка.
Тест открывает главную страницу поисковой системы, заполняет поле поиска, кликает по кнопке поиска и проверяет отсутствие поля поиска главной страницы на странице поисковой выдачи.
@DisplayName("Тестовый автотест для примера") @Tag("Позитивный") @Test void checkYaSearch() { pages.ya.open(); pages.ya.searchField.sendKeys("selenium"); pages.ya.searchButton.click(); Assert.isTrue(() -> pages.ya.searchField.notExists(), "Есть поле поиска"); }
Тест использует объект pages, в котором хранятся объекты страниц. Объекты страниц предоставляют методы для работы со страницей в браузере (open, refresh и др.), а также хранят объекты элементов страницы. Элементы страниц предоставляют методы для работы с элементами (click, sendKeys и др.). Каждый метод страницы и элемента создаёт свой шаг для отчёта.
Изменим xpath элемента "Кнопка поиска" на несуществующий. Тест не пройден. К шагу "Клик по элементу" добавлены параметры с ошибкой, прикреплён скриншот.
Изменим xpath элемента "Кнопка поиска" на невалидный. Тест помечается как сломанный и останавливается перед запуском браузера. В отчёт добаляются шаги с ошибками.
Использованы Java 11, Allure 2.10.0, Junit 5.4.0