Implement HW5 stubs, API helpers, optional SQL/MQ helpers, and test coverage

This commit is contained in:
2026-03-09 01:40:48 +03:00
parent d1247eec18
commit 507e14bc2e
53 changed files with 2320 additions and 56 deletions

115
README.md
View File

@@ -1,65 +1,78 @@
# OTUS Rest-assured Homework 3
# OTUS Homework 5: Stub & API Testing (API-helpers)
В этом проекте реализован stub-сервер на WireMock, API-helpers для HTTP/SOAP и автотесты контрактов/схем, плюс UI-проверка stub frontend через Cucumber.
## Цель проекта
Автоматизировать API-сценарии для `https://petstore.swagger.io` с использованием Rest-assured, JUnit Jupiter и quality gates (Checkstyle + SpotBugs).
## Что реализовано
- Stub endpoints на WireMock:
- `/user/get/{id}` - получение оценки пользователя
- `/cource/get/all` - получение списка курсов
- `/user/get/all` - получение списка пользователей
- Контракты и схемы:
- контрактные тесты для users/courses/score
- JSON schema тесты для users/courses/score
- API-helpers:
- `HttpHelper`
- `SoapHelper`
- Дополнительно (optional):
- `SqlHelper`
- `MqHelper`
- Stub frontend:
- endpoint `/frontend`
- Cucumber-сценарий проверки frontend
- Selenoid support:
- запуск UI-тестов через `-Dbrowser=selenoid`
## Стек технологий
- Java 21
- Maven
- Rest-assured `6.0.0`
- JUnit Jupiter `6.0.2`
- Jackson Databind `2.21.0`
- Commons Codec `1.21.0`
- Maven Surefire Plugin `3.5.4`
- Maven Compiler Plugin `3.15.0`
- Checkstyle (`maven-checkstyle-plugin` `3.6.0`)
- SpotBugs (`spotbugs-maven-plugin` `4.9.8.2`)
## Что проверяется в Cucumber
- Для HW5 в раннер подключен только `features/stub_frontend.feature`.
- `features/catalog.feature` и `CatalogSteps` сохранены в проекте, но в текущий раннер HW5 не входят.
## Реализованные сценарии
1. `POST /pet` + `GET /pet/{id}`:
- создание питомца;
- повторное чтение по id;
- проверка, что вернулся именно созданный объект.
2. `GET /pet/{id}`:
- проверка схемы ответа через Json Schema Validator.
3. Негативные сценарии:
- `POST /pet` с malformed JSON возвращает `4xx`;
- `GET /pet/{id}` для удаленного/несуществующего id возвращает `404`;
- `GET /pet/findByStatus` с невалидным статусом возвращает пустой список.
## Архитектура
- 2-уровневый дизайн:
- `service` слой (HTTP-вызовы + спецификации);
- `tests` слой (сценарии).
- Тесты создают сервис напрямую (`new PetService()`), без DI-фреймворка.
## Структура проекта
- `src/main/java/ru/otus/petstore/config` — конфигурация
- `src/main/java/ru/otus/petstore/model` — модели API (`Pet`, `Category`, `Tag`)
- `src/main/java/ru/otus/petstore/service` — сервисы API
- `src/test/java/ru/otus/petstore/tests` — автотесты (позитивные и негативные сценарии)
- `src/test/java/ru/otus/petstore/util` — фабрика тестовых данных
- `src/test/resources/schemas` — JSON schema
## Запуск
### 1. Только тесты
## Команды запуска
Основной прогон (API + stub + helpers):
```bash
mvn test
```
### 2. Полная проверка (тесты + Checkstyle + SpotBugs)
Только ключевые тесты HW5:
```bash
mvn "-Dtest=HttpHelperTest,SoapHelperTest,SqlHelperTest,MqHelperTest,StubContractTest,StubSchemaTest" test
```
UI Cucumber (stub frontend):
```bash
mvn -Pui-tests test
```
UI Cucumber через Selenoid:
```bash
mvn -Pui-tests "-Dbrowser=selenoid" "-Dselenoid.url=http://localhost:4444/wd/hub" test
```
Полная проверка качества:
```bash
mvn verify
```
## Параметры запуска
- `base.uri` (по умолчанию `https://petstore.swagger.io`)
- `base.path` (по умолчанию `/v2`)
- значения читаются из `System properties` во время выполнения тестов.
## Docker/Selenoid
Если UI-тесты через Selenoid не нужны, этот раздел можно пропустить.
Пример:
Предварительно:
- Установить Docker Desktop.
- Убедиться, что Docker запущен.
Поднять инфраструктуру:
```bash
mvn "-Dbase.uri=https://petstore.swagger.io" "-Dbase.path=/v2" test
docker compose up -d
```
Проверка, что Selenoid поднялся:
- Selenoid API: `http://localhost:4444/wd/hub`
- Selenoid UI: `http://localhost:8081`
После этого можно запускать UI-тесты через Selenoid:
```bash
mvn -Pui-tests "-Dbrowser=selenoid" "-Dselenoid.url=http://localhost:4444/wd/hub" test
```
Или выполнить полный пайплайн одной командой (поднимет Docker/Selenoid и запустит все проверки):
```bash
powershell -ExecutionPolicy Bypass -File .\scripts\run-full-pipeline.ps1
```