Больше 50 занятий с домашкой, по 2 занятия в неделю, и живые вебинары Программа по Java с погружением в backend Ваш уникальный микросервисный проект на Spring, покрытый всеми видами автотестов Обновленный курс по iOS Собственный проект на Swift, полное погружение в мир нативного mobile-тестирования и ни слова про Appium Обновлённый Niffler Полноценный web-проект с продуманной архитектурой, позволяющей обучаться на практических примерах Чему мы учим? Вы прокачаете знания в автоматизации на Java до уровня Senior+ и разнообразите портфолио впечатляющими кейсами Архитектура и дизайн Глубокому пониманию JUnit extension. И использованию паттернов разработки, таких как decorator, singleton, factory, IOC. Востребованность профессии 100 000 ₽ — Средняя заработная плата тестировщика. Одна из самых перспективных профессий на рынке. Возможность удалённой работы и гибкого графика. Быстрый карьерный рост от джуна до тимлида. Постоянное развитие и изучение новых технологий. Возможность работы в различных сферах. Высокий спрос на специалистов во всех IT-компаниях. Зарплатные ожидания ~ 90 000 ₽ Junior QA, после курса ~ 200 000 ₽ Middle QA, опыт от 1 до 3 лет ~ 350 000 ₽ Senior, с опытом от 3 лет Покроем всё Тестированию нестандартных протоколов взаимодействия: gRPC, GraphQL, SOAP. А также работе с базами данных и Kafka, и с такими инструментами как docker и docker-compose. Кроме того Создадим весь код с нуля, исследуем, как тестируемые технологии работают в Spring Boot под капотом. Спойлер: Программа курса: Регулярно обновляем программу, учим только актуальному 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 Подключение Extension декларативно — аннотация @ExtendWith Разбор теста, написанного на вводном занятии Написание Extension для создания скриншотов на упавший тест Полная программа 4 Погружение в 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 сессия по работе с БД - Создание аннотации и 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 24 Расширяем тестовое покрытие - применяем ApiLoginExtension, DbTestUserExtension для построения полноценного фреймворка. Q&A сессия - Пишем 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 43 Тонкости инфраструктуры: Докеризация фронтенда, bash-скрипты - Рассмотрим bash-скрипты в проекте niffler - Докеризация фронтеда с использованием nginx - Особеннности работы с docker-окружением 44 Тестирование микросервисов в docker-compose: работа с артефактами тестов (Allure) + Q&A по работе с docker compose - Обзор Allure docker service - Написание интерфейса SuiteExtension, AllureSendresultExtension - Q&A сессия 45 Wiremock в тестах: in-memory подход - Сравнение с библиотекой 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 по дипломному проекту Отвечаем на вопросы, возникшие при работе над дипломным проектом 53 Выпускной!