Що таке тестування масштабованості? Навчайтеся на прикладі
⚡ Розумний підсумок
Тестування масштабованості вимірює, як поводиться програма, коли навантаження користувача, обсяг даних або швидкість транзакцій зростають або падають, виявляючи точну точку, в якій продуктивність перестає масштабуватися, та ідентифікуючи відповідальне вузьке місце.
Що таке тестування масштабованості?
Тестування масштабованості – це метод нефункціонального тестування, який вимірює продуктивність системи або мережі при збільшенні або зменшенні кількості запитів користувачів. Метою тестування масштабованості є переконатися, що система може обробляти прогнозоване збільшення трафіку користувачів, обсягу даних та частоти транзакцій. Воно перевіряє здатність системи задовольняти зростаючий попит.
Тестування масштабованості є підтипом тестування працездатності, тому він зосереджується на поведінці програми під час її розгортання у більшій системі або використання під надмірним навантаженням. У Розробка програмного забезпеченняТестування масштабованості вимірює точку, в якій застосунок припиняє масштабування, та визначає причину цього.
Навіщо проводити тестування масштабованості?
Проблеми з потужністю рідко виникають під час функціонального тестування. Вони проявляються в найнапруженіший торговий день року, коли запускається маркетингова кампанія, або коли набір даних, який непомітно зростав протягом двох років, нарешті уповільнює кожен запит. Тестування масштабованості спочатку виявляє ці обмеження в контрольованому середовищі. Зокрема, воно допомагає вам:
- Визначте, як масштабується програма зі збільшенням робочого навантаження, і де ця крива вирівнюється.
- Визначте ліміт одночасної кількості користувачів для веб-застосунку, перш ніж час відгуку стане неприйнятним.
- Визначте погіршення роботи клієнта та взаємодію з кінцевим користувачем під навантаженням, наприклад, повільний рендеринг екрана.
- Визначте надійність та деградацію на стороні сервера, включаючи перенасичення процесора, витоки пам'яті та виснаження пулу підключень.
Найлегше уявити цей зв'язок у вигляді кривої: пропускна здатність зростає разом із додатковим навантаженням, доки ресурс не перенасичується, після чого додаткові користувачі лише подовжують чергу.
Види тестування масштабованості
Масштабованість не є окремою властивістю, тому план тестування зазвичай охоплює більше одного виміру. Чотири типи, наведені нижче, – це ті, які вимірює більшість команд, а перші два визначають форму самого тестового середовища.
| тип | Що масштабується | Що доводить тест |
|---|---|---|
| Вертикальна масштабованість (збільшити масштаб) | Процесор, пам'ять або сховище, додані до одного сервера | Скільки додаткового навантаження поглинає одна модернізована машина, і де знаходиться одновузлова стеля |
| Горизонтальна масштабованість (масштабування) | Додаткові сервери, контейнери або вузли за балансувальником навантаження | Чи зростає пропускна здатність приблизно пропорційно доданим вузлам, чи спільні ресурси обмежують її? |
| Функціональна масштабованість | Нові функції, модулі або послуги | Чи можна поглинути додаткову функціональність без погіршення стану існуючих транзакцій |
| Адміністративна масштабованість | Користувачі, орендарі, команди або середовища для керування | Чи залишаються працездатними адаптація, дозволи та моніторинг у міру зростання організації |
Вертикальне масштабування простіше, оскільки архітектура рідко змінюється, але окрема машина завжди має певну межу. Горизонтальне масштабування усуває цю межу та покращує відмовостійкість, але за рахунок мережевої затримки, узгодженості даних та накладних витрат на координацію — усе це тест має вимірювати, а не припускати.
Що тестувати в тестуванні масштабованості
Масштабованість оцінюється за вимірами, а не за кількістю показів. Записуйте наступні атрибути на кожному кроці завантаження, щоб було видно тенденцію, а не лише кінцеве число.
| атрибут | Що це вам говорить |
|---|---|
| Час реакції | Час між запитом користувача та відповіддю системи; він має залишатися незмінним, оскільки паралельність зростає |
| Перехід екрану | Як швидко одна сторінка або перегляд поступається місцем наступному під час завантаження |
| Пропускна здатність | Обсяг запитів, оброблених за одиницю часу; плато позначає межу масштабованості |
| Вимірювання часу | Час сеансу, час перезавантаження, час друку, час транзакції та час виконання завдання |
| Продуктивність порівняно з кількістю користувачів | Як змінюється кожна метрика в міру додавання одночасних користувачів поетапно |
| Запит тарифів | Запити за секунду, транзакції за секунду та звернення за секунду |
| Використання мережі | Споживана пропускна здатність та затримка пакетів між рівнями |
| Використання процесора та пам'яті | Вартість ресурсів на транзакцію; постійно зростаюча цифра часто сигналізує про витік |
| Лічильники веб-сервера | Запити та відповіді за секунду, глибина черги та відхилені з'єднання |
| Продуктивність під навантаженням | Комбінована поведінка після того, як усі метрики зчитуються разом у піковому режимі |
Стратегія тестування для тестування масштабованості
Стратегія тестування масштабованості відрізняється залежно від типу тестованої програми. Якщо програма звертається до база даних, параметри тестування включатимуть розмір бази даних відносно кількості користувачів тощо.
Передумови для тестування масштабованості
- Можливість розподілу навантаження — Перевірте, чи дозволяє інструмент для тестування навантаження генерувати навантаження з кількох машин та керувати ним з центральної точки.
- Operating System — Перевірте, що операційні системи агенти генерації навантаження та головна серверна частина тестування навантаження працюють під керуванням.
- процесор — Перевірте, який тип процесора потрібен для віртуального агента користувача та головної машини для навантажувального тестування.
- пам'ять — Перевірте, скільки пам'яті вистачить для віртуального агента користувача та головної системи навантажувального тестування.
- Тестове середовище — Перевірте, чи тестове середовище достатньо точно відображає виробництво для того, щоб результати можна було перенести.
Як виконати тестування масштабованості
- Визначити повторюваний процес для виконання тестів масштабованості протягом життєвого циклу застосунку
- Визначте критерії масштабованості
- Список програмних засобів, необхідних для запуску навантажувального тесту
- Налаштуйте середовище тестування та налаштуйте апаратне забезпечення, необхідне для виконання тестів масштабованості
- Плануйте тестові сценарії, а також тести масштабованості
- Створення та перевірка сценарію віртуального користувача
- Створіть і перевірте сценарії тестування навантаження
- Виконайте тести
- Оцініть результати
- Сформувати необхідні звіти
План перевірки масштабованості
Перш ніж створювати тести, розробіть детальний план тестування. Це важливий крок, щоб переконатися, що тест відповідає вимогам програми.
Нижче наведено атрибути для створення чітко визначеного План тестування для тестування масштабованості.
- Кроки для сценаріївТестовий скрипт повинен містити детальні кроки, які визначають точні дії, які виконає користувач.
- Дані часу виконанняПлан тестування має визначати будь-які дані під час виконання, необхідні для взаємодії із застосунком.
- Тести на основі данихЯкщо скриптам потрібні різні дані під час виконання, вам потрібно розуміти всі поля, для яких ці дані потрібні.
Приклад тестування масштабованості
Розглянемо інтернет-магазин, який очікує 2,000 одночасних покупців під час сезонного розпродажу. Команда спочатку домовляється про критерій успішності: транзакція оформлення замовлення має завершитися менш ніж за три секунди для 95 відсотків користувачів, а рівень помилок має бути нижче одного відсотка.
Потім тест запускає той самий скрипт browse-search-cart-checkout для 250, 500, 1,000, 1,500 та 2,000 віртуальних користувачів. Час відгуку становить близько двох секунд для 1,000 користувачів, зменшується до 2.8 секунди для 1,500 і досягає дев'яти секунд для 2,000, тоді як завантаження процесора бази даних становить 98 відсотків. Таким чином, межа масштабованості становить приблизно 1,500 користувачів, а вузьким місцем є рівень бази даних, а не сервери додатків, які команда планувала додати.
Інструменти тестування масштабованості
Для тестування масштабованості потрібен інструмент, який може генерувати навантаження з кількох машин одночасно та централізовано повідомляти про результати. Вибір зазвичай залежить від основної мови команди та протоколів, що тестуються.
| Інструмент | Сценарії | Найкраще підходить для |
|---|---|---|
| Apache JMeter | Плани тестування графічного інтерфейсу та XML, Java заснований | Широке охоплення протоколів, включаючи JDBC, JMS, LDAP та SOAP |
| Графана k6 | JavaСценарій або TypeScript | Тести API та мікросервісів, підключені до конвеєра CI/CD |
| Гетлінг | Java, Kotlin або Scala DSL | Висока кількість віртуальних користувачів на один інжектор з детальними HTML-звітами |
| сарана | одноколірний Python | Python команди, яким потрібно розширити клієнт за межі HTTP |
| LoadRunner | C-подібні скрипти, записані у VuGen | Великі корпоративні комплекси зі застарілими та пакетними додатками |
Хмарні бігуни, такі як BlazeMeter, LoadView та Gatling Enterprise розташовані на основі кількох із цих рушіїв і їх варто розглянути, коли для тестування потрібні десятки тисяч віртуальних користувачів або трафік з кількох географічних регіонів. Ширший огляд цієї категорії доступний у посібнику з засоби тестування продуктивності.
Проблеми та найкращі практики тестування масштабованості
Найбільш невтішні результати масштабованості tracповертаємося до тестової конфігурації, а не до програми. Це проблеми, які повторюються, і звички, які їм запобігають.
Загальні виклики
- Невеликі середовища — Тестовий стенд з половиною виробничої пам'яті повідомляє про вузьке місце, якого не існує у виробництві.
- Нереалістичні моделі робочого навантаження — Скрипти без часу на обдумування або варіації даних потрапляють у кеші, які реальні користувачі пропустили б.
- Шумні результати — Автоматичне масштабування, збирання сміття та спільне хмарне обладнання роблять два однакові запуску несумісними.
- Тонка спостережуваність — Без показників на стороні сервера повільний результат показує, що щось зламалося, але не що саме.
- Коштувати — Для створення дуже високого рівня паралельності потрібен власний парк генераторів навантаження, який легко недооцінити.
Кращі практики
- Узгодьте критерії успішного проходження, такі як процентиль часу відгуку та граничне значення коефіцієнта помилок, перед першим запуском.
- Збільшуйте навантаження на запланованих етапах і утримуйте кожен крок достатньо довго, щоб система стабілізувалася.
- Змінюйте тестові дані для кожного віртуального користувача, щоб кешування не спотворювало результати.
- Збирайте показники додатків, баз даних та інфраструктури разом із показниками на стороні клієнта.
- Зберігайте тестові скрипти в системі контролю версій та запускайте коротку перевірку масштабованості для кожної збірки, а потім повний запуск перед релізом.
- Порівнюйте тенденції в різних збірках, а не оцінюйте окремий звіт.
Тестування масштабованості проти тестування навантаження
Ці два поняття часто плутають, оскільки обидва застосовують навантаження. Різниця полягає в питанні, на яке відповідає кожен з них: тестування масштабованості запитує, наскільки може зростати система, тоді як тестування навантаження запитує, чи справляється воно з очікуваним навантаженням.
| Основа | Тестування масштабованості | Тестування навантаження |
|---|---|---|
| Focus | Він зосереджений на продуктивності ваших веб-сайтів, програмного забезпечення, апаратного забезпечення та додатків, коли вносяться зміни до розміру або обсягу системи для задоволення зростаючих потреб. | Тестування навантаження зосереджено на тестуванні програми під великими навантаженнями, щоб визначити, в який момент відбувається збій часу відгуку системи. |
| Схема навантаження | Навантаження збільшується поетапно, а ресурси можна додавати між кроками. | Навантаження утримується на очікуваному піковому рівні протягом фіксованого періоду часу |
| Відповідь на запитання | Як далеко може розвиватися ця система, і що її обмежує? | Чи досягає ця система своїх узгоджених цілей сьогодні? |
| Типовий вихід | Обмеження масштабованості, вузьке місце та план обмеження потужностей | Прохід або не прохід відповідно до цільових показників часу відгуку та пропускної здатності |
Обоє сидять під нефункціональне тестування парасолька поруч стрес-тестування, випробування шипами, випробування на витривалість та об'ємне тестування, а зріла стратегія продуктивності зазвичай запускає кілька з них з одними й тими ж сценаріями.

