Приходилось ли вам создавать фреймворк для автотестов с нуля?

«Приходилось ли вам создавать фреймворк для автотестов с нуля?» — вопрос из категории Фреймворки тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, несколько раз. Последний раз я разрабатывал фреймворк для тестирования веб-приложения на стеке Java 11 + Selenium WebDriver + JUnit 5 + RestAssured. Целью было создать единое решение для UI, API и интеграционных тестов.

Ключевые модули и их реализация:

// 1. Управление драйвером (Singleton + ThreadLocal для параллелизма)
public class WebDriverManager {
    private static ThreadLocal<WebDriver> driver = new ThreadLocal<>();
    public static WebDriver getDriver() {
        if (driver.get() == null) {
            driver.set(new ChromeDriver(setOptions()));
        }
        return driver.get();
    }
}

// 2. Базовый класс теста с аннотациями JUnit 5 и настройкой Allure
@ExtendWith({AllureJunit5.class, TestWatcherExtension.class})
public class BaseTest {
    @BeforeEach
    public void setUp(TestInfo info) {
        DriverManager.getDriver().get(ConfigProvider.getBaseUrl());
        Allure.step("Открыта базовая страница: " + ConfigProvider.getBaseUrl());
    }
}

// 3. Page Object с использованием Lombok для инициализации элементов
@Page
public class LoginPage {
    @FindBy(id = "username") private WebElement usernameField;
    @FindBy(id = "password") private WebElement passwordField;
    @FindBy(css = "[data-qa='login-btn']") private WebElement loginButton;

    public HomePage login(String user, String pass) {
        usernameField.sendKeys(user);
        passwordField.sendKeys(pass);
        loginButton.click();
        return new HomePage();
    }
}

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

test-framework/
├── src/main/java/core/
│   ├── driver/           # WebDriverManager, CapabilitiesFactory
│   ├── config/           # Парсинг .yaml конфигов для разных сред
│   ├── listeners/        # Кастомные листенеры для логирования и скриншотов
│   └── utils/            # Helpers для работы с БД, генерации данных, JSON
├── src/test/java/
│   ├── api/              # Тесты REST API (RestAssured)
│   ├── ui/pages/         # Page Objects
│   ├── ui/tests/         # UI-тест-классы
│   └── testdata/         # Провайдеры данных для @ParameterizedTest
└── pom.xml               # С зависимостями и плагинами для Surefire, Allure

Фреймворк был интегрирован с Jenkins Pipeline, поддерживал параллельный запуск через maven-surefire-plugin и формировал интерактивные отчёты в Allure Report.