Программа и содержание

О курсе:

6 месяцев обучения

Больше 50 занятий с домашкой, по 2 занятия в неделю, и живые вебинары

Программа по Java с погружением в backend

Ваш уникальный микросервисный проект на Spring, покрытый всеми видами автотестов

Обновленный курс по iOS

Собственный проект на Swift, полное погружение в мир нативного mobile-тестирования и ни слова про Appium

Обновлённый Niffler

Полноценный web-проект с продуманной архитектурой, позволяющей обучаться на практических примерах

Чему мы учим?

Вы прокачаете знания в автоматизации на Java до уровня Senior+ и разнообразите портфолио впечатляющими кейсами

Архитектура и дизайн. Глубокому пониманию JUnit extension. И использованию паттернов разработки, таких как decorator, singleton, factory, IOC.

Покроем всё. Тестированию нестандартных протоколов взаимодействия: gRPC, GraphQL, SOAP. А также работе с базами данных и Kafka, и с такими инструментами как docker и docker-compose.

Кроме того. Создадим весь код с нуля, исследуем, как тестируемые технологии работают в Spring Boot под капотом.

Востребованность профессии

100 000 ₽ — Средняя заработная плата тестировщика.

Одна из самых перспективных профессий на рынке.

Возможность удалённой работы и гибкого графика.

Быстрый карьерный рост от джуна до тимлида.

Постоянное развитие и изучение новых технологий.

Возможность работы в различных сферах.

Высокий спрос на специалистов во всех IT-компаниях.

Программа курса

Регулярно обновляем программу, учим только актуальному

1. Niffler и его тестирование Advanced Как меняется проект

Тестируем полностью самописное приложение в суперсовременном стеке (Java 21, Spring Boot 3, Spring Security 6, Spring Data, OAuth2, gRPC, GraphQL, Microservices, Docker, Postgres, React)

Научим не просто понимать, как написать автотест на GraphQL, но и разберемся в том, как это работает под капотом

Вы узнаете, как сделать запрос в БД из теста и зачем это может быть нужно в микросервисной архитектуре

Будем подменять настоящие микросервисы на Wiremock на практике

2. Знакомство с Niffler NG. Локальный запуск, введение в учебный процесс, QA сессия

Обзор проекта Niffler

Необходимые предусловия для работы с проектом

Запуск локально: настройка в Idea Ultimate, Community

Необходимые предусловия для запуска проекта в docker, отличия для Windows и Nix

Запуск проекта в докере

Выполнение домашних заданий

3.1. Введение в JUnit Extensions. Callbacks, жизненный цикл теста, разбор первого теста

Интерфейсы BeforeEachCallback, AfterEachCallback и другие callback

Подключение Extension декларативно — аннотация @ExtendWith

Разбор теста, написанного на вводном занятии

Написание Extension для создания скриншотов на упавший тест

3.2. Погружение в JUnit Extensions: ExtensionContext, интерфейс ParameterResolver. Создание Extension "очередь тестовых пользователей"

Интерфейсы ExtensionContext и Store

Концепция шэринга данных через Store + Namespace

Создаем threadsafe очередь пользователей – UsersQueueExtension

3.3. Интеграция JUnit Extensions. Метааннотации, 3 способа подключения Extension. Создаем TestMethodContextExtension, QA сессия

Работа с аннотациями в Extensions, класс AnnotationSupport

Метааннотации

ServiceLoader и глобальное подключение Extensions

Аннотация @RegisterExtension

Q&A сессия

4.1. Работаем с RDBMS из тестов. Введение в JDBC базовые интерфейсы и архитектура. Пишем INSERT и SELECT запросы

Краткая теория JDBC

Интерфейсы DataSource, Connection, Statement, PreparedStatement, ResultSet

Реализация SpendRepositryJdbc

Вставка данных в БД (sql INSERT) через JDBC

Возврат ID созданной записи

4.2. Работаем с RDBMS из тестов. JDBC Транзакции, JTA. Определение границ транзакций

Понятие Repository, создание UserRepository

Транзакции в JDBC

Реализация UserRepositoryJDBC

Модификация данных в БД

5.1. Работаем с RDBMS из тестов. Spring-JDBC базовая функциональность и архитектура библиотеки

JDBC-Template: теория и применимость

Реализация простых запросов (CRUD) c помощью библиотеки Spring-JDBC

5.2. Работаем с RDBMS из тестов. Spring-JDBC транзакции

Класс TransactionTemplate

Интерфейс PreparedStatementCreator

Реализация UserRepositorySpringJdbc

6.1. Работаем с RDBMS из тестов. Спецификация JPA

Hibernate и JPA краткая теория

Интерфейсы EntityManagerFactory и EntityManager

Декораторы для EntityManager: интерфейс EntityTransaction и использование ThreadLocal EntityManager

6.2. Работаем с RDBMS из тестов. Hibernate + JNDI + JTA

Конфигурационный файл persistence.xml

Реализация UserRepositoryHibernate

Особенности использования Hibernate работа с коллекциями, ленивая инициализация

6.3. Используем Repository. Подключаем созданные классы Repository к Extension. QA сессия

Создание аннотации и Extension AbstractTestUserExtension

Наследование Extension: создание класса DbTestUserExtension

Реализация логики создание тестового пользователя: хэширование пароля, создание в БД нескольких микросервисов

Передача пользователя в тест через ParameterResolver

Q&A сессия

7.1. втоматизация «с нуля» минималистичный фреймворк

Build.gradle best practices

Конфигурации запуска

Абстракции для работы с REST api

PageObject

Утилитные классы

7.2. Автоматизация «с нуля». Базовые классы. Dependency Injection + QA сессия

Классы BaseRestTest, BaseGraphQL

Подготовка к написанию REST тестов пишем простые тесты на internal api (без авторизации)

Концепция Dependency Injection и ее реализация с помощью интерфейса TestInstancePostProcessor в JUnit 5

Q&A сессия

8.1. Параллелизация тестов в JUnit5: Теория

Теория параллельного программирования и ее применимость к тестам

Shared mutable state: что такое и чем вредит

Конфигурация и стратегии параллелизации в JUnit 5

8.2. Параллелизация тестов в JUnit5: инструменты управление параллельным запуском. QA сессия по параллелизации

Аннотация @ResourceLock

Аннотация @Execution

Особенности работы с JUnit Extensions при многопоточном выполнении тестов

Еще раз про важность использования ThreadLocal переменных на примере EntityManager

Q&A сессия

9.1. Allure Lifecycle. Добавляем в отчет логи тестируемых сервисов

Класс AllureLifecycle

Создаем ServerLogExtension, добавляющий логи бэкенда в Allure

Дорабатываем UsersQueueExtension

Создаем Extension для удаления вложений к тестам

9.2. Allure Lifecycle. Кастомные html-вложения на примере логгирования SQL

Принцип работа внешних интеграций Allure на примере класса AllureSelenide

Реализация интеграции для работы с SQL: библиотека P6Spy

10.1 Selenide Conditions. Создаем кастомные проверки для веб-элементов и коллекций

Классы Condition / CollectionCondition

Пишем свои кастомные ожидания для п