35. Установка
Добавляем необходимые репозитории
# Ubuntu Lucid
deb http://mirror.yandex.ru/mirrors/tank common main
deb http://mirror.yandex.ru/mirrors/tank lucid main
# Ubuntu Precise
deb http://mirror.yandex.ru/mirrors/tank common main
deb http://mirror.yandex.ru/mirrors/tank precise main
35
36. Установка
$ sudo apt-get update
$ sudo apt-get install yandex-load-tank-base
$ dpkg -l | grep tank
ii yandex-load-tank-base
36
37. Подготовка
$ lunapark
==== Welcome to Lunapark ====
Usage:
lunapark AMMO-FILE [OPTIONS]
Try `lunapark --help' for more information.
$ nano load.conf
37
38. Пример
1
Тестирование
HTTP
сервиса
постоянной
нагрузкой
в
10
рпс.
Запрашиваем
корневую
страницу.
38
39. Пример
1
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
uri = /
39
40. Пример
1
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
uri = /
40
41. Пример
1
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
uri = /
41
42. Пример
1
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
uri = /
42
43. Пример
1
Запускаем стрельбу
$ lunapark
==== Welcome to Lunapark ====
doctor-desktop.yandex.ru (doctor)
phantom=0.14.0
yandex-load-tank=N/A
ammo=/home/doctor/10/ammo_20120725-180420.txt
==== Stepper ====
Creating cases tree: 100%
Case: 3. Ammo type: uri
Ammo Generating: 100%
lunapark: starting preproc... Done
43
52. Пример
2
Тестирование
HTTP
сервиса
линейно-‐возрастающей
нагрузкой
до
100
рпс.
Запрашиваем
корневую
страницу.
Используем
IPv6
+
SSL
52
53. Пример
2
$cat load.conf
# Tank Config File
address=0:0:0:0:0:0:0:1:443 #
load = line (1,100,10m) #Схема нагрузки
ssl=1 # включение режима SSL
# Перечисление заголовков и GET запросов:
uri = /
53
58. Пример
4
Тестирование
HTTP
сервиса
c
прогревом,
линейно-‐
ступенчато-‐возрастающей
нагрузкой
до
30
рпс
с
одним
«спайком»
до
100
рпс
и
плавным
снижением
нагрузки.
Запрашиваем
корневую
страницу.
Используем
IPv6
+
SSL
58
59. Пример
4
$cat load.conf
# Tank Config File
address=0:0:0:0:0:0:0:1:443 #
load = const(1,1m), line(1,10,1m), step(10,30,10,1m)
load = const(30,1m), const(100,1), line(100,1,1m)
ssl=1 # включение режима SSL
# Перечисление заголовков и GET запросов:
uri = /
59
61. Пример
5
Тестирование
HTTP
сервиса
постоянной
нагрузкой
10
рпс.
Запрашиваем
несколько
страниц
с
определенными
заголовками.
Используем
IPv6
+
SSL
61
62. Пример
5
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
header_http = 1.1
header_connection = close
header_host = example.com
uri = /
uri = /buy
62
63. Пример
5
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
header_http = 1.1
header_connection = close
header_host = example.com
uri = /
uri = /buy
63
64. Пример
5
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
header_http = 1.1
header_connection = close
header_host = example.com
uri = /
uri = /buy
64
65. Пример
5
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
header_http = 1.1
header_connection = close
header_host = example.com
uri = /
uri = /buy
65
71. Немного
хардкора
Request-Line
Request Headers
Data (OPTIONAL)
71
72. Немного
хардкора
POST / HTTP/1.1
Host: example.com
Content-Length:3
Connection: Close
uho
72
73. Немного
хардкора
Запрос для Яндекс.Танка будет таким:
80
POST / HTTP/1.1
Host: example.com
Content-Length:3
Connection: Close
uho
73
74. Немного
хардкора
Запрос для Яндекс.Танка будет таким:
80
POST / HTTP/1.1
Host: example.com
Content-Length:3
Connection: Close
uho
74
75. Немного
хардкора
Запрос для Яндекс.Танка будет таким:
80
POST / HTTP/1.1
Host: example.com
Content-Length:3
Connection: Close
uho
Сохраним этот запрос в файл ammo.txt
75
76. Немного
хардкора
Упростим load.conf
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
header_http = 1.1
header_connection = close
header_host = target.yandex.net
uri = /
uri = /buy
76
77. Немного
хардкора
Упростим load.conf
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
# Перечисление заголовков и GET запросов:
header_http = 1.1
header_connection = close
header_host = target.yandex.net
uri = /
uri = /buy
77
78. Немного
хардкора
Упростим load.conf
$cat load.conf
# Tank Config File
address=127.0.0.1:80 #Адрес (IP only!) и порт стенда
load = const (10,10m) #Схема нагрузки
78
79. Немного
хардкора
Запускаем стрельбу
$ lunapark ammo.txt
==== Welcome to Lunapark ====
doctor-desktop.yandex.ru (doctor)
phantom=0.14.0
yandex-load-tank=N/A
ammo=/home/doctor/10/ammo.txt
==== Stepper ====
Creating cases tree: 100%
Case: 3. Ammo type: request
Ammo Generating: 100%
lunapark: starting preproc... Done
79
80. Немного
хардкора
Запускаем стрельбу
$ lunapark ammo.txt
==== Welcome to Lunapark ====
doctor-desktop.yandex.ru (doctor)
phantom=0.14.0
yandex-load-tank=N/A
ammo=/home/doctor/10/ammo.txt
==== Stepper ====
Creating cases tree: 100%
Case: 3. Ammo type: request
Ammo Generating: 100%
lunapark: starting preproc... Done
80
82. Немного
хардкора
А теперь склеим несколько запросов
и запишем их в файл ammo.txt друг за
другом
82
83. Немного
хардкора
80
POST / HTTP/1.1
Host: example.com
Content-Length:3
Connection: Close
uho
+ 80
POST / HTTP/1.1
=
Host: example.com
Content-Length:3
Connection: Close
nos
+
80
POST / HTTP/1.1
Host: example.com
Content-Length:3
Connection: Close
rot
83
90. Еще
немного...
phout.txt - основное
хранилище
не агрегированных
данных
90
91. Еще
немного...
Формат phout.txt хорошо описан в
документации
91
92. Еще
немного...
Формат phout.txt хорошо описан в
документации
Зачем?
92
93. Затем,
что...
Excel loadosophia
gnuplot
JS
phout.txt DB
API ???
93
94. А
могу
ли
я...?
Да!
THREAD TEST SPIKE TEST
CUSTOM TIMINGS
WEBDAV
GZIP POST
RECOVERY TEST
POP3 REQ FILE
CGI PARAM GET
SMTP
URLENCODE
LOOP MULTIPART
COOKIE
TAGS HEADERS
94
95. А
могу
ли
я...?
Да!
THREAD TEST SPIKE TEST
CUSTOM TIMINGS
WEBDAV
README.TXT
GZIP POST
RECOVERY TEST
POP3 REQ FILE
CGI PARAM GET
SMTP
URLENCODE
LOOP MULTIPART
COOKIE
TAGS HEADERS
95