====== Программа ====== ===== Введение ===== - Примеры наиболее дорогих ошибок - Причины возникновения: * Космические лучи :) * Ошибки в ПО ===== Виды тестирования. Версионирование ===== - Различные классификации * По цели * По свойствам * По исполнителю * По уровню * По интерфейсу - Пирамида тестирования: * Приоритеты различных видов тестирования * Соотношение видов тестов - Принципы семантического версионирования * Стандарт версионирования * Пример на разделяемом протоколе взаимодействия * Пример на библиотечных решениях - Политика версионирования при тестировании: * Альфа-версии * Бета-версии ===== Планирование тестирования (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 * Разбор результата поска падения приложения