Articles

Load Testing your app with Siege

July 2019

tag(s): rails_performance • rails • programming
Leestijd: 8 minuten
  • unieke URL ’s dumpen in een tekstbestand
  • het bezoeken van al die pagina’ s in een Siege test
  • extra bronnen

laatste tijd, ik groef in het gebruik van Apache benchmark om de prestaties testen op een pagina die authenticatie vereist om toegang te doen.

vandaag zullen we uitzoeken hoe we siege kunnen gebruiken om veel unieke URL ‘ s op onze pagina te bezoeken, en om benchmarks te krijgen voor dat proces. Ik zal vervolgens prestatieprofilering in Datadog uitzoeken, en met deze drie tools bij elkaar, moeten we klaar zijn om een aantal zinvolle verbeteringen aan onze applicatie te maken.

deze serie berichten is een direct resultaat van Nate Berkopec ’s The Complete Guide to Rails Performance, met behulp van zijn screencasts, evenals Steve Grossi’ s Load Testing Rails Apps met Apache Bench, Siege, en JMeter. Gewapend met deze middelen, en op de schouders van reuzen, gaan we.

Siege ‘ s beschrijving:

Siege is een http load testing en benchmarking hulpprogramma. Het is ontworpen om webontwikkelaars hun code onder dwang te laten meten, om te zien hoe het bestand is tegen belasting op het internet. Siege ondersteunt basisverificatie, cookies, HTTP, HTTPS en FTP-protocollen. Het laat de gebruiker hit een server met een configureerbaar aantal gesimuleerde clients. Die klanten plaatsen de server onder vuur.”

u kunt belegering krijgen met brew install siege.

Ik gebruik het omdat het een lijst met URL ‘ s kan draaien die je het geeft. Stel je voor dat uw app is een winkel, en het bevat een paar duizend producten. Elk product moet een unieke URL hebben, iets als , of misschien . Dat product-guid zorgt ervoor dat u unieke URL ‘ s kunt hebben, zelfs als er twee items met dezelfde Productnaam zijn.

Als u weet wat er in uw database staat, kunt u gemakkelijk product-guid en product-name samenvoegen, het aan het einde van plakken en een lijst maken van honderd -, duizend-of tienduizend unieke product-url ‘ s in uw applicatie. Als je deze opslaat in een tekstbestand en beleg elk van die pagina ‘ s zo snel mogelijk laat bezoeken… lijkt dit misschien op een soort van goede stresstest, hè?

unieke URL ‘ s dumpen in een tekstbestand #

u zult waarschijnlijk beginnen te werken in een rails console sessie, om erachter te komen hoe u het URL-schema precies goed kunt benaderen.

ik heb de console opgestart en ingevoerd:

ik heb in onze dev-database gezocht naar een account met veel gegevens; account met de id 4887 is een account dat is gekoppeld aan QA automation en veel gegevens bevat.

campaign.to_param is hoe we URL ‘ s bouwen uit onze campagnes – het verbindt gewoon de guid met de title string, zoals geleverd door de klant, en roept .parameterize op. Voor deze reeks campagnes worden ze programmatisch gegenereerd door onze geautomatiseerde QA test suite.

Als u klaar bent, ziet u misschien iets als dit in all_campaign_urls.txt:

het bezoeken van al die pagina ‘ s in een Belegeringstest #

dus, u kunt siege --help en zie een vlag voor het doorgeven in een bestand:

ik weet al dat we --file nodig hebben, en --header, omdat we geverifieerde sessies moeten faken door enkele cookies in te dienen, het proces waarvoor ik de vorige keer

de --get vlag heb geschetst, ziet er nuttig uit:

GET, pull down HTTP headers en de transactie weer te geven. Ideaal voor het debuggen van toepassingen.

so, laten we inloggen als onze QA account. Aangezien ik dit allemaal lokaal voer, kan ik het bijbehorende e-mailadres vinden in onze DB. Ik weet het wachtwoord niet, natuurlijk, maar ik kan een lokaal wachtwoord reset forceren, pak de e-mail in Mailcatcher, en stel het in op welk wachtwoord Ik wil.

laten we deze headers binnen krijgen.

we kunnen een cURL-test aanvragen met onze cookies. Als ik dat doe

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

ik verwacht de pagina terug te zien komen, geen omleiding naar /users/sign_in

hoe verwacht ik dat een mislukte authenticatie eruit zal zien:

cookies:

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

en we doen zaken:

zie je die statuscodes van 200? Ik kan tail -f log/development.log en zie alle activiteiten, wat aangeeft dat de ingediende cookies zijn gekoppeld aan een geverifieerde gebruiker.

het eerste wat me opvalt is dat het lijkt alsof dit extreem lange pagina-laadtijden zijn.

ik beleg ongeveer 162 verschillende URL ‘ s. Wanneer u siege uitvoert met de standaardconfiguratie, draait het 20 gelijktijdige gebruikers. Dit leek een beetje te veel voor wat mijn localhost aankon, dus probeerde ik het aantal gelijktijdige gebruikers eerst naar twee gebruikers te laten vallen, daarna naar één.

voeg de vlag --concurrent=NUM toe om het aantal gelijktijdige gebruikers in te stellen. Ik was nog steeds overspoeld met output, dus ik liet gelijktijdige gebruikers naar 1 en verwijderde alle, maar 20 pagina ’s uit de lijst met pagina’ s te laden. Ik gaf het ook een time vlag van 60 seconden: -t 60s

als alles gezegd en gedaan is, zie je siege een hoop getimede GET Verzoeken maken, zoals zo:

uiteindelijk komt alles goed, en krijg je een samenvatting van de belastingtest:

dit is cool, Josh, maar hoe moet ik hier iets nuttigs mee doen?

grote vraag! Het is tijd om te zien waar onze app het grootste deel van zijn tijd doorbrengt, in de echte wereld. We zouden lokaal meer kunnen benchmarken, maar het is duidelijk dat real-world data, verzameld van echte mensen die interactie hebben met je echte app in productie, de meest nuttige bron van data is.

daarom zal ik binnenkort schrijven Ik heb geschreven over hoe nuttige gegevens van een Rails app in DataDog te krijgen!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.