Программа и содержание
О курсе:
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
Пишем свои кастомные ожидания для п