Projektowanie rozwiązań
Wiarygodne testy wydajności
Rezultat: Testy pokazały, że pod określonym obciążeniem aplikacja gubiła część żądań i nie odpowiadała w wymaganym czasie, a przy dużym natężeniu niepoprawnie przetwarzała zdarzenia.
01 / Zagadnienie
Test wydajności miał odtworzyć rzeczywiste procesy aplikacji, a nie tylko wygenerować ruch. Żądania dla poszczególnych ścieżek, w tym ścieżki krytycznej, trzeba było budować na podstawie pobranych i przetworzonych danych, z uwzględnieniem zależności między systemami.
Statyczny zestaw żądań wysyłanych przez generator obciążenia tych zależności nie odwzorowywał. Pomiar musiał też opisywać aplikację, a nie ograniczenia drogi, którą docierał do niej ruch testowy.
02 / Metodologia
Testy zaprojektowałem według trzech zasad:
- Scenariusze budowane z danych — żądania przygotowywane na podstawie pobranych i przetworzonych danych, z uwzględnieniem zależności między systemami.
- Oddzielenie przygotowania scenariusza od generowania obciążenia — dane i żądania przygotowuje osobna aplikacja, a generator obciążenia realizuje właściwy test.
- Pomiar bez ograniczeń ścieżki dostępu — testy uruchamiane tam, gdzie wynik opisuje aplikację, a nie drogę, którą dociera do niej ruch testowy.
03 / Autorskie rozwiązanie i rezultat
Zaprojektowałem i zbudowałem aplikację, która integruje się z systemami potrzebnymi do przygotowania danych, buduje żądania dla różnych scenariuszy testowych i przekazuje je do generatora obciążenia. Testy uruchamiałem tam, gdzie pomiar nie obejmował ograniczeń ścieżki dostępu.
Testy ujawniły klasy nieprawidłowości niewidoczne przy statycznym zestawie żądań: gubienie żądań i przekroczenia czasu odpowiedzi pod określonym obciążeniem oraz nieprzetworzone i niepoprawnie przetworzone zdarzenia przy dużym natężeniu.
Wartość: wiarygodny obraz zachowania aplikacji pod obciążeniem, w tym konkretne klasy błędów pojawiające się przy dużym natężeniu żądań i zdarzeń.
- Obszary technologiczne
- Testy wydajności · Programowanie (JVM) · Integracje · Przygotowanie danych testowych · Generowanie obciążenia · Przetwarzanie zdarzeń