Содержание
Программа
Введение
Виды тестирования. Версионирование
Планирование тестирования (Test case / Bugs)
Проектирование тестов (test design)
Тестирование API. WSDL/REST
Тестирование 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
Исследовательское тестирование. Test strategy model:
Function
Claims
Domain
User
Stress
Risk
Flow
Automatic
Scenario
Тестирование API. WSDL/REST
Особенности тестирования протоколов
RPC: WSDL/SOAP + REST/JSON
Messaging
XSD-схемы - основы и примеры описания типов
WSDL-сервис - основы и пример описания методов
Архитектура генерации кода для сервера и клиента и 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-тестирование
Теория
Виды верификации:
Статическая
Динамическая (…, fuzzing, …)
Sanitizers:
asan
ubsan
Генерация данных:
Начальная выборка
Контроль трасс исполнения
Эволюционные алгоритмы
Критерии остановки тестирования
Практика
AFL fuzzer:
Сборка clang с ключами asan и ubsan
Создание тестовых данных для затравки
Пример на дереве условных операторов
Запуск afl-fuzz и разъяснение полей, выводимых в runtime
Разбор результата поска падения приложения
Тестирование API. SoapUI
Теория
Напоминание SOAP/WSDL/XSD/SML
Практика
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 часа)