1. 程式人生 > >python接口自動化20-requests獲取響應時間(elapsed)與超時(timeout)

python接口自動化20-requests獲取響應時間(elapsed)與超時(timeout)

很多 服務 小數 there cif second TP lock parsing

前言

requests發請求時,接口的響應時間,也是我們需要關註的一個點,如果響應時間太長,也是不合理的。
如果服務端沒及時響應,也不能一直等著,可以設置一個timeout超時的時間

關於requests請求的響應時間,官網上沒太多介紹,並且我百度搜了下,看很多資料寫的是r.elapsed.microseconds獲取的,然而都是錯的!!!

elapsed官方文檔

  1. elapsed方法的官方文檔地址:http://cn.python-requests.org/zh_CN/latest/api.html#requests.Response
requests.Response

     elapsed = None

     The amount of time elapsed between sending the request and the arrival of the response (as a timedelta). This property specifically measures the time taken between sending the first byte of the       request and finishing parsing the headers. It is therefore unaffected by consuming the response content or the value of the stream keyword argument.
     簡單翻譯:計算的是從發送請求到服務端響應回來這段時間(也就是時間差),發送第一個數據到收到最後一個數據之間,這個時長不受響應的內容影響

2.用help()查看elapsed裏面的方法

import requests
r = requests.get("https://www.baidu.com")
help(r.elapsed)

elapsed裏面幾個方法介紹

  • total_seconds 總時長,單位秒

  • days 以天為單位

  • microseconds (>= 0 and less than 1 second) 獲取微秒部分,大於0小於1秒

  • seconds Number of seconds (>= 0 and less than 1 day) 秒,大於0小於1天

  • max = datetime.timedelta(999999999, 86399, 999999) 最大時間

  • min = datetime.timedelta(-999999999) 最小時間

  • resolution = datetime.timedelta(0, 0, 1) 最小時間單位

獲取響應時間

1.獲取elapsed不同的返回值

import requests
r = requests.get("http://www.cnblogs.com/yoyoketang/")
print(r.elapsed)
print(r.elapsed.total_seconds())
print(r.elapsed.microseconds)
print(r.elapsed.seconds)
print(r.elapsed.days)
print(r.elapsed.max)
print(r.elapsed.min)
print(r.elapsed.resolution)

技術分享圖片

2.網上很多資料寫的是用microseconds獲取響應時間,再除1000*1000得到時間為秒的單位,當請求小於1s時,發現不出什麽問題。如果時間超過1s,問題就來了。
(很顯然,大於1s的時候,只截取了後面的小數部分)

技術分享圖片

3.所以獲取響應時間的正確姿勢應該是:r.elapsed.total_seconds(),單位是s

timeout超時

1.如果一個請求響應時間比較長,不能一直等著,可以設置一個超時時間,讓它拋出異常

2.如下請求,設置超時為0.5s,那麽就會拋出這個異常:requests.exceptions.ConnectTimeout: HTTPConnectionPool

import requests
r = requests.get("http://cn.python-requests.org/zh_CN/latest/", timeout=1)
print(r.elapsed)
print(r.elapsed.total_seconds())
print(r.elapsed.microseconds)

技術分享圖片

python接口自動化20-requests獲取響應時間(elapsed)與超時(timeout)