Как тестировать приложение, тестирующее другие приложения? Тимур Шевляков Senior R&D Engineer Borland (A Micro Focus Company)
Как тестировать приложение, тестирующее другие приложения?
ТимурШевляков
Senior R&D Engineer Borland (A Micro Focus Company)
О себе
• Senior R&D Engineer на проекте Silk Performer• Разработка кода для сбора и анализа метрик• C++, C#
Timur Shevlyakov
tshevlyakov
@cracketus
cracketus.blogspot.co.at
План
• Что тестируем?• Как тестировать?• Особенности тестирования
- инструмента для тестирования в общем- инструмента для нагрузочного тестирования
• Резюме• Вопросы и ответы
Silk Performer
Все приложенияИнструменты для
тестирования
Нагрузочноетестирование
http://www.borland.com/en-GB/Products/Software-Testing/Performance-Testing/Silk-Performer
Особенности тестирования
Подходы к тестированию
Опыт в тестировании
Подходы к тестированию инструментов для тестирования
Подходы к тестированию модуля нагрузочного тестирования
Новый набор входных параметров
Инструмент для тестирования
Tool 1.0Набор А
Tool 1.0Набор Б
App 1.0 App 2.0
Виды нагрузочного тестирования
• Тестирование производительности (Performance test)
• Нагрузочное тестирование (Load test)
Виды нагрузочного тестирования
• Стресс-тестирование (Stress test)
• Тестирование емкости (Capacity test)
Из-за решаемых задач
• Измерение производительности
• Исследование поведения приложения при допустимых
нагрузках
• Исследование поведения приложения при непредусмотренных
нагрузках
Тестирование, мотивированное экономическими причинами
Еще инфографика есть на http://www.borland.com/infographics/black-friday/
Генератор нагрузки
Тестируемый объект
Запросы
Запросы
Запросы
Запросы вручную
Определение мощностинагрузки
Генератор нагрузки. Свойства и требования
• Быстродействие: только нагрузка и измерения, ничего лишнего
• Ограниченность в ресурсах
• Облачные агенты
Сбор данных. Метрики производительности
• Нагрузка на CPU
• Потребление памяти
• Дисковые операции I/O
• Сетевые ресурсы
Сбор данных. Метрики приложения
• Время выполнения транзакции
• Количество и время на обработку запросов и ответов
• Другие метрики, которые зависят от типа тестируемого
приложения
Концепция
• Отсутствие тестировщиков
• Использование собственных
продуктов
• Максимальная автоматизация
• Использование реальных
данных
Многообразие входных параметров
Универсальность кода
Реальные данные
Количество тестов → max
картинка с http://www.antiquestradegazette.com/
Оракул
Сторонний
• Все в порядке
Свой
• Описать методологию в документации
• Запустить инструмент на большом наборе эталонов-примеров
и сформировать baseline
На уровне протокола
• Проверка с помощью системных и сторонних средств
(Performance Monitor, iperf, WireShark)
Генератор нагрузки
Генератор нагрузки. Распределенная система
• Система состоит из 1 контроллера и N агентов
• Нужно определить ∃ x : ∀ N > x система из N агентов
работает как общий случай
Генератор нагрузки. Распределенная система
• Тестирование агента, изолированного от системы
• Тестирование по отдельности систем из N ∈ [1, x] агентов
• Smoke Test с большим числом агентов
Сбора и анализ данных• Инвариант - входные данные, совпадающие с результатом
работы инструмента.• Удобный формат входных данных
.csv Tool
Set Transaction Time
Конвертировать и сравнить
Архитектура на уровне CI
• Обнаружение явных и потенциальных ошибок, как можно
раньше
• Структурированная информация о тестах
• Быстрый доступ к информации о тестах
Архитектура системы тестирования
• Маскимизация числа автоматизированных тестов• Минимизация времени на настройку / запуск / поддерживание
работы системы тестирования• Краткие, понятные и своевременные отчеты• Сбор подробных сведений об упавших тестах и сохранение их
максимально долгое время• Сохранение статистики тестов для релизов каждой итерации
Архитектура системы тестирования
JUnitCppUnitNUnit
Core
GUI
SVN
Silk CentralTest Manager
Silk TestAgent
.dmp
dmpster
Long Lasting Tests
Silk Test
http://www.borland.com/en-GB/Products/Software-Testing/Automated-Testing/Silk-Test
Silk Central
http://www.borland.com/en-GB/Products/Software-Testing/Test-Management/Silk-Central
dmpsterToolСтарт
Crash .dmp
https://github.com/alexanderfloh/dmpster
РезюмеВ общем случае● Подходы к тестированию конечных приложений и
инструментов для тестирования отличаются● Модули, которые тестируются абсолютно, и, требующие
сравнительного анализа● Архитектура, позволяющая быстро обнаруживать ошибки● Быстрое исправление обнаруженной ошибки● Непрерывная связь с клиентами● Использование реальных данных● Автоматизированное тестирование не заменит ручное
РезюмеПри отсутствии тестировщиков:
● Максимальная автоматизация
● Удобный вспомогательный инструментарий
● Каждый разработчик ответствечает за стабильность тестов и
поддержку определенных модулей приложения
● Краткие, понятные и своевременные отчеты о тестах