Domanda

Devo testare un modulo Web che richiede un caricamento di file. La dimensione del file in ciascun caricamento sarà di circa 10 MB. Voglio verificare se il server è in grado di gestire oltre 100 upload simultanei e rimane comunque reattivo per il resto del sito.

Gli invii di moduli ripetuti dal nostro ufficio saranno limitati dalla nostra linea DSL locale. Il server è fuori sede con una larghezza di banda maggiore.

Le risposte basate sull'esperienza sarebbero grandiose, ma qualsiasi suggerimento è il benvenuto.

È stato utile?

Soluzione

Utilizza lo strumento da riga di comando ab (ApacheBench) che è in bundle con Apache (Ho appena scoperto questo fantastico piccolo strumento). A differenza di cURL o wget, ApacheBench è stato progettato per eseguire stress test su server Web (qualsiasi tipo di server Web!). Genera anche molte statistiche. Il seguente comando invierà a Richiesta POST HTTP incluso il file test.jpg in http: // localhost / 100 volte, con un massimo di 4 richieste simultanee.

ab -n 100 -c 4 -p test.jpg http://localhost/

Produce output in questo modo:

Server Software:        
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      4
Time taken for tests:   0.78125 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      2600 bytes
HTML transferred:       0 bytes
Requests per second:    1280.00 [#/sec] (mean)
Time per request:       3.125 [ms] (mean)
Time per request:       0.781 [ms] (mean, across all concurrent requests)
Transfer rate:          25.60 [Kbytes/sec] received

Connection Times (ms)
          min  mean[+/-sd] median   max
Connect:        0    0   2.6      0      15
Processing:     0    2   5.5      0      15
Waiting:        0    1   4.8      0      15
Total:          0    2   6.0      0      15

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%     15
  95%     15
  98%     15
  99%     15
 100%     15 (longest request)

Altri suggerimenti

Automatizza Selenium RC usando la tua lingua preferita. Inizia 100 thread di selenio, ognuno digitando un percorso del file nell'input e facendo clic su Invia.

Potresti generare 100 file con nome sequenziale per eseguire facilmente il looping su di essi o semplicemente utilizzare lo stesso file più volte

Forse ti guiderei verso l'uso di cURL e l'invio di cose casuali (come, leggere 10 MB da / dev / urandom e codificarlo in base32), attraverso una richiesta POST e fabbricare manualmente il body per essere un upload di file (non è scienza missilistica).

Fork quello script 100 volte, forse su alcuni server. Assicurati solo che gli amministratori di sistema non pensino che tu stia facendo un DDoS o qualcosa del genere

Sfortunatamente, questa risposta rimane un po 'vaga, ma speriamo che ti aiuti spingendoti nella giusta direzione.

Continua come da commento di Liam:
Se il server che riceve i caricamenti non si trova nella stessa LAN dei client che si connettono ad esso, sarebbe meglio ottenere nodi remoti il ??più possibile per lo stress test, se non altro per simulare comportamenti il ??più autentici possibile. Ma se non si ha accesso a computer esterni alla LAN locale, la LAN locale è sempre meglio di niente.

I test di stress dall'interno dello stesso hardware non sarebbero una buona idea, in quanto si farebbe doppio carico sul server: capire i dati casuali, comprimerli, inviarli attraverso lo stack TCP / IP (anche se probabilmente non su Ethernet ) e solo allora il server può fare la sua magia. Se la parte di invio è esternalizzata, si ottiene una doppia prestazione (presa con un grano di dimensioni arbitrarie) dalla parte ricevente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top