Skip to content

Sherlock0731/qa-api-framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API Test Automation Framework

Java JUnit Rest-Assured Allure

Tests
Allure Report

Многопоточный фреймворк для автоматизации тестирования REST API с использованием современного стека технологий.

Технологический стек

  • Java 17 - язык программирования
  • Maven - система сборки и управления зависимостями
  • JUnit 5 - фреймворк для тестирования
  • REST Assured - библиотека для тестирования REST API
  • AssertJ - fluent assertions библиотека
  • Allure Report - система отчетности
  • Lombok - уменьшение boilerplate кода
  • SLF4J/Logback - логирование с поддержкой многопоточности
  • Owner - управление конфигурациями
  • Docker - контейнеризация
  • GitHub Actions - CI/CD pipeline

Структура проекта

qa-api-framework/ ├── src/ │ ├── main/ │ │ ├── java/qa/autotest/ │ │ │ ├── app/dto/ # Data Transfer Objects │ │ │ └── framework/ # Core framework │ │ │ ├── client/ # REST clients │ │ │ ├── config/ # Configuration │ │ │ └── utils/ # Utilities │ │ └── resources/ │ │ ├── config/ # Environment configs │ │ └── logback.xml # Logging config │ └── test/ │ ├── java/examples/ # Test cases │ │ ├── users/ # Users API tests │ │ └── products/ # Products API tests │ └── resources/ ├── docker/ # Docker configs │ ├── Dockerfile │ └── docker-compose.yml ├── .github/workflows/ # CI/CD pipelines │ ├── test-all.yml │ ├── test-users.yml │ ├── test-products.yml │ └── test-smoke.yml ├── docs/ # Documentation └── pom.xml # Maven config 

Быстрый старт

Предварительные требования

  • Java 17 или выше
  • Maven 3.8+
  • Docker (опционально)

Локальный запуск

# Клонировать репозиторий git clone <repository-url> cd qa-api-framework # Запустить все тесты mvn clean test # Запустить тесты с 4 потоками mvn clean test -Dthread.count=4 # Запустить только users тесты mvn clean test -Pusers # Запустить только products тесты mvn clean test -Pproducts # Запустить smoke тесты mvn clean test -Psmoke # Сгенерировать Allure отчет mvn allure:serve

Запуск в Docker

# Запустить все тесты docker-compose -f docker/docker-compose.yml up # Запустить с параметрами THREAD_COUNT=4 TEST_GROUPS=users docker-compose -f docker/docker-compose.yml up # Запустить в фоне docker-compose -f docker/docker-compose.yml up -d

Тестовые сценарии

Фреймворк включает 27 критичных тест-кейсов:

Users API (15 тестов)

  • GET /api/users - получение списка пользователей (TC-001 - TC-003)
  • POST /api/login - аутентификация (TC-006 - TC-011)
  • POST /api/users - создание пользователя (TC-012 - TC-017)

Products API (12 тестов)

  • GET /products - получение списка продуктов (TC-018 - TC-021)
  • GET /product/{id} - получение продукта по ID (TC-022 - TC-024)
  • POST /products - создание продукта (TC-026 - TC-030)

Конфигурация

Файлы конфигурации

Конфигурационные файлы находятся в src/main/resources/config/:

  • default.properties - дефолтные настройки
  • local.properties - настройки для локального запуска
  • ci.properties - настройки для CI/CD

Переменные окружения

Для CI/CD настройте следующие переменные в GitHub Secrets:

REQRES_BASE_URL # Base URL для ReqRes API REQRES_API_KEY # API ключ для ReqRes BEECEPTOR_BASE_URL # Base URL для Beeceptor API TEST_USER_EMAIL # Email тестового пользователя TEST_USER_PASSWORD # Пароль тестового пользователя TEST_USER_FIRSTNAME # Имя тестового пользователя TEST_USER_LASTNAME # Фамилия тестового пользователя TEST_USER_ID # ID тестового пользователя 

Параметры запуска

# Количество потоков (default: 1) -Dthread.count=4 # Окружение (local, ci) -Denv=local # Группа тестов -Dtest.groups=users # Или через Maven профили -Pusers -Pproducts -Psmoke

Отчеты

Allure Report

# Сгенерировать и открыть отчет mvn allure:serve # Только сгенерировать mvn allure:report

Отчет содержит:

  • Детальную информацию о прохождении тестов
  • HTTP запросы и ответы
  • Скриншоты (если применимо)
  • История выполнения
  • Графики и статистику

Логи

Логи сохраняются в директории target/logs/:

  • test-execution.log - общий лог выполнения
  • thread-{name}.log - логи по каждому потоку отдельно

CI/CD Pipeline

GitHub Actions Workflows

  1. test-all.yml - запуск всех тестов

    • Триггеры: push в main/develop, pull request, manual
    • Параллельность: настраиваемая (1-8 потоков)
  2. test-users.yml - запуск users тестов

    • Триггеры: manual, schedule (daily at 2 AM UTC)
    • Профиль: -Pusers
  3. test-products.yml - запуск products тестов

    • Триггеры: manual, schedule (daily at 3 AM UTC)
    • Профиль: -Pproducts
  4. test-smoke.yml - запуск smoke тестов

    • Триггеры: push, pull request
    • Профиль: -Psmoke

Артефакты

После выполнения доступны артефакты:

  • Allure результаты
  • Allure отчет
  • Логи выполнения
  • JUnit XML отчеты

Архитектура

Паттерны и best practices

  1. Page Object Model - для REST API адаптирован как REST Client Pattern
  2. Builder Pattern - для создания DTO объектов
  3. Thread-local - для изоляции данных между потоками
  4. Configuration Management - централизованное управление настройками
  5. Dependency Injection - через конструкторы
  6. Fluent Assertions - читаемые проверки через AssertJ

Многопоточность

Фреймворк полностью поддерживает параллельное выполнение:

  • Thread-safe RequestSpecification
  • Thread-safe логирование
  • Изолированные логи по потокам
  • Конфигурируемое количество потоков
@Execution(ExecutionMode.CONCURRENT) public abstract class BaseTest { // Thread-safe implementation }

Логирование

Logback настроен на многопоточную работу:

  • Асинхронная запись
  • Отдельные файлы по потокам
  • Thread ID в каждой записи
  • Prudent mode для безопасной записи

Примеры использования

Создание нового теста

@Epic("API Name") @Feature("Feature Name") @Tag("group-name") public class MyNewTests extends BaseTest { @Test @DisplayName("TC-XXX: Test description") @Description("Detailed description") @Severity(SeverityLevel.CRITICAL) @Story("Story name") void testSomething() { // Arrange UserDto request = UserDto.builder() .email("test@test.com") .password("pass123") .build(); // Act Response response = reqResClient.login(request); // Assert assertThat(response.getStatusCode()) .as("Status code should be 200") .isEqualTo(200); } }

Добавление нового DTO

@Data @Builder @NoArgsConstructor @AllArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public class MyDto { @JsonProperty("field_name") private String fieldName; }

Добавление нового REST Client

@Slf4j public class MyApiClient extends BaseRestClient { public MyApiClient() { setBaseUri(CONFIG.myApiBaseUrl()); } @Step("Get something") public Response getSomething() { return get("/endpoint"); } }

Contribution

  1. Fork репозиторий
  2. Создайте feature branch (git checkout -b feature/amazing-feature)
  3. Commit изменения (git commit -m 'Add amazing feature')
  4. Push в branch (git push origin feature/amazing-feature)
  5. Создайте Pull Request

Документация

Подробная документация доступна в папке docs/:

License

License: MIT

Authors

  • Vitaliy Popravka - QA Automation Engineer

Контакты

Для вопросов и предложений создавайте Issue в репозитории.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors