2012-06-22 34 views
27

我正在尝试构建一个测试我的Internet连接延迟的工具,更具体地说是网站加载时间。我想到了使用python requests模块来装载部件。用Python请求测量网站加载时间

问题是,它没有内置的功能来测量获得完整响应所花费的时间。为此我想我会使用timeit模块。

我不知道的是,如果我跑timeit像这样什么:

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

我我真的测量它采取了响应到达,或者是它需要的时间的时间请求被建立,发送,接收等?我猜测我可能会忽略那个执行时间,因为我正在测试延迟很长的网络(〜700ms)?

有没有一种更好的方式来编写程序?

回答

19

至于你的问题,应该是总时间

  1. 时间来创建请求对象
  2. 发送请求
  3. 接收响应
  4. 解析响应(请参阅从托马斯·奥罗斯科评论)

其他测量单个请求加载时间的方法是使用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解析HTTP响应 –

+1

这看起来真的不错,但看着我看到的例子之一 '1。 start_timer = time.time() 2.打开浏览器+读取响应 3. latency = time.time() - start_timer' 这样会出现同样的问题吗? – cookM

+0

@cookM:我没有把它看成问题,而是对请求延迟的实时体验。事实上,它的平均数量将接近实际的时间。 – pyfunc

105

中有最新版本的请求这样的功能:

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

例如:

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

以秒为单位获得响应时间:'requests.get(“http://127.0.0.1”).elapsed.total_seconds()' –

+1

要添加到Micael Osl的评论:'total_seconds()'是一个似乎具有微秒精度的十进制数。 – Luc

+4

不要在客户端使用它来分析和优化代码。它只测量服务器的响应时间(这是OP的问题)。 _发送请求和响应到达之间所经过的时间量(作为timedelta)。该属性具体测量发送请求的第一个字节和完成解析报头之间的时间。因此,它不会因使用响应内容或流关键字参数的值而受到影响._ - 文档。 – ChaimG