Przemysław Nojman

Przemysław Nojman JIT Solutions
Konsultant ds.
testowania
oprogramowania

Temat: Test wydajnościowy

Witam, ostatnio przeglądałem materiały na temat planowania testów wydajnościowych jednak jest kilka pytań na które trudno znaleźć mi sensownej odpowiedzi:

1. Jak wiadomo testy wydajnościowe powinny być przeprowadzane na środowisku zbliżonym do produkcyjnego. Czy dobrym podejściem przy testach wstępnych jest ustalenie, że wszystkie formatki powinny generować się w czasie krótszym niż 3 sek ? Oczywiście nie chodzi mi o wszystkie formatki dostępnych funkcjonalności systemu tylko formatki funkcjonalności istotnych z punktu widzenia klienta.

2. W jaki sposób mierzyć samą wydajność. Formatka A powinna być generowana w czasie nie krótszym niż 3 sek. Parametry wejściowe:
- 100 vuserów uruchamiających daną funkcjonalność
Jakie dodatkowe obciążenie powinno być zdefiniowane? Czy test można wykonać przy obciążeniu systemu mniejszym niż 30%? Czy może należy ustalić z klientem średni przypuszczalny ruch użytkowników systemu i na jego podstawie utworzyć skrypt symulujący takie zachowanie.
3. Czy jest sens testować bezpośrednio na produkcji, gdy nieznane jest aktualne obciąże systemu ? Chodzi mi o funkcjonalności nie wpływające na zapis danych do bazy.

4. Znacie jakieś ciekawe artykuły (książki) na temat podejścia do testów wydajnościowych ?

Z góry dzięki za informacje na temat "SKUTECZNYCH" metod przeprowadzania testów wydajnościowych. Chodzi ogólnie o to, żeby system przy wdrożeniu nie sprawił niespodzianki ;) i co najważnie
SPEŁNIAŁ WCZEŚNIEJ ZDEFINIOWANE WYMAGANIA WYDAJNOŚCIOWE.

Pozdrawiam
Przemek
Adam Frelak

Adam Frelak Analyst, IT Quality
Assurance

Temat: Test wydajnościowy

ad 1 - jesli masz tak ,mozliwosc to srodowisko powinno byc 1 w 1 jesli nie to NIKOMU NIE MOW ze wiesz czy aplikacja podoli na produkcji - charakterystyka jest nieliniowa
co do warunkow testu powinny byc one oparte o SLA ktory jest ustalany z odbiorca systemu - tam powinny byc zawarte wymagania niefunkcjonalne w tym wydajnosciowe

ad 2 - mierzyc poprzez analalogie do srodowiska producyjnego lub wymogow zawartych w SLA (jesli nie ma wymogow niefunkcjonalnyvch dotyczacych wydajnosci to po co robic taki test ? po to zeby pochwalic sie ?)

ad 3 - jesli pozwola to zawsze najbardziej wiarygodny test :)

ad 4 - znamy ale wiekszosc zbiega sie do jednego - testuj na produkcji jesli mozesz inaczej blad przelozenia wynikow z jednego srodowiska na drugie jest zbyt duzy aby opierac sie na takich wynikach.

skoro piszesz o wczesniej wyspecyfikowanych wymaganiac wydajnosciwoych to nie za bardzo rozumiem twoje pytania dotyczace tego skad je brac? (pytania 1 i 2)

Jeszcze jenda uwaga - kazdy system da sie ubic wydajnosciowo na 2 sposoby - nierelane wymagania / zbyt duze obciazenie.

Warto zrobic np test ktory pokaze przy ilu userach system polegnie na danej konfiguracji sprzetowej (przyrostowy) - bo to powie odbiorcy kiedy wszysto mu sie zawali. (No chyba ze aplikacja lezy i kwiczy juz przy malym obciazeniu, wtedy do przemialu sie nadaje :P)
Krystian K.

Krystian K. Agile Coach, Autor

Temat: Test wydajnościowy

Aby przeprowadzić skuteczny test wydajnośćiowy tak samo jak inny test, musisz znać kryteria. Na ogół jest to czas odpowiedzi systemu i maksymalne obciążenie, pod którym system pozostaje stabilny. Te dane dają podstawę do projektowania testów wydajnościowych.
Oprócz czasu reakcji sytemu należy też sprawdzać parametry środowiska.

Testów wydajnościowych jest kilka rodzajów:

Load Test - jak system reaguje przy określonym obciążeniu (100, 200, 300, 400 userów)
Stress Test - co się dzieje, gdy stopniowo zwiększasz obiciążenie, aż do spowodowania przeciążenia systemu. Kiedy przeciążenie nastąpilo? Jak się zachowuje przeciążony system? Jaki jest komunikat na interfejsie, jakie alerty zostały uruchomione i jaka informacja znajduje się w logach? Co się dzieje z nadchodzącymi requestami? Jak system zareaguje po powrocie do normalnego obciążenia?
Duration Test - czy jeżeli utrzymamy maksymalne obciążenie przez 24h, to system zachowuje się tak samo (czy na przykład zużycie pamięci nie wzrasta przez memory leaks)
Przemysław Nojman

Przemysław Nojman JIT Solutions
Konsultant ds.
testowania
oprogramowania

Temat: Test wydajnościowy

skoro piszesz o wczesniej wyspecyfikowanych wymaganiac wydajnosciwoych to nie za bardzo rozumiem twoje pytania dotyczace tego skad je brac? (pytania 1 i 2)

Nie chodziło mi o to skąd brać wymagania wydajnościowe tylko w jaki sposób je poprawnie definiować. Co z tego, że umówisz się z klientem, że punkt pomiarowy będzie mierzony dla stu użytkowników bo takiego ruchu się spodziewasz skoro nie uwzględniasz dodatkowego obciążenia wynikającego np. z tego że kolejne 500 userów na produkcji wklepuje dane lub system zintegorwany jest jeszcze z kilkoma innymi które w znaczący sposób wpływają na obciążenie systemu.
Przemysław Nojman

Przemysław Nojman JIT Solutions
Konsultant ds.
testowania
oprogramowania

Temat: Test wydajnościowy

Krystian K.:
Aby przeprowadzić skuteczny test wydajnośćiowy tak samo jak inny test, musisz znać kryteria. Na ogół jest to czas odpowiedzi systemu i maksymalne obciążenie, pod którym system
pozostaje stabilny.

Krystian, co rozumiesz pod pojęciem "maksymalne obciążenie" ? Czy chodzi tylko o CPU a może w grę wchodzi również obciążenie bazy, sieci ?
Adam Frelak

Adam Frelak Analyst, IT Quality
Assurance

Temat: Test wydajnościowy

Przemku wiec jesli chodzi o kwestie zbierania nazwijmy to w tym konkretnym przypadku "sensownych" wymogow wydajnosciowych to jest to faktycznie ciezka sprawa.

Dobra praktyka bedzie przperowadzenie testu wydajnosciowoego SYMULUJACEGO prace wszystkich userow w danym momencie.
Rozwijajac ta mysl:
(Uwaga czasochlonne ! :) )
Przykladowo chcesz przperowadzic test aplikacji na torej pracuje powiedzmy lacznie 500 userow.
Z informacji zebranych z produkcji i od administratorow znasz rozklad obciazenia w czasie - tworzac wiec scenariusz budujesz tyle skryptow ile wystepuje rol uzytkownikow w systemie i dla kazdej z tych rol przypisujesz odpowiednia ilosc uzytkownikow wraz z odpowiednim czasem pojawiania sie ich w systemie.
Przykladowo : caly scenariusz trwa 8 godzin i obejmuje 500 vuserow z tego :
200 - loguje sie instant o 8:00 i rozpoczyna walkowanie 2 roznych skryptow z ktorych jeden np to wprowadzanie danych ksiegowych a drugi generowanie jakis raportow rozklad userow dla tych skryptow wynosi 190 i 10 , pozostale 300 userow pojawia sie przyrostowo co 5 minut do godziny 12:00 dla skryptu pierwszego a od godziny 14:00 nastepuje zmiejszenie ilosci vuserow w pierwszym skrypcie co 15 minut , tak aby o 16:00 osiagnac 0. ta dziesiatka od skrpytu numer 2 (raporty) wylogowuje sie punkt 16:00.

Wtedy masz slicznie zasymulowane to co sie dzieje , a kwestia punktow pomiarowych to juz osobny element : zapewne w czasie wykonywania skryptu bedziesz nonstop monitorowac podstawowe elementy (RAM CPU obciazenie sieci czas wykonywania poszczegolnych akcji itd.) + te elementy na ktore uwage zwroca ci inne osoby (ktos zlecil chyba wykonanie tego testu? czy sam z siebie robisz takie testy? :)
Krystian K.

Krystian K. Agile Coach, Autor

Temat: Test wydajnościowy

Przemysław Nojman:

Krystian, co rozumiesz pod pojęciem "maksymalne obciążenie" ? Czy chodzi tylko o CPU a może w grę wchodzi również obciążenie bazy, sieci ?

Dla każdego systemu w fazie projektowania konfiguracji sprzętowej i softwarowe określana jest pojemność/capacity. Określenie tej pojemności jest różne w zależności od przeznaczenia. Jeżeli to jest baza danych, to na przykład określa się, że baza może obsłużyć 500 zapytań na sekundę. Jeżeli to jest aplikacja WWW to jej pojemność moż być np: 300 sesji ze względu na ilość pamięci przeznaczonej dla jednej sesji.

Chciałbym też podkreślić to co Adam powiedział: Ktoś Ci zlecił testy, więc oczekuje odpowiedzi na pewne pytania. Jakie to są pytania?
JMeter umieścił w swoim tutorialu kilka uwag i pytań, które trzeba zadać zanim zaczniesz testy:
Help! My boss wants me to load test our web app!
Przemysław Nojman

Przemysław Nojman JIT Solutions
Konsultant ds.
testowania
oprogramowania

Temat: Test wydajnościowy

Nikt mi nie zlecił jak na razie wykonania testów wydajnościowych ;) Nie mniej utwierdziliście mnie w przekonaniu, że nie da się wykonać realnej symulacji (realnego mierzenia), gdy testów nie wykonujemy bezpośrednio na bazie produkcyjnej.
Jedyne co to możemy starać się przewidywać zachowania wydajnościowe systemu produkcyjnego ;)



Wyślij zaproszenie do