2010-09-10 18 views
10

Estoy tratando de usar apache bench para cargar una acción de prueba en mi aplicación Rails pero ab no parece estar enviando los datos POST, aunque envía correctamente una solicitud POST y no una solicitud GET .Apache Bench y datos POST

Este es el comando corro:

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

y este es el contenido del archivo de correo:

authenticity_token=M18KXwSOuIVbDPZOVQy5h8aSGoU159V9S5uV2lpsAI0 

los carriles registros muestran una petición POST que viene a través, pero no muestran ningún parámetros que se publican:

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) 

mientras que una petición POST procedente de un navegador resultados en esta entrada del 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) 

y, finalmente, esto es lo que los registros de ab de la solicitud:

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


--- 

¿Por qué es no recoger los datos de envío?

si el archivo "post" no está allí entonces consigo un mensaje de error diciendo que no puede encontrar el archivo así que sé al menos que es encontrar el archivo ...

+0

tengo un problema casi exacta pero esta vez con un archivo de 150k que ab sólo aparece para escupir 80k de ella en mi script que se sienta allí bloqueando esperando más IO debido a la longitud del contenido. ¿Alguna suerte de tu parte? – Xailor

Respuesta

10

Tal vez usted necesita el - opción T como se indica en el hombre AB: -

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

he probado con Django y parece que Django realmente no se preocupan por la cabecera de tipo de contenido (se visualiza el contenido publicado si he usado -T o no), pero Rails quizás lo quiera.

+1

Tengo un problema similar con 'ab' incluso con la opción' -T', no creo que sea eso. – Xailor

+0

Mismo problema, y ​​esto funcionó para mí después de corregir un error tipográfico en el tipo de contenido. Se corrigió la respuesta. – Thilo

+0

Estaba proporcionando el encabezado de tipo de contenido a -T, que era mi problema ''Tipo de contenido: aplicación/json'' en lugar de solo' application/json' –

2

Pregunta anterior, pero por el bien de cualquier otra persona que busque SO para esto, así es como lo hice funcionar.

Asegúrate EXTRA de que tu archivo de publicación esté correctamente codificado en URL sin caracteres adicionales que no sean de impresión o algo al final. La forma más libre de errores es simplemente crearlo con código. He utilizado algunas de pitón para crear la mía:

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

Ejemplo de salida:

auth_token=somelongstringthatendswithanequalssign%3D 
+2

Falta la parte de prueba de carga;) – Glaslos

+0

Tiene razón. Todavía necesita ejecutar ab, usando su nuevo archivo post.data codificado correctamente, por supuesto. Solo generar el archivo post.data hace poco para probar su servidor web (o lo que sea ...) – Troy

Cuestiones relacionadas