Junior
Opowiedz o testach obciążeniowych.
sobes.tech AI
Odpowiedź od AI
Testy obciążeniowe to rodzaj testów mających na celu określenie wydajności, stabilności i skalowalności aplikacji (systemu) przy różnych obciążeniach.
Cele testów obciążeniowych:
- Określenie granicznego obciążenia, które system wytrzymuje.
- Wykrycie "wąskich gardeł".
- Ocena czasu reakcji systemu przy zadanym obciążeniu.
- Sprawdzenie stabilności działania systemu w dłuższym okresie pod obciążeniem.
- Sprawdzenie skalowalności systemu.
Rodzaje testów obciążeniowych:
- Test obciążeniowy (Load Testing): Sprawdzenie zachowania systemu przy oczekiwanym (normalnym) poziomie obciążenia.
- Test stresowy (Stress Testing): Sprawdzenie systemu przy obciążeniu przekraczającym normalne, do momentu awarii. Celem jest określenie granic wytrzymałości.
- Test wytrzymałości/długości (Endurance/Soak Testing): Sprawdzenie stabilności systemu przy długotrwałym działaniu średniego lub wysokiego obciążenia, wykrycie wycieków pamięci, degradacji wydajności z czasem.
- Test szczytowego obciążenia (Spike Testing): Sprawdzenie zachowania systemu przy nagłym, jednorazowym zwiększeniu obciążenia.
- Test skalowalności (Scalability Testing): Ocena zdolności systemu do obsługi rosnącego obciążenia poprzez skalowanie poziome lub pionowe zasobów.
- Test objętości (Volume Testing): Sprawdzenie zachowania systemu przy wzroście ilości danych w bazie danych lub innych magazynach.
Etapy przeprowadzania testów obciążeniowych:
- Określenie celów: Jasne zdefiniowanie metryk wydajności (czas reakcji, przepustowość, liczba błędów) i kryteriów sukcesu.
- Planowanie i projektowanie scenariuszy: Analiza scenariuszy użytkowników, określenie profilu obciążenia (liczba wirtualnych użytkowników, intensywność zapytań).
- Tworzenie skryptów testowych: Pisanie skryptów symulujących działania użytkowników z użyciem narzędzi do testów obciążeniowych.
- Przygotowanie środowiska testowego: Konfiguracja środowiska testowego, symulującego środowisko produkcyjne.
- Wykonanie testów: Uruchomienie testów z różnym obciążeniem.
- Monitorowanie i zbieranie danych: Zbieranie metryk wydajności systemu, serwerów, baz danych.
- Analiza wyników i raportowanie: Porównanie wyników z celami, wykrycie problemów, przygotowanie raportu.
Narzędzia do testów obciążeniowych:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Przykład prostego skryptu JMeter (HTTP Request):
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test obciążeniowy dla przykładu">
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Grupa wątków">
<intProp name="ThreadGroup.num_threads">100</intProp>
<intProp name="ThreadGroup.ramp_time">10</intProp>
<longProp name="ThreadGroup.duration">60</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Przykład żądania HTTP">
<stringProp name="HTTPSampler.domain">example.com</stringProp>
<stringProp name="HTTPSampler.path">/</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">false</boolProp>
<boolProp name="HTTPSampler.embedded_url_report">true</boolProp>
<boolProp name="HTTPSampler.connect_timeout"></boolProp>
<boolProp name="HTTPSampler.response_timeout"></boolProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.comment"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.image_parser">true</stringProp>
<stringProp name="HTTPSampler.concurrentDwn">Both</stringProp>
<stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
<stringProp name="HTTPSampler.implementation_status">OK</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
<listProp name="HTTPSampler.HTTP_HEADERS"></listProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</TestPlan>
</hashTree>
</jmeterTestPlan>
Metryki zbierane podczas testów obciążeniowych:
- Czas reakcji
- Przepustowość
- Liczba błędów na sekundę
- Liczba zapytań na sekundę
- Wykorzystanie CPU
- Użycie pamięci
- Aktywność dysku
- Aktywność sieciowa
- Metryki bazy danych
Testy obciążeniowe pomagają zapobiegać awariom systemu w produkcji pod dużym obciążeniem i zapewniają akceptowalny poziom jakości dla końcowych użytkowników.