Многоуровневый учебный проект для демонстрации автоматизации тестирования SPA‑приложения:
- UI: Selenide + Page Object
- API: Rest‑Assured (+ встроенный тестовый REST‑сервер на Javalin)
- DB: Hibernate ORM + H2 (in‑memory)
- Отчёты: Allure
- CI/CD: GitHub Actions + публикация Allure отчёта на GitHub Pages
Важно: прикладная часть здесь преднамеренно минимальная. Цель репозитория — показать подход к автотестам (архитектура, слои, запуск в CI), а не построить production‑систему.
- 1. Что внутри
- 2. Стек
- 3. Быстрый старт
- 4. Запуск тестов
- 5. Allure отчёт
- 6. CI/CD (GitHub Actions + Pages)
- 7. API контракты
- 8. Структура проекта
- 9. Траблшутинг
- 10. Идеи для развития
Проект состоит из трёх независимых уровней проверок:
- Демонстрационная HTML‑страница:
src/test/resources/tasks.html - Page Object:
src/test/java/.../ui/pages/TasksPage.java - Тест:
src/test/java/.../ui/TaskUITest.java
Тест открывает локальную страницу, добавляет задачу через форму и проверяет, что она появилась в списке.
- Встроенный тестовый REST‑сервер:
src/main/java/.../api/TaskApiServer.java - Тест:
src/test/java/.../api/TaskApiTest.java
Сервер поднимается внутри тестов (порт по умолчанию 7001), после чего тест создаёт задачу и проверяет получение списка.
- Сущность:
src/main/java/.../model/Task.java - DAO (CRUD):
src/main/java/.../dao/TaskDAO.java - Конфиг Hibernate:
src/main/resources/hibernate.cfg.xml(H2 in‑memory) - Тест:
src/test/java/.../db/TaskDbTest.java
- Java 17
- Gradle
- JUnit 5
- Selenide (+ WebDriverManager)
- Rest‑Assured
- Hibernate ORM (Jakarta Persistence)
- H2 Database
- Javalin + Gson
- Allure
- JDK 17+
- Gradle 8+ (в CI Gradle ставится автоматически, локально — любым удобным способом)
git clone <your-repo-url>
cd task-management-systemЗапустить все тесты:
gradle clean testЗапустить только UI/API/DB (пример через фильтр классов):
gradle test --tests "*TaskUITest"
gradle test --tests "*TaskApiTest"
gradle test --tests "*TaskDbTest"Примечание по UI: тесты запускаются в headless‑режиме (см. TaskUITest).
Сгенерировать отчёт локально:
gradle allureReportГде лежит отчёт:
build/reports/allure-report/index.html
Результаты выполнения тестов (сырьё для отчёта):
build/allure-results
Workflow: .github/workflows/ci.yml
Что делает пайплайн:
- Checkout
- Установка JDK 17
- Установка Gradle
gradle clean testgradle allureReport- Upload Allure отчёта как artifact
- Публикация Allure отчёта на GitHub Pages (в ветку
gh-pagesпри пуше вmain)
После первого успешного прогона:
- В репозитории откройте Settings → Pages
- В качестве Source выберите ветку
gh-pages - Сохраните
Далее отчёт будет доступен по адресу:
https://<username>.github.io/<repo>/
Тестовый сервер поднимает следующие эндпоинты:
GET /tasks— вернуть список задачPOST /tasks— создать задачуGET /tasks/{id}— получить задачу по id
Пример тела для POST /tasks:
{
"title": "API Task",
"description": "API desc",
"status": "NEW"
}task-management-system/
├── build.gradle
├── settings.gradle
├── src/
│ ├── main/
│ │ ├── java/com/example/taskmanagement/
│ │ │ ├── api/TaskApiServer.java
│ │ │ ├── dao/TaskDAO.java
│ │ │ ├── model/Task.java
│ │ │ └── utils/HibernateUtil.java
│ │ └── resources/hibernate.cfg.xml
│ └── test/
│ ├── java/com/example/taskmanagement/
│ │ ├── api/TaskApiTest.java
│ │ ├── db/TaskDbTest.java
│ │ └── ui/
│ │ ├── TaskUITest.java
│ │ └── pages/TasksPage.java
│ └── resources/tasks.html
└── .github/workflows/ci.yml
- Убедитесь, что установлен Chrome/Chromium.
- Если CI среда отличается, проверьте
Configuration.headless = true.
API тесты используют порт 7001. Если занят — измените порт в TaskApiTest.
База — H2 in‑memory, живёт в рамках JVM процесса (DB_CLOSE_DELAY=-1).
Если нужно полностью изолировать тесты — добавьте очистку таблиц между тестами.
- Добавить полноценный UI (например, React SPA) и тесты на авторизацию/фильтры/пагинацию.
- Вынести конфигурацию (baseUrl, browser, headless) в properties/env.
- Добавить тестовые данные через Hibernate fixtures/seed.
- Подключить Testcontainers (PostgreSQL вместо H2).
- Добавить уровни (smoke/regression) через теги JUnit.