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