Miroslav Renda
Senior Test Manager
Blog
Miroslav Renda
Senior Test Manager
V dnešním článku se zaměříme na testování škálovatelnosti – klíčovou metodu pro hodnocení schopnosti systému zvládat narůstající pracovní zátěž. Dozvíte se, jak systém reaguje na postupné zvyšování počtu uživatelů nebo objemu transakcí a jaké jsou jeho limity.
Testování škálovatelnosti (scalability, někdy též capacity nebo breakpoint testing) hodnotí schopnost systému zvládat narůstající pracovní zátěž, ať už jde o zvýšení počtu uživatelů nebo objemu transakcí. Tento typ testování je zásadní pro ověření hranice zátěže, do jaké je systém schopen plnit definované výkonnostní parametry (např. definovanou dobu odezvy).
Pro testování škálovatelnosti je typický „schodovitý“ průběh navyšování zátěže. Zátěž systému při testu zvyšujeme o definované přírůstky až do okamžiku, kdy dojde k překročení přípustné doby odezvy, server začne generovat chybové odezvy (stavové kódy 500 resp. 503) nebo se propustnost systému sníží pod přípustnou mez (např. 100 transakcí za sekundu). Průběh nárůstu počtu virtuálních uživatelů při testování škálovatelnosti znázorňuje následující obrázek.
„Schody“ nemusí znamenat pouze navyšování počtu současných virtuálních uživatelů. Hranici, při které systém dosáhne hodnoty určitého výkonnostního požadavku (např. doby odezvy), můžeme testovat i tím, že postupně (schodovitě) zvyšujeme objem dat v databázi systému nebo velikost odesílaných souborů.
Podívejme se, jak efektivně provádět testování škálovatelnosti pomocí open-source nástroje k6. Tento nástroj je skvělý pro rychlé nastavení a spouštění zátěžových testů vytvořených v JavaScriptu.
1. Instalace k6: Postupujte podle pokynů na oficiálních stránkách k6, kde najdete návod k instalaci.
2. Vytvoření skriptu: Vytvořte nový soubor, například scalability.js, a přidejte následující kód:
import http from "k6/http";
import { sleep } from "k6";
export let options = {
stages: [
{ duration: "10s", target: 50, }, // ramp-up fáze pro první stabilní zátěž
{ duration: "2m", target: 50, }, // stabilní zátěž 50 VU po dobu 2m
{ duration: "10s", target: 100, }, // ramp-up fáze pro druhou stabilní zátěž
{ duration: "2m", target: 100, }, // stabilní zátěž 100 VU po dobu 2m
{ duration: "10s", target: 150, }, // ramp-up fáze pro třetí stabilní zátěž
{ duration: "2m", target: 150, }, // stabilní zátěž 150 VU po dobu 2m
{ duration: "10s", target: 200, }, // ramp-up fáze pro čtvrtou stabilní zátěž
{ duration: "2m", target: 200, }, // stabilní zátěž 200 VU po dobu 2m
{ duration: "10s", target: 250, }, // ramp-up fáze pro pátou stabilní zátěž
{ duration: "2m", target: 250, }, // stabilní zátěž 250 VU po dobu 2m
{ duration: "10s", target: 300, }, // ramp-up fáze pro šestou stabilní zátěž
{ duration: "2m", target: 300, }, // stabilní zátěž 300 VU po dobu 2m
{ duration: "10s", target: 350, }, // ramp-up fáze pro sedmou stabilní zátěž
{ duration: "2m", target: 350, }, // stabilní zátěž 350 VU po dobu 2m
{ duration: "10s", target: 400, }, // ramp-up fáze pro osmou stabilní zátěž
{ duration: "2m", target: 400, }, // stabilní zátěž 400 VU po dobu 2m
{ duration: "10s", target: 450, }, // ramp-up fáze pro devátou stabilní zátěž
{ duration: "2m", target: 450, }, // stabilní zátěž 450 VU po dobu 2m
{ duration: "30s", target: 0, }, // ramp-down fáze
],
};
// vu script
export default function () {
http.get("https://test.k6.io");
sleep(1);
http.get("https://test.k6.io/contacts.php");
sleep(2);
http.get("https://test.k6.io/flip_coin.php");
sleep(2);
}
3. Spuštění testu: V terminálu přejděte do složky se skriptem a spusťte test pomocí příkazu:
k6 run scalability.js
V uvedeném testovacím skriptu jsou v poli options.stages definovány postupné fáze testu, které zhruba odpovídají průběhu vizualizovanému v obrázku v úvodu (z komentářů v kódu je zřejmý detail).
Testovací scénář pak spočívá v postupném volání URL https://k6.io/, https://test.k6.io/contacts.php a https://test.k6.io/flip_coin.php s prodlevami mezi požadavky definovanými funkcí sleep() (tzv. think-time).
Po dokončení testu poskytne k6 souhrnou statistiky, jako jsou časy odezvy, počet požadavků za sekundu a procenta chyb. Pro dobrou analýzu však tyto souhrnné statistiky v případě testu škálovatelnosti nestačí. Je nutné vizualizovat detailní data z průběhu testu (např. v Grafaně) a korelovat jejich průběh ideálně i s informacemi o chování systémových prostředků testovaných serverů.
Testování škálovatelnosti (scalability testing) slouží k hodnocení schopnosti systému zvládat rostoucí zátěž, jako je vyšší počet uživatelů nebo objem transakcí. Zátěž se zvyšuje „schodovitě“, kdy jsou přírůstky postupně navyšovány až do okamžiku, kdy systém překročí definované výkonnostní parametry (například doby odezvy, nebo začne generovat chybové odpovědi).
Zahrnutí testování škálovatelnosti s využitím efektivních nástrojů pro měření výkonnosti, jako jsou k6, Gatling, JMeter či LoadRunner, do celkového mixu testů, napomůže vyšší robustnosti, škálovatelnosti systému a v konečném důsledku zvýší spokojenost uživatelů.
Nenechejte si ujít nejnovější informace.
Vyplňte nám vaši e-mailovou adresu a dostávejte pravidelnou nálož informací ohledně nadcházejících školení, akcí a testingového know-how.
Chcete poradit?
Napište si o naši bezplatnou, neprodejní konzultaci zdarma. Vyplňte formulář a my se vám ozveme zpět.
Upozornění