2010-09-10 22 views
10

sto provando ad usare apache bench per caricare test creare un'azione nella mia applicazione rails ma ab non sembra inviare i dati POST - anche se invia correttamente una richiesta POST e non GET .Apache Bench e dati POST

Questo è il comando che ho eseguito:

ab -n 1 -p post -v 4 "http://oz01.zappos.net/registrations" 

e questo è il contenuto del file posta:

authenticity_token=M18KXwSOuIVbDPZOVQy5h8aSGoU159V9S5uV2lpsAI0 

le rotaie log mostrano una richiesta POST che passa, ma non mostrano alcuna parametri pubblicati:

Started POST "/registrations" for 10.66.210.70 at Thu Sep 09 17:48:06 -0700 2010 
    Processing by RegistrationsController#create as */* 
Rendered registrations/new.html.erb within layouts/application (14.0ms) 
Completed 200 OK in 24ms (Views: 14.6ms | ActiveRecord: 0.1ms) 

mentre una richiesta POST proveniente da un browser genera questa voce di registro :

Started POST "/registrations" for 192.168.66.20 at Thu Sep 09 17:49:47 -0700 2010 
    Processing by RegistrationsController#create as HTML 
    Parameters: {"submit"=>"true", "authenticity_token"=>"AfNG0UoTbJXnxke2725efhYAoi3ogddMC7Uqu5mAui0=", "utf8"=>"\342\234\223", "registration"=>{"city"=>"", "address"=>"", "name"=>"", "zip"=>"", "optin"=>"0", "state"=>"", "email"=>""}} 
Rendered registrations/new.html.erb within layouts/application (13.7ms) 
Completed 200 OK in 24ms (Views: 14.3ms | ActiveRecord: 0.1ms) 

e, infine, questo è ciò che i registri ab per la richiesta:

--- 
POST /registrations HTTP/1.0 
User-Agent: ApacheBench/2.0.40-dev 
Host: oz01.zappos.net 
Accept: */* 
Content-length: 63 
Content-type: text/plain 


--- 

Perché non prendere in mano il dati post?

se il file "post" non c'è allora ottengo un messaggio di errore dicendo che non riesce a trovare il file in modo che io conosco meno è trovare il file ...

+0

Ho un problema quasi esatto ma questa volta con un file di 150k che ab appare solo per sputare 80K di esso a mio script che siede lì bloccando in attesa di più IO a causa della lunghezza del contenuto. Qualche fortuna dalla tua parte? – Xailor

risposta

10

Forse avete bisogno del - opzione T come indicato nell'uomo ab: -

ab -n 1 -p post -v 4 -T application/x-www-form-urlencoded "http://oz01.zappos.net/registrations" 

ho provato con Django e sembra che Django non si preoccupano veramente l'intestazione del tipo di contenuto (è visualizzato il contenuto postato se ho usato -T o no), ma Rails forse lo vuole.

+1

Ho un problema simile con 'ab' anche con l'opzione' -T', non penso sia così. – Xailor

+0

Stesso problema, e questo ha funzionato per me dopo aver corretto un refuso nel tipo di contenuto. Risolta la risposta. – Thilo

+0

Stavo fornendo l'intestazione del tipo di contenuto a -T, che era il mio problema ''Content-Type: application/json'' invece di solo' application/json' –

2

Vecchia domanda, ma per il bene di chiunque altro cerchi SO per questo, ecco come ho potuto farlo funzionare.

Assicurati che il tuo file di post sia correttamente codificato URL senza caratteri extra non stampabili o altro alla fine. Il modo più privo di errori è crearlo con il codice. Ho usato un po 'di pitone per creare la mia:

>>> import urllib 
>>> outfile = open('post.data', 'w') 
>>> params = ({ 'auth_token': 'somelongstringthatendswithanequalssign=' }) 
>>> encoded = urllib.urlencode(params) 
>>> outfile.write(encoded) 
>>> outfile.close() 

uscita Esempio:

auth_token=somelongstringthatendswithanequalssign%3D 
+2

Ti manca la parte di test di carico;) – Glaslos

+0

Hai ragione. È comunque necessario eseguire effettivamente ab, usando ovviamente il nuovo file post.data correttamente codificato. La semplice generazione del file post.data fa poco per testare il tuo server web (o qualunque cosa sia ...) – Troy