Articles

Load Testing your app with Siege

lipiec 2019

tag(y): rails_performance • rails • programming
czas czytania: 8 min
  • Dumping unique URLs into a text file
  • odwiedzanie wszystkich tych stron w Test oblężenia
  • dodatkowe zasoby

ostatnim razem zacząłem używać Apache benchmark do testowania wydajności na stronie, która wymaga uwierzytelnienia, aby uzyskać dostęp.

dzisiaj dowiemy się, jak użyć siege, aby odwiedzić wiele unikalnych adresów URL na naszej stronie i uzyskać benchmarki tego procesu. Następnie opracuję profilowanie wydajności w Datadog, a dzięki tym trzem narzędziom razem, powinniśmy być gotowi na wprowadzenie znaczących ulepszeń w naszej aplikacji.

ta seria postów jest bezpośrednim wynikiem kompletnego przewodnika Nate Berkopec po wydajności Rails, z pomocą jego screencastów, a także aplikacji Steve Grossi do testowania obciążenia Rails z Apache Bench, Siege i JMeter. Uzbrojeni w te zasoby i stojący na ramionach gigantów, ruszamy.

opis oblężenia:

Siege to narzędzie do testowania obciążenia i analizy porównawczej http. Został zaprojektowany, aby umożliwić programistom zmierzenie ich kodu pod przymusem, aby zobaczyć, jak będzie on wytrzymywać ładowanie w Internecie. Siege obsługuje podstawowe uwierzytelnianie, pliki cookie, protokoły HTTP, HTTPS i FTP. Pozwala użytkownikowi trafić na serwer z konfigurowalną liczbą symulowanych klientów. Ci klienci umieszczają serwer ” w oblężeniu.”

możesz uzyskać oblężenie za pomocą brew install siege.

używam go, ponieważ może uruchomić listę adresów URL, które mu podasz. Wyobraź sobie, że Twoja aplikacja jest sklepem i zawiera listę kilku tysięcy produktów. Każdy produkt powinien mieć unikalny adres URL, coś w stylu , a może . To product-guid zapewnia, że możesz mieć unikalne adresy URL, nawet jeśli istnieją dwa elementy o tej samej nazwie produktu.

wiedząc, co znajduje się w Twojej bazie danych, możesz łatwo połączyć product-guid i product-name, przykleić go do końca i wymyślić listę stu lub tysiąca lub dziesięciu tysięcy unikalnych adresów URL produktów w swojej aplikacji. Jeśli zapiszesz je do pliku tekstowego i jak najszybciej odwiedzisz każdą z tych stron … może to wyglądać na dobry test warunków skrajnych, co?

wyrzucanie unikalnych adresów URL do pliku tekstowego #

prawdopodobnie zaczniesz pracować w sesji rails console, aby dowiedzieć się, jak uzyskać odpowiedni dostęp do schematu URL.

odpaliłem konsolę i wpisałem:

zajrzałem do naszej bazy programistów, aby znaleźć konto z dużą ilością danych; konto o id 4887 jest kontem powiązanym z automatyzacją QA i zawiera wiele danych.

campaign.to_param to sposób, w jaki budujemy adresy URL z naszych kampanii – po prostu łączy guid z ciągiem title, dostarczonym przez Klienta, i wywołuje na nim .parameterize. Dla tej partii kampanii są one generowane programowo przez nasz zautomatyzowany pakiet testów jakości.

po zakończeniu można zobaczyć coś takiego w all_campaign_urls.txt:

odwiedzając wszystkie te strony w teście oblężniczym #

możesz więc siege --help i zobaczyć flagę do przekazania w pliku:

już wiem, że będziemy potrzebować --file i --header, ponieważ będziemy musieli sfałszować uwierzytelnione sesje, przesyłając niektóre pliki cookie, proces, dla którego opisałem ostatnio

flaga --get wygląda przydatnie:

Pobierz, ściągnij nagłówki HTTP i wyświetl transakcję. Doskonały do debugowania aplikacji.

zalogujmy się jako nasze konto QA. Ponieważ uruchamiam to wszystko lokalnie, mogę znaleźć powiązany adres e-mail w naszej bazie danych. Nie znam hasła, oczywiście, ale mogę wymusić lokalne zresetowanie hasła, pobrać e-mail w Mailcatcher i ustawić go na dowolne hasło.

Lets get these headers in.

możemy poprosić o test cURL z naszych plików cookie. When I do

$ curl -v http://localhost:3000/account/campaigns/dd4dfb48aa-dec-05-drive-by-test

spodziewam się, że strona wróci, a nie przekierowanie do /users/sign_in

jak wygląda nieudana autoryzacja:

:

_ts_session_id: c86fd1fe38d7a6c56ce1ef5990045057fd827a2c5655094bcce3748d6ee6d3e4: ImRhMDY1YjdjYjMwNGNjNWUxNzFkNDhjOGQ0YzA0OTIwIg%3D%3D--98c228cb35af1a269ee894c22540b81848e2ed09

i jesteśmy w biznesie:

zauważyłeś te kody statusu 200? Mogę tail -f log/development.log i zobaczyć całą aktywność, wskazując, że przesłane pliki cookie są powiązane z uwierzytelnionym użytkownikiem.

pierwsze, co zauważyłem, to wydaje się, że są to bardzo długie czasy ładowania strony.

mam 162 różne adresy URL. Gdy uruchomisz siege z domyślną konfiguracją, uruchomi 20 jednoczesnych użytkowników. Wydawało się, że to trochę za dużo, jak na to, co mój localhost mógł obsłużyć, więc próbowałem zrzucić liczbę jednoczesnych użytkowników najpierw do dwóch użytkowników, a następnie do jednego.

aby ustawić liczbę jednoczesnych użytkowników, wystarczy dodać flagę --concurrent=NUM. Nadal byłem zalany danymi wyjściowymi, więc zrzuciłem równoczesnych użytkowników do 1 i usunąłem wszystkie strony oprócz 20 z listy stron do załadowania. Dałem mu time flagę 60 sekund, a także: -t 60s

kiedy wszystko zostanie powiedziane i zrobione, zobaczysz siege składając kilka czasowych GET żądań, w ten sposób:

w końcu wszystko się uspokoi, a otrzymasz podsumowanie testu obciążenia:

tak, OK, to jest fajne, Josh, ale jak do cholery mam zrobić coś użytecznego z tym?

świetne pytanie! Jego czas, aby zobaczyć, gdzie nasza aplikacja spędza większość czasu, w prawdziwym świecie. Moglibyśmy zrobić więcej benchmarkingu lokalnie, ale oczywiście dane z prawdziwego świata, zebrane od prawdziwych ludzi, którzy wchodzą w interakcję z Twoją prawdziwą aplikacją w produkcji, są najbardziej użytecznym źródłem danych.

w związku z tym wkrótce napiszę o tym, jak uzyskać przydatne dane z aplikacji Rails do DataDog!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.