Многопоточный фреймворк для автоматизации тестирования 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-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 критичных тест-кейсов:
- GET /api/users - получение списка пользователей (TC-001 - TC-003)
- POST /api/login - аутентификация (TC-006 - TC-011)
- POST /api/users - создание пользователя (TC-012 - TC-017)
- 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# Сгенерировать и открыть отчет mvn allure:serve # Только сгенерировать mvn allure:reportОтчет содержит:
- Детальную информацию о прохождении тестов
- HTTP запросы и ответы
- Скриншоты (если применимо)
- История выполнения
- Графики и статистику
Логи сохраняются в директории target/logs/:
test-execution.log- общий лог выполненияthread-{name}.log- логи по каждому потоку отдельно
-
test-all.yml - запуск всех тестов
- Триггеры: push в main/develop, pull request, manual
- Параллельность: настраиваемая (1-8 потоков)
-
test-users.yml - запуск users тестов
- Триггеры: manual, schedule (daily at 2 AM UTC)
- Профиль:
-Pusers
-
test-products.yml - запуск products тестов
- Триггеры: manual, schedule (daily at 3 AM UTC)
- Профиль:
-Pproducts
-
test-smoke.yml - запуск smoke тестов
- Триггеры: push, pull request
- Профиль:
-Psmoke
После выполнения доступны артефакты:
- Allure результаты
- Allure отчет
- Логи выполнения
- JUnit XML отчеты
- Page Object Model - для REST API адаптирован как REST Client Pattern
- Builder Pattern - для создания DTO объектов
- Thread-local - для изоляции данных между потоками
- Configuration Management - централизованное управление настройками
- Dependency Injection - через конструкторы
- 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); } }@Data @Builder @NoArgsConstructor @AllArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public class MyDto { @JsonProperty("field_name") private String fieldName; }@Slf4j public class MyApiClient extends BaseRestClient { public MyApiClient() { setBaseUri(CONFIG.myApiBaseUrl()); } @Step("Get something") public Response getSomething() { return get("/endpoint"); } }- Fork репозиторий
- Создайте feature branch (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add amazing feature') - Push в branch (
git push origin feature/amazing-feature) - Создайте Pull Request
Подробная документация доступна в папке docs/:
- Vitaliy Popravka - QA Automation Engineer
Для вопросов и предложений создавайте Issue в репозитории.