💻 Программирование [qa.guru, Дмитрий Тучс, Михаил Рубанов] Курс по автоматизации тестирования Java Advanced 2.0 для продвинутых. 10 поток (2025)

  • ОФОРМИТЬ ПОДПИСКУ

Calvin Candie

Вечный

Calvin Candie

Вечный
2 Сен 2018
46,105
4,700
Автор: qa.guru, Дмитрий Тучс, Михаил Рубанов
Название: Курс по автоматизации тестирования Java Advanced 2.0 для продвинутых. 10 поток (2025)

1777560132468.png

О курсе:
  • 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 сессия
Создание аннотации @testuser и 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
Пишем свои кастомные ожидания для проекта Niffler: FriendsCondition, PhotoCondition

10.2. Selenide: нестатическая кинфигурация, библиотека selenide-core
Класс SelenideConfiguration
Реализация поднятия 2 браузеров в тесте
Параллельное выполнение тестов в разных браузерах
Использование PageObject для бибилотеки selenide-core

10.3. QA сессия по Allure и Selenide
Реализация поднятия 2 браузеров в тесте
Параллельное выполнение тестов в разных браузерах
Использование PageObject для бибилотеки selenide-core
QA сессия по кастомизации Allure и Selenide

11.1. OAUTH 2.0 + OIDC. Базовые концепции. PKCE
Краткая теория Oauth 2.0 code flow
Смотрим http-запросы в консоли браузера и подготавливаем инфраструктуру для автоматизации логина

11.2. OAUTH 2.0 + OIDC. Реализация через Retrofit + JUnit Extension
Создаем интерфес ContextHolderExtension
Создаем класс CodeInterceptor для okhttp клиента
Создаем ApiLoginExtension

11.3. OAUTH 2.0 + OIDC. Расширяем тестовое покрытие. QA сессия
Пишем WEB и API тесты с созданием всех тестовых данных через JUnit Extensions.
Q&A сессия по авторизации через Retrofit

12.1. Spring core + Spring Boot. Создаем простой REST сервис
Базовые компоненты Spring (context, DI, сервисы)
Использование Spring Web (создаем REST сервис)
Использование Spring Data JPA (работа с базой)

12.2. Spring core + Spring Boot. Работа с исключениями
Концепция Controller Advice, возврат на фронт унифицированных ошибок
Docker краткая теория
Докеризация Spring-приложения через плагин google jib

13.1. GraphQL: Реализация в Spring Boot
GraphQL в Spring Boot
Аннотации @QueryMappig, @chemaMapping
Интерфейс DataFetchingEnvironment
Утилита graphiql

13.2. GraphQL. Пишем автотесты с использованием Apollo Client
Подготовка тестовых данных
Создаем Extension GqlRequestExtension для работы со статическими данными
Пишем тесты на проверку вложенных подзапросов
Пишем тесты на проверку работы с Apollo Cache

14. Установочное занятие по диплому
Знакомство с дипломными проектами: Rococo, Rangiffler
Обзор успешной дипломной работы

15.1. gRPC: Реализация в Spring Boot
gRPC в Spring Boot
Protobuf и Protoc компиллятор
Интерфейс StreamObserver
Конфигурация, работа с исключениями и информирование об ошибках

15.2. gRPC. Пишем автотесты с использованием нативных библиотек
Подготовка тестовых данных
Особенности работы с proto-файлами тестируемых сервисов в тестах
Пишем тесты на gRPC сервис niffler-currency
Сложные кейсы: gRPC Streaming

16.1. SOAP: Реализация в Spring Boot
SOAP в Spring Boot
XSD и WSDL схемыАннотации @Endpoint, @PayloadRoot, @ResponsePayload

16.2. SOAP: Пишем тесты с помощью Retrofit
Подготовка тестовых данных
Особенности работы с wsdl тестируемых сервисов в тестах
Пишем тесты на SOAP сервис niffler-userdata

16.3. GraphQL, gRPC, SOAP: Q&A сессия

17. Unit тесты – пишем тестируемый код и тесты для него
Краткая теория юнит-тестирования
Библиотека Mockito
Покрываем тестами код сервисов Niffler

18.1. Пишем первые тесты, разбираемся с селекторами
Что такое селекторы, как по них находить элементы
Как посмотреть дерево элементов через консоль
Как работать с брейкпойнтами во время написания теста
Как добавить первые тесты в проект
Как запускать тесты
Пишем первый тест на экране регистрации

18.2. Переиспользуем код между разными тестами
Пишем второй тест и переиспользуем код между ними
Стабилизируем тесты: сбросив данные о регистрации
Как деталилазия шагов упрощает чтение тест-репорта
Выносим общий код в сетап и тирдаун

18.3. Погружение: пишем тесты для сложных сценариев
Добавляем accessibilityIdentifier для тестов
Пишем сложный тест на три экрана — проходим авторизацию, добавляем новые траты и проверяем, что они появились в общем списке.
Упрощаем тест, чтобы его легко было прочитать.

18.4. Page Object паттерн в IOS тестах
Делим тесткейсы на разные файлы
Зачем нужны пейджобжекты и как они помогают писать новые тесты
Описываем структуру пейдж-обжекта и переносим все прошлые тесты на них

18.5. Особенности XCUITests
Приводим тесты к нужной структуре, обсуждаем название тестов
Обсуждаем разные способы получения селекторов
Способы ускорения тестов

18.6. Финальная лекция блока
Как максимально быстро настроить автоматический запуск тестов и оповещения в мессенджер

19.1. Docker-compose. Запуск тестов локально в изолированном окружении
Поднимаем микросервисы в docker compose
Selenoid & Selenoid UI
Доработка конфигурации тестов для запуска в docker
Упаковка проекта с тестами в docker контейнер, написание Dockerfile

19.2. Докеризация Niffler Тонкости инфраструктуры
Рассмотрим bash-скрипты в проекте niffler
Докеризация фронтеда с использованием nginx
Особеннности работы с docker-окружением

19.3. Docker-compose QA сессия
Обзор Allure docker service
Написание интерфейса SuiteExtension, AllureSendresultExtension
Q&A сессия

20.1. Wiremock. Мок REST API in-memory
Сравнение с библиотекой Mockito
Используем in-memory Wiremock прямо в тестах

20.2. Wiremock. Standalone mock for RESTgRPC API
Используем http и gRPC Wiremock в docker-compose

21.1. Apache Kafkа. Реализация producer consumer в Spring Boot
Kafka в проекте на Spring Boot
Конфигурации consumer и producer

21.2. Apache Kafkа. Реализация consumer в тестах
Пишем свой Consumer и JUnit Extension для его использования в тестах

21.3. Q&A сессия по Wiremock и Kafka

22. Конференции – готовим доклад и себя к выступлению
Как попасть на конференцию спикером
Как готовиться
Презентация – хорошая и плохая
Дискуссия до и после доклада
Ради чего? Плюсы и минусы

23. CI/CD - pipeline, к которому мы шли
Рассматриваем вопросы сборки проекта и деплоя на прод с использованием GHA

24. Q&A по дипломному проекту
Отвечаем на вопросы, возникшие при работе над дипломным проектом

Преподаватели:
Дмитрий Тучс.
Преподаёт основную программу Java на курсе Java Advanced 2.0
В IT больше 12 лет. Начинал в аналитике, управлял проектами. Сейчас — Head of QA at Dodo Brands. Занимается менторством, пишет и автоматизирует на Java. Автор учебной программы QA.GURU Java Advanced.

Михаил Рубанов. Преподаёт iOS-программу на курсе Java Advanced 2.0
Head of mobile в Dodo Engineering. В разработке любит интерфейсы, тесты и доступность. Купил 10 эргономичных клавиатур. Написал книгу «Про доступность iOS». Пишет статьи на Хабр, ведет Telegram-канал о мобильной разработке в Dodo.

Подробнее:
Скрытое содержимое доступно для зарегистрированных пользователей!

Скачать:
 

Похожие темы