Содержание
Программа
Введение
Виды тестирования. Версионирование
Планирование тестирования (Test case / Bugs)
Test design
Test design. Exploratory testing
Тестирование API
Тестирование API. Wireshark
Тестирование API. Postman
Теория
Практика
Fuzzing-тестирование
Теория
Практика
Тестирование API. SoapUI
Теория
Практика
Нагрузочное тестирование
Теория
Практика
Тестирование интерфейса пользователя. Web/Desktop
Теория
Практика
Тестирование на проникновение
Программа
Введение
Примеры наиболее дорогих ошибок
Причины возникновения:
Космические лучи :)
Ошибки в ПО
Виды тестирования. Версионирование
Различные классификации
По цели
По свойствам
По исполнителю
По уровню
По интерфейсу
Тестирование требований?
Пирамида тестирования:
Приоритеты различных видов тестирования
Соотношение видов тестов
Принципы семантического версионирования
Стандарт версионирования
Пример на разделяемом протоколе взаимодействия
Пример на библиотечных решениях
Политика версионирования при тестировании:
Альфа-версии
Бета-версии
Планирование тестирования (Test case / Bugs)
Структура и назначение Test-plan:
Кто
Что
Как
Когда
Критерии
Структура и назначение Test-case:
Предусловия
Шаги
Фокусирование на функциональности
Заведение ошибок:
Workflow
Основные поля и принципы их заполнения
Поиск дубликатов по стекам
Вовлечённость тестировщика в работу команды
Test design
Black Box
Классы эквивалентности
Граничные значения
Доменный анализ
Диаграмма переходов состояний
Попарное тестирование
Тестирование вариантов использования
White Box
Потоки управления
Потоки данных
Experience based
Checklists
Exploratory
Error Guessing
Test design. Exploratory testing
Function
Claims
Domain
User
Stress
Risk
Flow
Automatic
Scenario
Тестирование API
Особенности тестирования протоколов
RPC
Messaging
Уровни протоколов
Форматы сериализации:
JSON
SOAP
Protobuf
Архитектура генерации кода для сервера и клиента и mock для них
Тестирование API. Wireshark
Архитектура pcap, ядра ОС и снифферов
Захват простого TCP-трафика в Wireshark
Захват широковещательного UDP-трафика
Фильтрация по порту
Анализ пропускной способности сети
Просмотр Flow graph
Пример Decode as для преобразования RDP → RTP
Захват и анализ HTTP трафика
Выделение TCP-коммуникаций запроса и ответа
Тестирование API. Postman
Теория
Напоминание принципов протокола HTTP (GET/POST/…)
JSON-schema/OpenAPI/Swagger - основы и примеры описания REST
API
Аналогия с XSD/WSDL
Практика
Postman:
Импорт описания
API
Применение окружений
Создание запросов
Использование переменных и их переопределение
Тесты на JS для проверки:
Кода возврата
Полей ответа
Соответствия схеме
Назначение и применение mock-серверов
Fuzzing-тестирование
Теория
Пример ГОСТ 56939-2024
Виды верификации:
Статическая (SonarQube, PVS)
Динамическая (asan, ubsan, fuzzing)
Sanitizers:
asan
ubsan
Архитектура Fuzzing:
Начальная выборка
Контроль трасс исполнения
Генетические алгоритмы
Критерии остановки тестирования
Аналогия с Reinforcement Learning
Практика
AFL fuzzer:
Контейнерный запуск
Создание тестовых данных для затравки
Пример на дереве условных операторов
Запуск afl-fuzz и разъяснение полей, выводимых в runtime
Разбор результата поска падения приложения
Тестирование API. SoapUI
Теория
XSD-схемы - основы и примеры описания типов
WSDL-сервис - основы и пример описания методов
Практика
SoapUI:
Создание проекта на основе WSDL
Посылка запросов и получение ответов
Создание TestSuit
Проверки на основе XPath
Нагрузочное тестирование
Теория
Фокусы тестирования тестирования производительности:
Нагрузка
Стабильность
Отказоустойчивость
Масштабируемость
Стресс-тестирование
Профили нагрузки:
SLA
Пределы производительности
Параметры:
Время обработки
Чатота запросов
Размер данных
Откуда брать профили нагрузки:
БД
Журналы
Прогноз
Инструменты:
Web-консоль
JMeter
Gatling
K6
Практика
JMeter:
Поддерживаемые протоколы
Ручное создание HTTP-запросов
Запись сценариев через Proxy
Thread group и его параметры
Вынесение общих параметров
Просмотр результатов в графическом и табличном видах
Тестирование интерфейса пользователя. Web/Desktop
Теория
Классификация по технологиям:
Desktop
Web
Классификация инструментов по завязке на технологию разработки
Примеры технологий разработки интерфейса и соответствие инструментов тестирования со знанием идентификаторов элементов интерфейса:
Qt: Squish
JS: Selenium
Java: Assert4
Применение компьютерного зрения: Sikuli
Архитектура
OpenCV
Tesseract
Jython
Применение машинного обучения: Testolang
Архитектура
QEMU/KVM
Нейронные сети
Архитектура Selenium:
WebDriver
API
на Python, Java, …
IDE как расширение браузеров
Практика
Selenuim:
Создание виртуального окружения на Python
Запуск WebDriver
Поиск элементов на странице (css, id, атрибуты)
Ввод текстовых данных
Автоматизированная генерация сценария в IDE
Тестирование на проникновение
Дополнительные темы в зависимости от квалификации курса:
docker (3 часа)
git (3 часа)