Регулярно обновляем программу, учим только актуальному
1
Intro to QA.GURU Java Advanced v.2.0
Тестируем полностью самописное приложение в суперсовременном стеке (Java 21, Spring Boot 3, Spring Security 6, Spring Data, OAuth2, gRPC, GraphQL, Microservices, Docker, Postgres, React)
Научим не просто понимать, как написать автотест на GraphQL, но и разберемся в том, как это работает под капотом
Вы узнаете, как сделать запрос в БД из теста и зачем это может быть нужно в микросервисной архитектуре
Будем подменять настоящие микросервисы на Wiremock на практике
2
Знакомство с проектом, локальный запуск, введение в учебный процесс
Обзор проекта Niffler
Необходимые предусловия для работы с проектом
Запуск локально: настройка в Idea Ultimate, Community
Необходимые предусловия для запуска проекта в docker, отличия для Windows и Nix
Запуск проекта в докере
Выполнение домашних заданий
3
Введение в JUnit Extensions: Callbacks, место Extension в жизненном цикле теста JUnit 5
Интерфейсы BeforeEachCallback, AfterEachCallback и другие callback
Погружение в JUnit Extensions: ExtensionContext, интерфейс ParameterResolver. Создание Extension "очередь тестовых пользователей"
Интерфейсы ExtensionContext и Store
Концепция шэринга данных через Store + Namespace
Создаем threadsafe очередь пользователей – UsersQueueExtension
5
Интеграция JUnit Extensions в проект с тестами: Метааннотации, 3 способа подключения, QA сессия по введению в JUnit Extensions
- Работа с аннотациями в Extensions, класс AnnotationSupport - Метааннотации - ServiceLoader и глобальное подключение Extensions - Аннотация @RegisterExtension - Q&A сессия
6
Работаем с реляционными базами данных из тестов: Погружение в JDBC
- Краткая теория JDBC - Интерфейсы DataSource, Connection, Statement, PreparedStatement, ResultSet - Реализация SpendRepositryJdbc - Вставка данных в БД (sql INSERT) через JDBC - Возврат ID созданной записи
7
JDBC: Репозитории и транзакции. Модификация данных в БД
- Понятие Repository, создание UserRepository - Транзакции в JDBC - Реализация UserRepositoryJDBC - Модификация данных в БД
8
Библиотека Spring-JDBC для работы с БД: базовые концепции
- JDBC-Template: теория и применимость - Реализация простых запросов (CRUD) c помощью библиотеки Spring-JDBC
9
Библиотека Spring-JDBC - работа с ключами, транзакции, адаптеры
- Класс TransactionTemplate - Интерфейс PreparedStatementCreator - Реализация UserRepositorySpringJdbc
10
Библиотека Hibernate и введение в спецификацию JPA
- Hibernate и JPA - краткая теория - Интерфейсы EntityManagerFactory и EntityManager - Декораторы для EntityManager: интерфейс EntityTransaction и использование ThreadLocal EntityManager
11
Библиотека Hibernate: интеграция с тестовым проектом
- Конфигурационный файл persistence.xml - Реализация UserRepositoryHibernate - Особенности использования Hibernate - работа с коллекциями, ленивая инициализация
12
Использование созданных UserRepository и SpendRepository внутри JUnitExtensions. QA сессия по работе с БД
- Создание аннотации @TestUser и Extension AbstractTestUserExtension - Наследование Extension: создание класса DbTestUserExtension - Реализация логики создание тестового пользователя: хэширование пароля, создание в БД нескольких микросервисов - Передача пользователя в тест через ParameterResolver - Q&A сессия
13
Автоматизация на проекте «с нуля» – строим минимальный фреймворк
- Build.gradle - best practices - Конфигурации запуска - Абстракции для работы с REST api - PageObject - Утилитные классы
14
Автоматизация на проекте «с нуля» – базовые абстрактные классы, Dependency Injection. QA сессия по структуре проекта с тестами
- Классы BaseRestTest, BaseGraphQL - Подготовка на написанию REST тестов - пишем простые тесты на internal api (без авторизации) - Концепция Dependency Injection и ее реализация с помощью интерфейса TestInstancePostProcessor в JUnit 5 - Q&A сессия
15
Параллелизация тестов в JUnit5: Теория
- Теория параллельного программирования и ее применимость к тестам - Shared mutable state: что такое и чем вредит - Конфигурация и стратегии параллелизации в JUnit 5
16
Параллелизация тестов в JUnit5: инструменты управление параллельным запуском. QA сессия по параллелизации
- Аннотация @ResourceLock - Аннотация @Execution - Особенности работы с JUnit Extensions при многопоточным выполнении тестов - Еще раз про важность использования ThreadLocal переменных на примере EntityManager - Q&A сессия
17
Allure Lyfecycle
- Класс AllureLifecycle - Создаем ServerLogExtension, добавляющий логи бэкенда в Allure - Дорабатываем UsersQueueExtension - Создаем Extension для удаления вложений к тестам
18
Allure: пишем интеграции для работы с SQL
- Принцип работа внешних интеграций Allure на примере класса AllureSelenide - Реализация интеграции для работы с SQL: библиотека P6Spy
19
Selenide: кастомные Condition
- Классы Condition / CollectionCondition - Пишем свои кастомные ожидания для проекта Niffler: FriendsCondition, PhotoCondition
20
Selenide: нестатическая кинфигурация, библиотека selenide-core
- Класс SelenideConfiguration - Реализация поднятия 2 браузеров в тесте - Параллельное выполнение тестов в разных браузерах - Использование PageObject для бибилотеки selenide-core
21
Selenide: нестатическая кинфигурация, библиотека selenide-core
- Класс SelenideConfiguration - Реализация поднятия 2 браузеров в тесте - Параллельное выполнение тестов в разных браузерах - Использование PageObject для бибилотеки selenide-core - QA сессия по кастомизации Allure и Selenide
22
Реализуем Oauth авторизацию с помощью Retrofit: Базовые концепции и подготовка инфраструктуры
- Краткая теория Oauth 2.0 code flow - Смотрим http-запросы в консоли браузера и подготавливаем инфраструктуру для автоматизации логина
23
Реализуем Oauth авторизацию с помощью Retrofit: Используем ExtensionContext и http Interceptors
- Создаем интерфес ContextHolderExtension - Создаем класс CodeInterceptor для okhttp клиента - Создаем ApiLoginExtension
- Пишем WEB и API тесты с созданием всех тестовых данных через JUnit Extensions. - Q&A сессия по авторизации через Retrofit
25
Установочное занятие по диплому
- Знакомство с дипломными проектами: Rococo, Rangiffler - Обзор успешной дипломной работы
26
Создаем WEB-сервис на Java с использованием Spring boot
- Базовые компоненты Spring (context, DI, сервисы) - Использование Spring Web (создаем REST сервис) - Использование Spring Data JPA (работа с базой)
27
Работа с исключениями, запуск Spring boot приложения в docker: плагин google jib
- Концепция Controller Advice, возврат на фронт унифицированных ошибок - Docker - краткая теория - Докеризация Spring-приложения через плагин google jib
28
Пишем первые тесты, разбираемся с селекторами
- Что такое селекторы, как по них находить элементы - Как посмотреть дерево элементов через консоль - Как работать с брейкпойнтами во время написания теста - Как добавить первые тесты в проект - Как запускать тесты - Пишем первый тест на экране регистрации
29
Переиспользуем код между разными тестами
- Пишем второй тест и переиспользуем код между ними - Стабилизируем тесты: сбросив данные о регистрации - Как деталилазия шагов упрощает чтение тест-репорта - Выносим общий код в сетап и тирдаун
30
Погружение: пишем тесты для сложных сценариев
- Добавляем accessibilityIdentifier для тестов - Пишем сложный тест на три экрана — проходим авторизацию, добавляем новые траты и проверяем, что они появились в общем списке. - Упрощаем тест, чтобы его легко было прочитать.
31
Page Object паттерн в IOS тестах
- Делим тесткейсы на разные файлы - Зачем нужны пейджобжекты и как они помогают писать новые тесты - Описываем структуру пейдж-обжекта и переносим все прошлые тесты на них
32
Особенности XCUITests
- Приводим тесты к нужной структуре, обсуждаем название тестов - Обсуждаем разные способы получения селекторов - Способы ускорения тестов
33
Финальная лекция блока
Как максимально быстро настроить автоматический запуск тестов и оповещения в мессенджер
34
Unit тесты – пишем тестируемый код и тесты для него
- Краткая теория юнит-тестирования - Библиотека Mockito - Покрываем тестами код сервисов Niffler
35
GraphQL: Реализация в Spring Boot
- GraphQL в Spring Boot - Аннотации @QueryMappig, @chemaMapping - Интерфейс DataFetchingEnvironment - Утилита graphiql
36
GraphQL: Пишем тесты с помощью Retrofit
- Подготовка тестовых данных - Создаем Extension GqlRequestExtension для работы со статическими данными - Пишем тесты на проверку вложенных подзапросов - Пишем тесты на проверку работы с Apollo Cache
37
gRPC: Реализация в Spring Boot
- gRPC в Spring Boot - Protobuf и Protoc компиллятор - Интерфейс StreamObserver - Конфигурация, работа с исключениями и информирование об ошибках
38
Тестируем gRPC сервисы с помощью нативных библиотек
- Подготовка тестовых данных - Особенности работы с proto-файлами тестируемых сервисов в тестах - Пишем тесты на gRPC сервис niffler-currency - Сложные кейсы: gRPC Streaming
39
SOAP: Реализация в Spring Boot
- SOAP в Spring Boot - XSD и WSDL схемыАннотации @Endpoint, @PayloadRoot, @ResponsePayload
40
SOAP: Пишем тесты с помощью Retrofit
- Подготовка тестовых данных - Особенности работы с wsdl тестируемых сервисов в тестах - Пишем тесты на SOAP сервис niffler-userdata
41
GraphQL, gRPC, SOAP: Q&A сессия
42
Тестирование микросервисов в docker-compose: запуск тестов локально
- Поднимаем микросервисы в docker compose - Selenoid & Selenoid UI - Доработка конфигурации тестов для запуска в docker - Упаковка проекта с тестами в docker контейнер, написание Dockerfile
- Сравнение с библиотекой Mockito - Используем in-memory Wiremock прямо в тестах
46
Wiremock в тестах: standalone подход, мокаем REST API и gRPC
Используем http и gRPC Wiremock в docker-compose
47
Apache Kafka: Использование в Spring Boot
- Kafka в проекте на Spring Boot - Конфигурации consumer и producer
48
Apache Kafka: взаимодействие из тестов
Пишем свой Consumer и JUnit Extension для его использования в тестах
49
Q&A сессия по Wiremock и Kafka
50
Конференции – готовим доклад и себя к выступлению
- Как попасть на конференцию спикером - Как готовиться - Презентация – хорошая и плохая - Дискуссия до и после доклада - Ради чего? Плюсы и минусы
51
CI/CD - pipeline, к которому мы шли
Рассматриваем вопросы сборки проекта и деплоя на прод с использованием GHA
52
Q&A по дипломному проекту
Отвечаем на вопросы, возникшие при работе над дипломным проектом
52
Выпускной!
Чему мы учим?
Вы прокачаете знания в автоматизации на Java до уровня Senior+ и разнообразите портфолио впечатляющими кейсами
Архитектура и дизайн
Глубокому пониманию JUnit extension. И использованию паттернов разработки, таких как decorator, singleton, factory, IOC.
Покроем всё
Тестированию нестандартных протоколов взаимодействия: gRPC, GraphQL, SOAP. А также работе с базами данных и Kafka, и с такими инструментами как docker и docker-compose.
Кроме того
Создадим весь код с нуля, исследуем, как тестируемые технологии работают в Spring Boot под капотом.
Истории успеха учеников
Загрузка отзывов...
Ошибка загрузки. Попробуйте обновить страницу.
Есть вопрос? Напишите нам
Свяжитесь удобным способом или напишите через форму обратной связи
Мы используем куки, чтобы сайт работал быстро и удобно. Нажимая «Согласен», вы принимаете
условия их обработки.
Если не согласны — можно отключить куки в настройках браузера.