2012-06-22 32 views
27

Estoy tratando de construir una herramienta para probar el retraso de mi conexión a Internet, más específicamente los tiempos de carga del sitio web. Pensé en usar el módulo python requests para la parte de carga.Medir el tiempo de carga del sitio web con las solicitudes de Python

El problema es que no tiene funcionalidad incorporada para medir el tiempo que le tomó obtener la respuesta completa. Para esto, pensé que usaría el módulo timeit.

Lo que no estoy seguro es de que si me quedo timeit así:

t = timeit.Timer("requests.get('http://www.google.com')", "import requests") 

estoy realmente medir el tiempo que tardó la respuesta para llegar o es el tiempo que tarda el solicitud para ser construido, enviado, recibido, etc. Supongo que podría ignorar el tiempo de ejecución dado que estoy probando redes con retrasos muy largos (~ 700 ms).

¿Existe alguna forma mejor de hacerlo de manera programática?

Respuesta

19

cuanto a su pregunta, que debería ser el tiempo total para

  1. tiempo para crear el objeto de solicitud
  2. Enviar solicitud
  3. Recibir respuesta
  4. respuesta Parse (Ver comentario de Thomas Orozco)

Otras formas de medir el tiempo de carga de una sola solicitud es usar urllib:

nf = urllib.urlopen(url) 
start = time.time() 
page = nf.read() 
end = time.time() 
nf.close() 
# end - start gives you the page load time 
+5

+ 4. analizar la respuesta HTTP –

+1

Eso se ve muy bien, pero mirando uno de los ejemplos que veo '1. start_timer = time.time() 2. Abra el navegador + respuesta de lectura 3. latency = time.time() - start_timer' ¿Sería un problema similar? – cookM

+0

@cookM: No lo vi como un problema sino como una experiencia en tiempo real de lo que será la latencia de solicitud. De hecho, promedia muchas solicitudes que estarán más cerca de un tiempo realista. – pyfunc

105

Hay tal funcionalidad en la versión más reciente de solicitudes:

http://docs.python-requests.org/en/latest/api/?highlight=elapsed#requests.Response.elapsed

Por ejemplo:

requests.get("http://127.0.0.1").elapsed.total_seconds() 
+24

para obtener el tiempo de respuesta en segundos: 'requests.get (" http://127.0.0.1 ") .elapsed.total_seconds()' –

+1

Para agregar al comentario de Micael Osl: 'total_seconds()' es un número decimal que parece tener una precisión de microsegundos. – Luc

+4

No lo use para crear perfiles y optimizar su código en el lado del cliente. Solo mide el tiempo de respuesta del servidor (que fue la pregunta de OP). _La cantidad de tiempo transcurrido entre el envío de la solicitud y la llegada de la respuesta (como un timedelta). Esta propiedad mide específicamente el tiempo que transcurre entre enviar el primer byte de la solicitud y finalizar el análisis de los encabezados. Por lo tanto, no se ve afectado por el consumo del contenido de respuesta o el valor de la palabra clave de la secuencia argument._ - the docs. – ChaimG

Cuestiones relacionadas