2012-06-22 9 views
27

Sto provando a creare uno strumento per testare il ritardo della mia connessione Internet, in particolare i tempi di caricamento del sito web. Ho pensato di usare il modulo python requests per la parte di caricamento.Misurare il tempo di caricamento del sito Web con richieste Python

Il problema è che non ha funzionalità incorporate per misurare il tempo necessario per ottenere la risposta completa. Per questo ho pensato di utilizzare il modulo timeit.

Quello che non sono sicuro di è che se corro timeit in questo modo:

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

Sono davvero misurare il tempo impiegato la risposta di arrivare o è il tempo necessario per la richiesta di essere costruita, inviata, ricevuta, ecc.? Immagino che potrei forse ignorare quel tempo di esecuzione dal momento che sto testando le reti con ritardi molto lunghi (~ 700ms)?

C'è un modo migliore per farlo in modo programmatico?

risposta

19

Per quanto riguarda la tua domanda, dovrebbe essere il tempo totale per

  1. tempo per creare l'oggetto di richiesta
  2. inviare richiesta
  3. Ricevere risposta
  4. risposta Parse (Vedi commento da Thomas Orozco)

Altri modi per misurare un tempo di caricamento di una singola richiesta è utilizzare 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. analizzare la risposta HTTP –

+1

che sembra davvero bello, ma guardando uno degli esempi che vedo '1. start_timer = time.time() 2. Apri browser + risposta di lettura 3. latency = time.time() - start_timer' Questo sarebbe lo stesso problema? – cookM

+0

@cookM: non l'ho visto come un problema ma un'esperienza in tempo reale su quale sarà la latenza della richiesta. In effetti, la media è su molte richieste che saranno più vicine a un momento realistico. – pyfunc

105

C'è una tale funzionalità nella versione più recente di richieste:

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

Ad esempio:

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

per ottenere il tempo di risposta in secondi: 'requests.get (" http://127.0.0.1 ") .elapsed.total_seconds()' –

+1

Per aggiungere al commento di Micael Osl: 'total_seconds()' è un numero decimale che sembra avere precisione microseconda. – Luc

+4

Non utilizzare questo per la profilazione e l'ottimizzazione del codice sul lato client. Misura solo il tempo di risposta del server (che era la domanda degli OP). _Limporto del tempo trascorso tra l'invio della richiesta e l'arrivo della risposta (come timedelta). Questa proprietà misura in particolare il tempo impiegato tra l'invio del primo byte della richiesta e il completamento dell'analisi delle intestazioni. Pertanto, non viene influenzato dal consumo del contenuto della risposta o dal valore dell'argomento della parola chiave stream._ - i documenti. – ChaimG