requests發請求時,接口的響應時間,也是我們需要關注的一個點,如果響應時間太長,也是不合理的。
如果服務端沒及時響應,也不能一直等着,可以設置一個timeout超時的時間
具體的實現如下:
超時(默認單位:s):
timeout=0.5:設置到不大於0.5s的超時時間
timeout=(0.5,0.8):設置區間時間的等待
當出現超時時,則會拋出此異常:requests.exceptions.ConnectTimeout: HTTPConnectionPool
獲取響應時間:
r.elapsed.total_seconds()
#-*- coding:utf-8 -*- import requests from requests import exceptions try: #timeout=0.1 ,timeout=(0.5,0.8) r = requests.post(url=url, data=data, headers=headers, verify=False, timeout=0.5)
r.elapsed.total_seconds() #獲取實際的響應時間
print r.json()
except exceptions.Timeout as e:
print("拋出異常")
進階:
如需要統一所有的測試接口的超時時間都可設置一致的話,那么只需要將timeout添加到配置文件中,統一進行管控即可,在測試的接口中timeout直接給定參數,那么在后期的更改timeout的超時時間,只在配置文件中更改即可。如果timeout的超時時間不需要那么的統一,則只需在每個請求的接口中寫即可。
示例:
(1)在 host_header.yaml 的配置文件中添加timeout
########################## 測試環境,通用的headers配置 ###################################### #請求接口的url的域名
host: https://testapp.goodiber.com/v2/ #dev1的測試環境域名
#請求接口的請求頭中的共用參數
headers: "version": "2.3.0"
"version-id": "238"
"os": "ios"
"sign": "123456"
"is-test": "1"
#設置的超時時間
timeout: 10
(2)在使用的py文件,login.py 文件中調用即可。
import yaml import sys,os import json # 導入yaml中的host
reload(sys) sys.setdefaultencoding("utf-8") root_path = os.getcwd()[:-5] with open(root_path + "/Config/host_header.yaml", 'rb') as f: data = yaml.load(f) host = data["host"] timeout = data["timeout"] .....前面的url、headers的編寫此處省略 r = requests.post(url=url, data=data, headers=headers, verify=False,timeout = timeout) #直接給定timeout參數即可 get_reponse = r.json() # 獲取到reponse返回的所有內容
result = json.dumps(get_reponse, encoding="utf-8", ensure_ascii=False) #將獲取到的reponse中的中文已utf-8的格式顯示。否則顯示Unicode