前言
requests發請求時,接口的響應時間,也是我們需要關注的一個點,如果響應時間太長,也是不合理的。
如果服務端沒及時響應,也不能一直等着,可以設置一個timeout超時的時間
關於requests請求的響應時間,官網上沒太多介紹,並且我百度搜了下,看很多資料寫的是r.elapsed.microseconds獲取的,然而都是錯的!!!
elapsed官方文檔
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.如下請求,設置超時為1s,那么就會拋出這個異常: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接口自動化完整版-------------------------
全書購買地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695
作者:上海-悠悠 QQ交流群:588402570
也可以關注下我的個人公眾號: