49
Как тестировать приложение, тестирующее другие приложения? Тимур Шевляков Senior R&D Engineer Borland (A Micro Focus Company)

Тимур Шевляков

Embed Size (px)

Citation preview

Как тестировать приложение, тестирующее другие приложения?

ТимурШевляков

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

Как тестировать?

Особенности тестирования

Подходы к тестированию

Опыт в тестировании

Подходы к тестированию инструментов для тестирования

Подходы к тестированию модуля нагрузочного тестирования

Особенности тестирования инструмента для тестирования в

общем

Тип входных параметров

App Tool

Данные Действия

...

...Приложения

Новый набор входных параметров

Конечное приложение

App 1.0Набор А

App 2.0Набор Б

Новый набор входных параметров

Инструмент для тестирования

Tool 1.0Набор А

Tool 1.0Набор Б

App 1.0 App 2.0

Оракул

• Что такое оракул?

• Что считать верным результатом?

картинка с http://allpainters.ru/

Особенности тестирования инструмента для нагрузочного

тестирования

Нагрузочное тестирование

Виды нагрузочного тестирования

• Тестирование производительности (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 с большим числом агентов

Измерение метрик

• Выбор эталонов

• Сравнение с эталонами

• Создание "нулевых линий" - baseline

Сбора и анализ данных• Инвариант - входные данные, совпадающие с результатом

работы инструмента.• Удобный формат входных данных

.csv Tool

Set Transaction Time

Конвертировать и сравнить

Тестирование на макроуровне

Архитектура на уровне CI

• Обнаружение явных и потенциальных ошибок, как можно

раньше

• Структурированная информация о тестах

• Быстрый доступ к информации о тестах

Архитектура на уровне CI

code

SVN

c/r Phabricator

Jenkins

build Unit Tests

Dashboard

Архитектура системы тестирования

• Маскимизация числа автоматизированных тестов• Минимизация времени на настройку / запуск / поддерживание

работы системы тестирования• Краткие, понятные и своевременные отчеты• Сбор подробных сведений об упавших тестах и сохранение их

максимально долгое время• Сохранение статистики тестов для релизов каждой итерации

Архитектура системы тестирования

JUnitCppUnitNUnit

Core

GUI

SVN

Silk CentralTest Manager

Silk TestAgent

.dmp

dmpster

Long Lasting Tests

Инструментарий

dmpsterToolСтарт

Crash .dmp

https://github.com/alexanderfloh/dmpster

РезюмеВ общем случае● Подходы к тестированию конечных приложений и

инструментов для тестирования отличаются● Модули, которые тестируются абсолютно, и, требующие

сравнительного анализа● Архитектура, позволяющая быстро обнаруживать ошибки● Быстрое исправление обнаруженной ошибки● Непрерывная связь с клиентами● Использование реальных данных● Автоматизированное тестирование не заменит ручное

РезюмеПри отсутствии тестировщиков:

● Максимальная автоматизация

● Удобный вспомогательный инструментарий

● Каждый разработчик ответствечает за стабильность тестов и

поддержку определенных модулей приложения

● Краткие, понятные и своевременные отчеты о тестах

@cracketus

Тимур Шевляков

Senior R&D Engineer Borland(A Micro Focus Company)

Вопросы?

tshevlyakov

cracketus.blogspot.co.at