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