Компонентная среда разработки инструментария...

Preview:

DESCRIPTION

Евгений Рачинский - Доклад на конференции SQA Days-3

Citation preview

Компонентная среда разработки инструментария нагрузочного

тестированияЕвгений Рачинский. СПбГУ в сотрудничестве с Siemens Corporate Technology

СПбГУ

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

• Изучение поведения многопользовательской системы под нагрузкой

• Цели:– Оценка характеристик производительности системы

под нагрузкой– Поиск узких мест в системе– Планирование производительности

• Средства– Моделирование нагрузки– Инструментарий генерации нагрузки и измерения

показателей – Методы анализа результатов

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

• Существующие средства нагрузочного тестирования не обладают достаточной гибкостью и адаптивностью

• Решение: создание платформы для разработки инструментария нагрузочного тестирования

• Области применения– Нагрузочное и стресс тестирование с использованием

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

тестировании– Автоматизация нагрузочного тестирования – Поддержка continues integration process

Типовая архитектура

Load injectorsLoad injectors

ControllerController

AnalysisAnalysis

Scenario Scenario definitiondefinition

Workload definitionWorkload definition

SUTSUT

Load

Control

Measurements

Input

Output

Monitoring

Области расширения

• Компонентная среда (OSGi/Java)• Архитектура основанная на plug-ins

• API, точки расширения

Platform/framework

Scenario

Workload

Protocol and measurements

Statistics and analysis

Load test management

Сценарий

• Симулирует поведение пользователей

• Java классы– Сценарий– Транзакция (шаг)– Запрос

• Иерархичность, модульность

• Идентификация частей сценария

• Генерация кода сценариев

• Отладка (Eclipse)

Scenario

Transaction

Request

1*

1*

Сценарий (пример)

public class Service1Scenario extends WebScenario {

Transaction1 transaction1 = new Transaction1();Transaction2 transaction2 = new Transaction2();

public void run() {

runTransaction(transaction1); sleep(1000); runTransaction(transaction2);

}

}

public class Transaction1 extends WebTransaction { Request1 request1 = new Request1();

public void run() { runRequest(request1); }

}

public class Request1 extends WebRequest {

public void run() { HttpResponse response = null;

response = getContext(). getClient().execute(url );

}}

НагрузкаRequest time

Virt

ual u

sers

Think time

time

Request rate

...

Virtual users

SUTλ µ

• Нагрузка это частота обращений к системе• Определяется через

– количество виртуальных пользователей И– среднее значение и распределение времени ответа

Определение нагрузки (пример)

Custom osocilating Workload

0

2

4

6

8

10

12

14

16

tim e

Vir

tual

use

rs

Workload

0

2

4

6

8

10

12

14

16

Time

Vir

tual

use

rs

})1)/((,min{)( max incrementVIntervaltVtV int maximumVirtualUsers = 15; int incrementInterval = 60; int incrementVirtaulUsersBy = 1;

public IThinkTime getThinkTimeOnTime(long time) { return new ConstantThinkTime(1000); }

public int getVirtualUserNumberOnTime(long time) { int vu = Math.min( maximumVirtualUsers, (int)((time/incrementInterval)+1)*incrementVirtaulUsersBy ); return vu; }

int Amplitude = 5; //virtual users double Frequency = 1/60; //virtual users per second int VerticalShift = 10; //oscillate around

public IThinkTime getThinkTimeOnTime(long time) { return new ExponentialThinkTime(1000); }

public int getVirtualUserNumberOnTime(long time) { return (int)(VerticalShift + Amplitude*Math.sin(Frequency*time)); }

)*sin()( tfreqAVtV c

Поддержка сетевых протоколов и измерений

• Любой протокол, имеющий клиентcкие Java библиотеки

• Регистрация значений:– Время исполнения– Ошибки протокола/приложения– Проткол-специфические измерения (размер пакета, время

установления соединения, DNS время и т.п.)

• Инструментирование библиотек протоколов

• Поддержка протоколов интегрируется в базовые классы сценариев

Run-time статистика и журналирование

• Измерения собираются в статистики:– Среднее значение– Частота событий– Счетчики– Определенная пользователем

• Масштабирование значений – Среднее значение на разных масштабах времени

• Расширяемый «движок» статистики– Filter/Pipe design pattern

• Журналирование – Набор CSV файлов, Apache Derby– Формат определен протоколом

Управление тестом

• Пользовательский интерфейс– Eclipse RCP UI– Command line

• Подготовка теста– Eclipse Java IDE, PDE– Рабочее окружение Eclipse

• Исполнение теста и мониторинг – Графики статистики

• Расширяемость– Eclipse plugin-ins– Chart API (JFree chart)– ANT tasks

Response time

0

500

1000

1500

2000

2500

3000

3500

00:0

0:15

00:0

5:45

00:1

1:15

00:1

6:45

00:2

2:15

00:2

7:45

00:3

3:15

00:3

8:45

00:4

4:15

00:4

9:45

00:5

5:15

01:0

0:45

01:0

6:15

01:1

1:45

01:1

7:15

mse

c Transaction1

Transaction2

Results export

Load test controller

Load test definition

Response time distribution density

response time (msec)

De

nsity

0 500 1000 1500

0.0

00

00

.00

10

0.0

02

0 empirical

logNormal

Weibull

gamma

Компоненты платформы

Agent container

Scenario manager

Virtual users manager

Statistics service

Log service

Experiment session Service

Controller container

Workload manager

Experiment workflow

Remote agent management

Run time statistics processing

Results Repository

Scenario

Workload

Statistics filters definition

Network protocol libraries

Log format definition

Test artifacts (OSGi bundles)

Remote deployLegend:

Platform Service Deployable component

Замечания по реализации

• Высокая производительность агентов• Сложность точного измерения времени в Java (msec,

nanosec)• Синхронизация потоков виртуальных пользователей • Синхронизация времени в распределенной среде• Интенсивный поток данных (измерений)• Сложность использование Java аннотаций и

рефлексии

Приложения платформы

• Стандартное нагрузочное тестирование– HTTP, SOAP, RMI

• Сложные сценарии– Различные протоколы в одном сценарии– Симуляция вероятностного поведения

пользователя (СBMG)– Генерация кода сценариев (из трасс или

моделей)

• Нагрузочное тестирование и регулярная сборка – ANT task для определения и запуска теста

0.9

0.3

0.71.0

0.5

1.0

0.5

0.1End

Start

Приложения платформы (2)

• Генерация заданной нагрузки– Пуассоновский поток запросов

• Автоуправление нагрузкой в зависимости от текущих показателей производительности– Измерение среднего значения времени ответа с заданным

доверительным интервалом – Автоматический поск максимальной пропускной способности

системы (max TPS)

• Симуляция пульсирующей нагрузки

Максимальная пропускная способность системы

Load

Res

pons

e tim

e

LoadT

hrou

ghpu

t (T

PS

)

Average response time Throughput (TPS)

Анализ результатов

• Пакеты статистической обработки– S-Plus (R statistics)

• Дисперсионный анализ – сравнение производительности альтернативных

конфигураций системы

• Корреляционный анализ

• Вывод параметров аналитических моделей (очереди)

• Построение моделей «черного ящика»

Спасибо за внимание!

Backup slides

Descriptive statistics example – KPI VS. load

Тестирование производительности

распределенных систем

Web serverWeb server

ApplicationApplication Server Server

Application ServerApplication Server

DatabaseDatabase

Authentication Authentication ServiceService

LDAPLDAP

Tickets Reservation Tickets Reservation ServiceService

Доступно для тестирования под нагрузкой

Недоступно для тестирования под нагрузкой

Approach overview

– Perform load test and collect measurements

• Windmill + dynamic workload

– Determine response time distribution

• Statistical tests• Lognormal, Gamma, Weibull

distributions

– Fit response time distribution parameters

• Non-parametric models (cubic splines)

– Setup runtime simulator• Analytical or table representation of the

model

– Performance load test of a SUT

0 10 20 30 40 50 60

05

00

10

00

15

00

Average Response time

Virtual users

Ave

rag

e r

esp

on

se

tim

e (

ms)

0 10 20 30 40 50 60

05

10

15

20

25

Transactions per second

Virtual users

TP

S

Response time distribution density

response time (msec)

De

nsity

0 500 1000 1500

0.0

00

00

.00

10

0.0

02

0

empirical

logNormal

Weibull

gamma

0 10 20 30 40 50

45

67

Response time logmean

queue length

logm

ean

0 10 20 30 40 50

0.4

0.6

0.8

1.0

1.2

1.4

Response time logsd

queue length

logs

d

Results comparisonSUT with real service SUT with emulated serviceLegend:

time

Recommended