Articles

töltse be az alkalmazás tesztelését ostrommal

július 2019

címke(ek): rails_performance • rails • programozás
olvasási idő: 8 perc
  • egyedi URL-ek lerakása szöveges fájlba
  • az összes ilyen oldal meglátogatása a Siege-ben a Siege test
  • további források

legutóbb az Apache benchmark használatával végeztem teljesítménytesztelést egy olyan oldalon, amelyhez hitelesítés szükséges a hozzáféréshez.

ma kitaláljuk, hogyan használjuk a siege – et az oldalunk számos egyedi URL-jének meglátogatásához, és hogy referenciaértékeket kapjunk erről a folyamatról. Majd a következő kitalálni teljesítmény profilalkotás Datadog, és ezzel a három eszközt össze, Mi készen kell állnia arra, hogy néhány értelmes fejlesztéseket a kérelmet.

ez a bejegyzéssorozat Nate Berkopec The Complete Guide to Rails Performance című könyvének közvetlen eredménye, a screencasts segítségével, valamint Steve Grossi Load Testing Rails alkalmazásai az Apache Bench, Siege és JMeter segítségével. Ezekkel az erőforrásokkal felfegyverkezve, óriások vállán állva, indulunk.

Siege leírása:

Siege egy http terhelés tesztelés és benchmarking segédprogram. Úgy tervezték, hogy a webfejlesztők kényszer alatt mérjék kódjukat, hogy lássák, hogyan fog felállni az internet betöltésére. A Siege támogatja az alapvető hitelesítést, cookie-kat, HTTP, HTTPS és FTP protokollokat. Ez lehetővé teszi, hogy a felhasználó elérje a szerver egy konfigurálható számú szimulált ügyfelek. Ezek az ügyfelek a szervert “ostrom alá” helyezik.”

lehet kapni ostrom brew install siege.

azért használom, mert képes futtatni az Ön által megadott URL-ek listáját. Képzelje el, hogy az alkalmazás egy áruház, amely néhány ezer terméket sorol fel. Minden terméknek egyedi URL-vel kell rendelkeznie, például vagy talán . Ez a product-guid biztosítja, hogy egyedi URL-ek legyenek, még akkor is, ha két elem azonos terméknévvel rendelkezik.

tudva, hogy mi van az adatbázisban, könnyedén összefűzheti a product-guid és a product-name elemet, ragaszkodhat az végéhez, és összeállíthat egy listát, amely száz, ezer vagy tízezer egyedi termék URL-t tartalmaz az alkalmazásban. Ha ezeket elmentenéd egy szöveges fájlba, és Siege minden egyes oldalt megnézetne, amilyen gyorsan csak lehet, ez valami jó stressztesztnek tűnne, mi?

egyedi URL-ek lerakása egy szöveges fájlba #

valószínűleg egy rails console munkamenetben fog dolgozni, hogy kitalálja, hogyan érheti el az URL-sémát.

beindítottam a konzolt, és beírtam:

benéztem a dev adatbázisunkba, hogy találjak egy sok adatot tartalmazó fiókot; az 4887 azonosítóval rendelkező fiók A QA automatizáláshoz társított fiók, és sok adat van benne.

campaign.to_param így építjük ki az URL – eket a kampányainkból-csak összefűzi a guid – et a title karakterlánccal, ahogy azt az ügyfél biztosítja, és felhívja a .parameterize – ot. Ehhez a kampánycsomaghoz az automatizált minőségbiztosítási tesztcsomagunk programozott módon generálja őket.

ha elkészült, valami ilyesmit láthat a all_campaign_urls.txt:

látogatás az összes ilyen oldalak ostrom teszt #

tehát, akkor siege --help és lásd a zászló halad egy fájlt:

már tudom, hogy szükségünk lesz --file – ra és --header – re, mivel néhány cookie beküldésével hamis hitelesített munkameneteket kell hamisítanunk, az a folyamat, amelyre utoljára vázoltam

a --get zászló hasznosnak tűnik:

GET, húzza le HTTP fejlécek és megjeleníti a tranzakciót. Nagy alkalmazás hibakeresés.

tehát, lehetővé teszi, hogy jelentkezzen be, mint a QA számla. Mivel ezt mind helyben futtatom, megtalálom a hozzá tartozó e-mail címet a DB-ben. Természetesen nem tudom a jelszót, de kényszeríthetem a helyi jelszó visszaállítását, megragadhatom az e-mailt a Mailcatcherben, és beállíthatom azt a jelszót, amit akarok.

lehetővé teszi, hogy ezeket a fejléceket.

a cookie-kkal egy cURL teszt kérést tehetünk. Amikor én

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

azt várom, hogy az oldal jön vissza, nem egy átirányítás /users/sign_in

mit várok egy Sikertelen hitelesítés, hogy néz ki:

cookie-k:

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

és benne vagyunk az üzletben:

figyelje meg a 200 állapotkódokat? tail -f log/development.log és látom az összes tevékenységet, jelezve, hogy a beküldött cookie-k egy hitelesített felhasználóhoz vannak társítva.

az első dolog, amit észrevettem, úgy tűnik, hogy ezek rendkívül hosszú oldalbetöltési idők.

Ostromterhelésem van az 162 különböző URL-ekről. Ha az alapértelmezett konfigurációval futtatja a siege parancsot, akkor az 20 egyidejű felhasználót futtat. Úgy tűnt, hogy ez egy kicsit sok ahhoz, amit a localhost képes kezelni, ezért megpróbáltam először két felhasználóra, majd egyre csökkenteni az egyidejű felhasználók számát.

az egyidejű felhasználók számának beállításához csak adja hozzá a --concurrent=NUM jelzőt. Még mindig elárasztott a kimenet, így a párhuzamos felhasználókat 1-re csökkentettem, és 20 oldal kivételével eltávolítottam a betöltendő oldalak listájáról. Adtam neki egy time zászló 60 másodperc, valamint: -t 60s

amikor mindent elmondtunk, látni fogod siege hogy egy csomó időzített GET kérések, mint így:

végül minden rendeződik, és kapsz egy összefoglalót a terhelési tesztről:

Igen, Oké, ez király, Josh, de hogy a fenébe csináljak bármi hasznosat ezzel?

nagy kérdés! Itt az ideje, hogy hol a app tölti a legtöbb időt, ki a valós világban. Több benchmarkingot végezhetnénk helyben, de nyilvánvalóan a valós adatok, amelyeket valódi emberekből gyűjtöttek össze, a valódi alkalmazással való interakció a termelésben a leghasznosabb adatforrás.

ezért hamarosan írok írtam arról, hogyan lehet hasznos adatokat szerezni egy Rails alkalmazásból a Datadogba!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.