2013-08-05 12 views
5

Posiadam aplikację NGinx/Node/Express3/Socket.io/Redis/Backbone/Backbone.Marionette, która prosi o żądania do interfejsu REST API PHP/MySQL. Muszę załadować test całego stosu jako całości.Test obciążenia aplikacji Backbone

Moja aplikacja korzysta z buforowania zasobów statycznych za pomocą NGinx, klastrowanie z węzłem/ekspresem i gniazdo jest obsługiwane wielordzeniowo za pomocą narzędzia Redis. Wszystko to znaczy, przeszedłem przez wiele kłopotów, aby upewnić się, że może wytrzymać obciążenie.

Uderzyłem go 50 000 użytkowników w 10 sekund za pomocą blitz.io i nawet nie mrugnęło ... Co mnie zaniepokoiło, ponieważ chciałem zobaczyć, jak się rozbija, albo przynajmniej trochę ciężko oddycha; ale 50k było maksymalną wartością, jaką mógłbyś wrzucić za pomocą tego narzędzia, wskazując mi, że oczekują, że nie będziesz w stanie, lub potrzebujesz, obsłużyć więcej niż to ... To jest, kiedy zdałem sobie sprawę, że to nie jest rzeczywiście ponoszenie obciążenie, którego oczekiwałem, ponieważ obciążenie jest inicjowane po załadowaniu strony, a aplikacja Backbone uruchamia się i uruchamia połączenie przez gniazdo i żąda danych z właściwego punktu końcowego interfejsu REST API (z innego serwera).

Tak, oto moje pytanie:

Jak mogę załadować przetestować całą aplikację jako całości? muszę test obciążenia opodatkować serwer w taki sam sposób, że klienci faktycznie będzie, co oznacza:

  1. Zapytanie pojedyncza aplikacja strona Backbone z mojego serwera nginx/węzeł/Express,
  2. inauguracją wnioski o statyczne aktywa z nginx (symulacja co przeglądarka zrobi)
  3. inauguracją żądań do API REST (PHP/MySQL uruchomiony na innym serwerze)
  4. Tworzenie połączenia z usługą Socket.io (działa na nginx/Node/Express, wykorzystując Redis do obsługi śmieci wielordzeniowych)

Jeśli narzędzie do testowania używa środowiska podobnego do przeglądarki, aby załadować stronę w górę, parsując JS i uruchamiając ją, wszystko będzie copasetic (serwer NGinx/Node/Express zostanie trafiony, podobnie jak serwer PHP/MySQL) . W przeciwnym razie narzędzie do testowania będzie musiało to zasymulować, niemal równocześnie uruchamiając co najmniej kilkanaście różnych wniosków. W przeciwnym razie jest to jak stres testujący drzwi, patrząc na to 10 000 razy (to znaczy, że jest bezcelowe).

Muszę upewnić się, że moja aplikacja może obsłużyć 1000 użytkowników trafiając w niecałą minutę, ładując tę ​​samą stronę.

+2

Po pierwsze - interesujące pytanie. Teraz, jeśli mogę zapytać - co testujesz? Czy testowane środowisko ma takie same specyfikacje, jak środowisko produkcyjne? Po prostu przetestowanie go z takimi rzeczami, jak ławka Apache, nie zrobi ci wiele dobrego. Moja najlepsza sugestia polega na przechwytywaniu rzeczywistego ruchu klienckiego od grupy użytkowników i przekazywaniu go do aplikacji w VM, aż przestanie z nią współpracować.Robimy to, aby znaleźć wąskie gardła i jest to bardzo pomocne. –

+0

eheh ... Wstyd mi, ale środowisko prod * jest również * środowiskiem testowym. Witryna nie jest jeszcze aktywna (jest to jednorazowa aplikacja, która będzie służyć jako pulpit wsparcia podczas konferencji na żywo) i będzie dostępna tylko przez 3 dni w roku. Dlatego też, poza tymi trzema dniami, prod to QA/DEV, a podczas tych trzech dni prod jest prod ... – cmcculloh

+0

Konfiguracja aplikacji klienckich wydaje się dużo pracy tylko po to, aby przetestować serwer (serwery). Dlaczego nie możesz nagrać wszystkich żądań http (w tym html, skryptów i wywołań ładowania css) wygenerowanych przez pojedynczą (ręcznie wykonywaną) sesję i odtwarzać tę sekwencję tysiąc razy równolegle? –

Odpowiedz

1

Trzeba nauczyć się korzystać z Apache JMeter http://jmeter.apache.org/ Można wykonać testy warunków skrajnych z nim, zobaczyć ten tutorial https://www.youtube.com/watch?v=8NLeq-QxkSw

Jak powiedział: „Muszę test obciążenia opodatkować serwer w taki sam sposób, w jaki klienci rzeczywiście będą "

Oznacza to, że testy są agnostyczne dla technologii, z której korzystasz.

Bardzo polecam Jmeter, jest szeroko stosowany i można go zintegrować z Jenkinsem i zrobić z nim wiele fajnych rzeczy.