From 3113c37c94cb6a61347fdef9c34a1fc92521a721 Mon Sep 17 00:00:00 2001 From: Yuri Date: Tue, 21 Nov 2023 15:23:57 +0300 Subject: [PATCH] markdown files update --- NOTES.md | 6 ++-- README.md | 88 ++++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 71 insertions(+), 23 deletions(-) diff --git a/NOTES.md b/NOTES.md index 31fc08c..c1f0bfe 100644 --- a/NOTES.md +++ b/NOTES.md @@ -10,7 +10,7 @@ а значит его перехватывает селенидовский листенер, а значит делается лишний скриншот и сохраняется лишняя страница. Исправить это можно, сделав метод через цикл со `Sleep`-ом и передавая в него `Condition`, который используется для `SelenideElement.is(Condition)`, который не задействует ожидания и ничего не выбрасывает (в обычной ситуации). --[ ] Надо бы переделать метод +-[x] Надо бы переделать метод [`marketCheckAllPages()`](https://github.com/Achitheus/SelenideTestCase/blob/a49a8a2a2aa182f5570b3438b5d385e6bd77384c/src/test/java/ru/bellintegrator/ru/yandex/market/MarketTest.java#L82) во что-то реюзабельное, например создать класс вроде `PagesChecker` и с помощью него делать проверки с прогоном по всем страницам. Сейчас же он по сути является частью конкретного теста и захламляет класс тестов. Должен получиться отличный `helper`, который можно @@ -21,11 +21,11 @@ - Помимо обычного `.gitignore`, есть еще его глобальная версия, которую обычно кладут туда же, где лежит `.config`. За счет него можно почистить расшариваемый вариант, а также создавать какие-то вспомогательные файлы, о случайном попадании в коммит которых не нужно беспокоиться. Крутецкая вещь. -- Код выполняемый на странице в браузере можно остановить и поймать, например, спиннер загрузки товаров. +- Код, выполняемый на странице в браузере, можно остановить и поймать, например, спиннер загрузки товаров. ### Досадные обстоятельства - Использование Junit-овских софт ассертов не позволяет создавать подробные `message`- ы, точнее позволяет, но для каждой переменной передаваемой в лямбду приходится делать - ее `final` копию. То же относится и к Allure-овскому методу `step()`. Не нравится. + ее `(effectively) final` копию. То же относится и к Allure-овскому методу `step()`. Не нравится. - Забавно, что судя по всему на сегодняшний день не существует вменяемого способа узнать какую версию XPath использует браузер или его драйвер (по крайней мере для Хрома). Остается только стучаться в методы, специфичные для разных версий, и смотреть какие из diff --git a/README.md b/README.md index 92aeb56..c8983b7 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,49 @@ ## Содержание -- [Build (раздел в разработке)](#build-раздел-в-разработке) +- [Build](#build) + - [Запуск тестов](#запуск) + - [Сгенерировать отчет](#сгенерировать-отчет) +- [Allure отчет](#allure-отчет) + - [Запуск тестов и деплой отчета в CI](#запуск-тестов-и-деплой-отчета-джобой-github-actions) + - [Запуск тестов и деплой отчета руками](#запуск-локально-и-деплой-отчета-руками) - [Требования](#требования) - [Тест кейс](#тест-кейс) - [Стек](#стек) - [Прочее](#прочее) -- [Технические особенности](#технические-особенности) +- [Особенности реализации](#особенности-реализации) -## Build (раздел в разработке) +## Build +В окружении должна быть установлена (и прописана в PATH) java не ниже 11 версии +и добавлена переменная среды JAVA_HOME. +#### Запуск: + ./mvnw verify -DuseBrowserProfile=false +#### Сгенерировать отчет: +- Если в окружении Allure не установлен: + + ./mvnw allure:install + ./mvnw allure:serve + +- Если в окружении Allure установлен (2.24.0 и выше): + + cd ./target + allure serve +## Allure отчет + +#### Запуск тестов и деплой отчета джобой (GitHub Actions) +При запуске в CI обходить капчи моими методами труднее, поэтому результат оставляет желать лучшего. +Тем не менее посмотреть отчет можно по +[этой ссылке](https://achitheus.github.io/SelenideTestCase/1), +причем относительный интерес в нем, по понятным причинам, представляет собой только +[этот удачливый тест](https://achitheus.github.io/SelenideTestCase/1/#behaviors/f8b8261c1ab4fe7e959d48ef5aa7a754/645c56ffa9ef53d1/). +Как ни странно, могло быть и хуже (подробнее см. в заметке [Удаленное противо-captcha-стояние](automationCucumber/blob/main/NOTES.md#Удаленное-противо-Capcha-Стояние)). + +*Поэтому более +целесообразным представляется выполнить...* + +#### Запуск локально и деплой отчета руками +Здесь уже руки не связаны, поэтому [результат](https://achitheus.github.io/SelenideTestCase/local-run/) +соответствующий. ## Требования ### Тест кейс 1. Открыть браузер и развернуть на весь экран. @@ -31,32 +66,45 @@ Java, Junit Jupiter, Selenide, PageObject по стилю Selenide ### Прочее -- Тест разбит на шаги. Коллега без знаний программирования по аллюр отчету должен понимать что делает +- [x] Тест разбит на шаги. Коллега без знаний программирования по аллюр отчету должен понимать что делает тест, какие проверки происходят -- Тест должен быть параметризован -- Необходимо использовать константы через проперти файл -- Все ассерты должны быть переопределены -- Если в коде используются циклы, необходимо исключить возможность бесконечного цикла -- Обязательно использовать Джава док для всех методов и переменных. На русском языке -- Недопустимо использования Thread.sleep и Трай\кетчи. За исключением, создания собственных +- [x] Тест должен быть параметризован +- [x] Необходимо использовать константы через проперти файл +- [x] Все ассерты должны быть переопределены +- [x] Если в коде используются циклы, необходимо исключить возможность бесконечного цикла +- [ ] Обязательно использовать Джава док для всех методов и переменных. На русском языке +- [x] Недопустимо использования Thread.sleep и Трай\кетчи. За исключением, создания собственных ожиданий (к примеру каждый 5 миллисекунд проверяем что что-то случилось, и так не более 10 секунд.). Лучше обойтись явными\неявными ожиданиями -- _Помните про универсальные методы. Старайтесь писать код, полезный в других тестах, полезный +- [x] _Помните про универсальные методы. Старайтесь писать код, полезный в других тестах, полезный коллегам. Не будьте эгоистами!_ -- XPath не должен содержать индексов, динамических элементов +- [x] XPath не должен содержать индексов, динамических элементов ## Особенности реализации - +Раздел обновляется, а не переписывается, чтобы видеть прогресс. +- ***Судя по тест-кейсу при выставлении, например, производителя `Apple` наименования, +содержащие подстроку "IPhone", но не содержащие подстроку "Apple", являются корректными. +Автоматизированный тест не всегда соблюдает это условие - в демонстрационных целях + (чтобы было видно, что тест действительно выполняет проверку, а не просто рисует отчет с +зелеными галочками).*** - На каждой странице пагинации по товарам можно выполнять сколько угодно проверок, если -добавить их в `marketCheckAllPages()`. "Падение" какой-либо из проверок не прерывает тест -(использованы soft asserts). -- Даже если среди проверок не осталось "не упавших", тест не прерывается. Проверяются все страницы. -- При наличии на странице нескольких товаров некорректных с точки зрения конкретной проверки, -тест не говорит сколько этих товаров, не выводит их список, а сообщает о первом попавшемся. -- К сожалению упавшие софт-ассерты плохо отображаются в отчете: галочки/стрелочки не +добавить их в ~~`marketCheckAllPages()`~~. "Падение" какой-либо из проверок не прерывает тест +(использованы soft asserts). +**Update.** Эта ужасная функция удалена. Вместо нее использован `PageableChecker` (моя маленькая гордость). +- Даже если среди проверок не осталось "не упавших", тест не прерывается. Проверяются все чеки на всех страницах. +**Update.** Чтобы использовать дефолтный "lazy" режим, достаточно убрать из теста +`.checkAllPages(true)`. В таком случае страницы проверяются пока остается хотя бы один незафейленный чек. +При этом зафейленные чеки на последующих страницах не проверяются. +- При наличии на странице нескольких товаров некорректных с точки зрения конкретного чека, +отчет ~~не говорит сколько этих товаров, не выводит их список, а сообщает о первом попавшемся~~. +**Update.** Теперь и количество сообщает. Кроме того если "плохих" элементов больше одного, помимо скриншота и веб-страницы в аттачментах появляется файл, +в котором перечислены они все. +- ~~К сожалению упавшие софт-ассерты плохо отображаются в отчете: галочки/стрелочки не меняют цвет с зеленого на красный. Пришлось тернарным оператором передавать разные сообщения для успешного и неуспешного выполнения таких ассертов (для последнего случая -что-то бросающееся в глаза типа “`<<< FAIL >>> Имя товара не соотв…`”). +что-то бросающееся в глаза типа “`<<< FAIL >>> Имя товара не соотв…`”).~~ +**Update.** Allure действительно официально не поддерживает `soft asserts`, но благодаря классу `AllureLifeCycle` +в `PageableChecker` с этим справиться удалось.