Содержание
Программа
Введение
Виды тестирования. Версионирование
Планирование тестирования (Test case / Bugs)
Проектированеие тестов (test design)
Тестирование API. WSDL
Теория
Практика
Тестирование API. REST
Теория
Практика
Тестирование интерфейса пользователя. Web
Теория
Практика
Тестирование интерфейса пользователя (Desktop)
Теория
Практика
Нагрузочное тестирование
Теория
Практика
Fuzzing-тестирование
Теория
Практика
Программа
Введение
Примеры наиболее дорогих ошибок
Причины возникновения:
Космические лучи :)
Ошибки в ПО
Виды тестирования. Версионирование
Различные классификации
По цели
По свойствам
По исполнителю
По уровню
По интерфейсу
Пирамида тестирования:
Приоритеты различных видов тестирования
Соотношение видов тестов
Принципы семантического версионирования
Стандарт версионирования
Пример на разделяемом протоколе взаимодействия
Пример на библиотечных решениях
Политика версионирования при тестировании:
Альфа-версии
Бета-версии
Планирование тестирования (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
Теория
Особенности тестирования протоколов
RPC: WSDL/SOAP + REST/JSON
Messaging
XSD-схемы - основы и примеры описания типов
WSDL-сервис - основы и пример описания методов
Пример генерированного кода для сервера и клиента
Практика
Сетевой сниферинг SOAP с помощью wireshark
SoapUI:
Создание проекта на основе WSDL
Посылка запросов и получение ответов
Создание TestSuit
Проверки на основе XPath
Тестирование API. REST
Теория
Напоминание принципов протокола HTTP (GET/POST/…)
JSON-schema/OpenAPI/Swagger - основы и примеры описания REST
API
Аналогия с XSD/WSDL
Практика
Postman:
Импорт описания
API
Применение окружений
Создание запросов
Использование переменных и их переопределение
Тесты на JS для проверки:
Кода возврата
Полей ответа
Соответствия схеме
Назначение и применение mock-серверов
Тестирование интерфейса пользователя. Web
Теория
Архитектура Selenium:
WebDriver
API
на Python, Java, …
IDE как расширение браузеров
Принципы идентификации элементов web-страниц
Практика
Selenuim:
Создание виртуального окружения на Python
Запуск WebDriver
Поиск элементов на странице (css, id, атрибуты)
Ввод текстовых данных
Автоматизированная генерация сценария в IDE
Тестирование интерфейса пользователя (Desktop)
Теория
Примеры технологий разработки интерфейса и соответствие инструментов тестирования со знанием идентификаторов элементов интерфейса:
Qt: Squish
JS: Selenium
Применение компьютерного зрения: Sikuli
Архитектура
OpenCV
Tesseract
Jython
Применение машинного обучения: Testolang
Архитектура
QEMU/KVM
Нейронные сети
Практика
Sikuli:
Подключение sikuli в Python
Тест сложения в калькуляторе передачей нажатия клавиш
Фиксация изображений для поиска
Параметры поиска изображения
Нагрузочное тестирование
Теория
Фокусы нагрузочного тестирования:
Производительность
Стабильность
Отказоустойчивость
Масштабируемость
Стресс-тестирование
Профили нагрузки:
SLA
Пределы производительности
Параметры:
Время обработки
Чатота запросов
Размер данных
Откуда брать профили нагрузки:
БД
Журналы
Прогноз
Инструменты:
Web-консоль
JMeter
Gatling
K6
Практика
JMeter:
Поддерживаемые протоколы
Ручное создание HTTP-запросов
Запись сценариев через Proxy
Thread group и его параметры
Вынесение общих параметров
Просмотр результатов в графическом и табличном видах
Fuzzing-тестирование
Теория
Виды верификации:
Статическая
Динамическая (…, fuzzing, …)
Sanitizers:
asan
ubsan
Генерация данных:
Начальная выборка
Контроль трасс исполнения
Эволюционные алгоритмы
Критерии остановки тестирования
Практика
AFL fuzzer:
Сборка clang с ключами asan и ubsan
Создание тестовых данных для затравки
Пример на дереве условных операторов
Запуск afl-fuzz и разъяснение полей, выводимых в runtime
Разбор результата поска падения приложения