Articles

Test di Carico la tua app con Assedio

luglio 2019

tag(s): rails_performance • guide • programmazione
tempo di Lettura: 8 minuti
  • Dumping unico Url in un file di testo
  • Visita a tutte quelle pagine in un Assedio di prova
  • Risorse Aggiuntive

Ultima volta, ho scavato in utilizzando Apache Benchmark a fare il test delle prestazioni di una pagina che richiede l’autenticazione per l’accesso.

Oggi scopriremo come utilizzare siege per visitare molti URL univoci sulla nostra pagina e per ottenere benchmark su quel processo. Scoprirò la profilazione delle prestazioni in Datadog e, con questi tre strumenti messi insieme, dovremmo essere pronti a apportare alcuni miglioramenti significativi alla nostra applicazione.

Questa serie di post è un risultato diretto di The Complete Guide to Rails Performance di Nate Berkopec, con l’aiuto dei suoi screencast, così come le app di test di carico di Steve Grossi con Apache Bench, Siege e JMeter. Armati di queste risorse, e in piedi sulle spalle di giganti, andiamo.

Descrizione di Siege:

Siege è un test di carico http e l’utilità di benchmarking. E ‘ stato progettato per consentire agli sviluppatori web di misurare il loro codice sotto costrizione, per vedere come si leverà in piedi fino a caricare su internet. Siege supporta l’autenticazione di base, i cookie, i protocolli HTTP, HTTPS e FTP. Consente all’utente di colpire un server con un numero configurabile di client simulati. Quei client mettono il server “sotto assedio.”

Puoi ottenere l’assedio con brew install siege.

Lo sto usando perché può eseguire un elenco di URL che gli dai. Immagina che la tua app sia un negozio e elenca alcune migliaia di prodotti. Ogni prodotto dovrebbe avere un URL univoco, qualcosa come o forse . Che product-guid fa in modo che si può avere URL univoci, anche se ci sono due elementi con lo stesso nome del prodotto.

Sapendo cosa c’è nel tuo database, puoi facilmente concat product-guid e product-name, attaccarlo alla fine di e creare un elenco di cento o mille o diecimila URL di prodotto unici nella tua applicazione. Se li hai salvati in un file di testo e hai fatto visitare a Siege ogni singola pagina il più rapidamente possibile might questo potrebbe sembrare una sorta di buon test di stress, eh?

Scaricando URL univoci in un file di testo #

Probabilmente inizierai a lavorare in una sessione rails console, per capire come accedere allo schema URL giusto.

Ho attivato la console e ho inserito:

Ho guardato nel nostro database di sviluppo per trovare un account con molti dati; l’account con l’id 4887 è un account associato all’automazione QA e contiene molti dati.

campaign.to_param è il modo in cui costruiamo gli URL delle nostre campagne: concatra semplicemente guid con la stringa title, come fornito dal cliente, e chiama .parameterize su di esso. Per questo batch di campagne, vengono generate a livello di codice dalla nostra suite di test QA automatizzati.

Al termine, potresti vedere qualcosa di simile in all_campaign_urls.txt:

Visitando tutte quelle pagine in un test Siege #

Quindi, puoi siege --help e vedere un flag per il passaggio in un file:

So già che avremo bisogno di --file e --header, poiché dovremo falsificare le sessioni autenticate inviando alcuni cookie, il processo per il quale ho delineato l’ultima volta

Il flag --get sembra utile:

OTTIENI, abbassa le intestazioni HTTP e visualizza la transazione. Ottimo per il debug delle applicazioni.

Quindi, consente di accedere come nostro account QA. Dal momento che sto eseguendo tutto questo localmente, posso trovare l’indirizzo email associato nel nostro DB. Non conosco la password, ovviamente, ma posso forzare un reset della password locale, afferrare l’e-mail in Mailcatcher e impostarla su qualsiasi password che voglio.

Consente di ottenere queste intestazioni.

Possiamo fare una richiesta di test cURL con i nostri cookie. Quando faccio

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

mi aspetto di vedere la pagina torna indietro, non un rinvio a /users/sign_in

che Cosa mi aspetto di autenticazione non riuscita a guardare come:

cookie:

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

E siamo nel business:

Avviso a questi codici di stato di 200? Posso tail -f log/development.log e vedere tutte le attività, indicando che i cookie inviati sono associati a un utente autenticato.

La prima cosa che noto è che sembra che questi siano tempi di caricamento della pagina estremamente lunghi.

Sto caricando l’Assedio su 162 URL diversi. Quando si esegue siege con la configurazione predefinita, viene eseguito 20 utenti simultanei. Questo sembrava essere un po ‘ troppo per quello che il mio localhost poteva gestire, quindi ho provato a far cadere il numero di utenti simultanei prima a due utenti, poi a uno.

Per impostare il numero di utenti simultanei, basta aggiungere il flag --concurrent=NUM. Ero ancora inondato di output, quindi ho lasciato cadere gli utenti simultanei su 1 e rimosso tutte le pagine tranne 20 dall’elenco delle pagine da caricare. Ho dato un time bandiera di 60 secondi, così: -t 60s

Quando tutto è detto e fatto, si vedrà siege fare un po ‘ di tempo GET richieste, in questo modo:

alla fine, tutto si sistemerà, e si otterrà un riepilogo del test di carico:

Sì, OK, questo è cool, Josh, ma come cavolo devo fare qualcosa di utile con questo?

Ottima domanda! Il suo tempo per vedere dove la nostra applicazione sta spendendo la maggior parte del suo tempo, nel mondo reale. Potremmo fare più benchmarking a livello locale, ma ovviamente i dati del mondo reale, raccolti da persone reali che interagiscono con la tua app reale in produzione, sono la fonte di dati più utile.

Pertanto, scriverò presto su come ottenere dati utili da un’app Rails in DataDog!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.