Skip to content

sergivonavi/azbooka-at

Repository files navigation

Автоматизация тестирования сайта Издательства АЗБУКА

Azbooka Banner

Содержание

Описание

Издательство АЗБУКА — одно из крупнейших издательств в России. Ежегодно выпускает более 100 книжных серий и отдельных проектов. В издательство входят четыре импринта: «Азбука», «Иностранка», «КоЛибри» и «Махаон».

Особенности проекта

  • Современная архитектура тестов

    • Использован шаблон проектирования Page Object для поддержки чистоты и переиспользуемости кода;
    • Конфигурации написаны с использованием библиотеки Owner, что обеспечивает гибкость и удобство настройки окружений.
  • Генерация данных и модели

    • Библиотека Datafaker используется для создания тестовых данных "на лету";
    • Для описания API-моделей применен Lombok, что позволило сократить шаблонный код.
  • Кастомные расширения для тестов

    • @WithLogin — автоматическая авторизация в UI-тестах;
    • @Layer, @Microservice, @Manual — категоризация тестов в Allure TestOps.
  • Удобные сценарии запуска

    • Локальный и удалённый запуск;
    • Фильтрация тестов по тегам;
    • Возможность запуска напрямую из Allure TestOps.
  • CI/CD-процессы

    • При каждом пуше в основные ветки и перед мержем пулл-реквестов запускается сборка проекта в GitHub Actions.
  • Интеграция с Allure

    • После прохождения автотестов формируется наглядный Allure-отчёт:
      • Шаги выполнения;
      • Скриншот страницы перед завершением теста;
      • Видео прохождения сценария;
      • HTML-код страницы и логи браузера.
    • Результаты автоматически синхронизируются с Allure TestOps.
  • Уведомления о результатах

    • Итоги тестового прогона отправляются в Telegram-чат с помощью библиотеки Allure notifications.

Технологии и инструменты

IntelliJ IDEA Java JUnit5 Selenide REST Assured Gradle Git GitHub Jenkins Selenoid Allure Report Allure TestOps Telegram

  • Среда разработки

  • Язык программирования

  • Фреймворки для тестирования

    • JUnit 5 — современный тестовый фреймворк с поддержкой аннотаций, параметризации и расширений
    • Selenide — лаконичная обёртка над Selenium WebDriver для UI-тестов
    • REST Assured — декларативное тестирование REST API
  • Сборка и управление зависимостями

    • Gradle — сборка, управление зависимостями и настройка запуска тестов
  • Контроль версий и репозиторий

    • Git — система контроля версий
    • GitHub — хостинг и управление проектом
  • Инфраструктура и CI/CD

    • GitHub Actions — автоматизация рабочих процессов и CI/CD в GitHub
    • Jenkins — автоматизация прогонов тестов, формирование отчётов и интеграция с внешними сервисами
    • Selenoid — лёгкая и быстрая инфраструктура для параллельного запуска браузеров в Docker
  • Отчётность и интеграции

    • Allure Report — детализированные отчёты о тестовых прогонах
    • Allure TestOps — управление тестами и аналитика результатов
    • Telegram — интеграция через бота для оперативных уведомлений о статусе прогонов

Реализованные проверки

API

Авторизация

  • Авторизация с валидными данными через API
  • Авторизация с несуществующим логином через API
  • Авторизация с неправильным паролем через API
  • Авторизация с пустым логином
  • Авторизация с пустым паролем
  • Авторизация с отсутствующим логином
  • Авторизация с отсутствующим паролем
  • Авторизация с отсутствующим телом запроса
  • Выход из аккаунта с валидным токеном
  • Выход из аккаунта с невалидным токеном
  • Выход из аккаунта без токена

Профиль пользователя

  • Получение информации о текущем пользователе
  • Изменение информации о текущем пользователе без загрузки аватара
  • Загрузка аватара пользователя с разными расширениями файлов

Закладки

  • Получение пустого списка закладок
  • Получение не пустого списка закладок
  • Добавление книги в закладки через API, когда список закладок пустой
  • Добавление книги в закладки через API, когда список закладок не пустой
  • Удаление книги из закладок через API, когда в списке закладок только одна книга
  • Удаление книги из закладок через API, когда в списке закладок несколько книг
UI

Авторизация

  • Авторизация с валидными данными
  • Авторизация с несуществующим логином
  • Авторизация с неправильным паролем
  • Авторизация без заполнения полей
  • Выход из аккаунта
  • Переход на страницу профиля после выхода из аккаунта

Профиль пользователя

  • Отображение информации в профиле с загруженным аватаром
  • Изменение информации в профиле с загрузкой аватара

Закладки

  • Добавление книги в закладки, когда список закладок пустой, с переходом на страницу "Закладки"
  • Добавление книги в закладки, когда список закладок не пустой
  • Удаление книги из закладок на странице книги, когда в списке закладок только одна книга, с переходом на страницу "Закладки"
  • Удаление книги из закладок на странице книги, когда в списке закладок несколько книг
  • Удаление книги из закладок на странице "Закладки", когда в списке закладок только одна книга
  • Удаление книги из закладок на странице "Закладки", когда в списке закладок несколько книг
  • Отображение книг в списке закладок
  • Отображение счетчика закладок
  • Переход к закладкам через ссылку в шапке
  • Счетчик закладок не отображается, когда нет закладок
  • Счетчик закладок отображается, когда есть закладки
Ручные проверки

Поиск

  • Дропдаун поиска отображает книги в блоке "Книги"
  • Дропдаун поиска отображает статьи в блоке "Статьи"
  • Дропдаун поиска показывает сообщение, если нет результатов
  • Переход на страницу поиска по нажатию на клавишу Enter
  • Переход на страницу поиска по кнопке "Показать еще"
  • Нажатие на книгу в дропдауне открывает страницу книги

Запуск тестов

---
config:
  theme: base
  themeVariables:
    primaryColor: '#e6e6e6'
    primaryBorderColor: '#c41325'
    primaryTextColor: '#c41325'
    lineColor: '#c41325'
    nodeBorder: '#c41325'
---
flowchart LR
 subgraph C["Локальный запуск"]
        C1["Запуск на локальной машине"]
  end
 subgraph D["Удалённый запуск"]
        D2[/"Учетные данные Selenoid"/]
        D1["Запуск в Selenoid"]
  end
 subgraph S["Настройки запуска"]
        S1[/"Параметры браузера"/]
        S2[/"Учетные данные тестового пользователя"/]
  end
    A(["Запуск тестов"]) --> B{"Выбор окружения<br>remote=?"}
    B -- false --> C1
    B -- true --> D1
    D1 --> D2
    C1 --> S1
    D2 --> S1
    S1 --> S2
    S2 --> U{"Выбор типов тестов<br>includeTags=?"}
    U -- ui --> V["UI-тесты"]
    U -- api --> W["API-тесты"]
    U -- regress --> X["Регрессионные тесты"]
    U -- smoke --> Y["Smoke-тесты"]
    V --> Z(["Результаты тестов"])
    W --> Z
    X --> Z
    Y --> Z
    N1["Возможно хранение в конфигурационных файлах"] -.-> D2 & S1 & S2
    N2["Допускается комбинирование"] -.-> U
    N1@{ shape: braces}
    N2@{ shape: braces}
     A:::terminator
     B:::decision
     C:::block
     D:::block
     S:::block
     U:::decision
     Z:::terminator
    classDef terminator fill:#f5b7b1,stroke:#c0392b,stroke-width:2px,color:#111
    classDef decision fill:#c41325,stroke:#922b21,stroke-width:2px,color:#f5f5f5
    classDef block fill:#d6d6d6,stroke:#ccc,stroke-width:2px,color:#333
Loading
gradle clean test -Premote={true|false} -PincludeTags={tags} \
  -Dremote.domain={domain} -Dremote.username={username} -Dremote.password={password} \
  -Dbrowser.name={name} -Dbrowser.version={version} -Dbrowser.size={size} \
  -Dtest.email={email} -Dtest.password={password}
  • remote — выбор окружения (опционально):
    • true — запуск тестов в Selenoid
    • false — запуск тестов локально (по умолчанию)
  • groups — теги тестов для запуска:
    • ui — UI-тесты
    • api — API-тесты
    • regress — регрессионные тесты
    • smoke — smoke-тесты
  • remote.* — данные для авторизации на удалённом стенде:
    • username
    • password
  • browser.* — параметры браузера для UI тестов: название, версия, размер окна
    • name (по умолчанию chrome)
    • version
    • size (по умолчанию 1920x1080)
  • test.* — логин и пароль для авторизации тестовым пользователем в тестах:
    • email
    • password
Дополнительные команды
  1. Формирование Allure-отчёта:

    gradle allureReport

    По умолчанию отчёт генерируется в папку build/allure-results.

  2. Формирование Allure-отчёта, запуск локального HTTP-сервера и открытие в браузере:

    gradle allureServe

Локальная конфигурация

Для упрощения локального запуска можно создать файлы remote.properties и user.properties в корневой папке config.

В папке есть шаблоны: remote.example.properties и user.example.properties. Необходимо скопировать их, убрав из имени .example, и заполнить своими данными.

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

gradle clean test

Сборка в Jenkins

Jenkins — инструмент для автоматизации сборки, тестирования и деплоя проектов.

В проекте используется для:

  • удалённого запуска автотестов,
  • формирования Allure-отчётов по результатам прогонов,
  • интеграции с уведомлениями в Telegram.

На странице проекта доступна информация о последних сборках и график успешности прохождения тестов из Allure-отчёта:

Jenkins - Project Overview

Раздел Build with Parameters позволяет задать необходимые параметры перед запуском сборки:

Jenkins - Build with Parameters

После завершения сборки автоматически формируется Allure-отчёт, и обновляются результаты прохождения тестов в Allure TestOps.

Интеграция с Allure Report

Allure Report — инструмент для визуализации результатов тестов, который формирует наглядные и подробные отчёты.

В проекте используется для:

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

Во вкладке Overview отображается общий результат прогона тестов: диаграммы успешных и упавших тестов, распределение по сьютам и функциональным фичам:

Allure Overview

При переходе в конкретный тест доступны подробности — шаги теста, скриншоты, видео и логи браузера:

Allure Test Details

Интеграция с Allure TestOps

Allure TestOps — облачная платформа для управления тестами и анализа результатов.

В проекте используется для:

  • хранения тест-кейсов,
  • группировки тестов по функциональностям и пользовательским историям,
  • отслеживания выполнения тестов в динамике,
  • интеграции с Jenkins и отчётами Allure.

Интеграция с Jenkins позволяет запускать выбранные тесты и отслеживать их выполнение в реальном времени:

Allure TestOps - Jenkins Integration

Прогоны тестов отображаются на графиках и диаграммах, что позволяет быстро оценивать динамику и стабильность тестов:

Allure TestOps - Test Runs

Тестовые сценарии автоматически синхронизируются с кодом проекта после завершения прогонов, обеспечивая актуальность кейсов:

Allure TestOps Test Cases

Уведомления в Telegram

Результаты тестового прогона автоматически отправляются в Telegram-чат, что позволяет оперативно отслеживать статус прогонов и быстро реагировать на падения тестов:

Allure Notifications - Telegram

Видео выполнения теста

Для каждого UI-теста в отчёте прилагается видео прохождения, позволяя визуально проверить выполнение шагов и воспроизвести возможные ошибки:

Selenoid Video

Правовая информация

Все названия продуктов, логотипы и изображения (включая обложки книг и материалы сайта azbooka.ru, которые используются в тестах) использованы исключительно в образовательных и демонстрационных целях. Все права принадлежат их законным владельцам.

About

Automated tests (API and UI) for the AZBOOKA publishing website

Topics

Resources

Stars

Watchers

Forks