*****************************************************************************************************************************************************************************************************************
面试时,面试官问我:自动化中,只需要登录一次,就可以跑其他的自动化用例。这个用什么方法。
目前公司项目自动化中实现方式:调登录接口并传入登录用户名和加密的密码来获取响应数据中的token值。后续的自动化用例再去调接口的话,就只需要在请求头中把获取到的token值携带上,就可以调接口成功;
但貌似这种方式并不是面试官想得到的答案。于是上网查资料,发现requests库中的 session对象,是此题的答案。于是本次学习和记录一下 requests中的session对象。
**************************************************************************************************************************************************************************************************************************************************
1、先看一个别人写的博客(博客地址:https://www.jianshu.com/p/adc2f76530d1)
requests
使用上其实很简单,可以直接通过 request.get() 的方式去操作。但如果对需要处理的对象发送请求比较频繁,或者需要登录。使用requests.session() 来操作其实更方便高效。
下面进行抓包测试。
*客户端ip 192.168.224.1
*服务端ip 192.168.224.133
192.168.224.133:30000 为测试环境搭建tornado服务,照着tornado官网的例子写的。
客户端代码如下
import requests
def use_each():
# 两次调用get请求
resp = requests.get(url='http://192.168.224.133:30000/test')
print(resp.json())
resp = requests.get(url='http://192.168.224.133:30000/test')
print(resp.json())
if '__main__' == __name__:
use_each()
可以看到两次get请求,抓包结果分别建立了两次TCP握手,两次挥手。客户端每次挥手势必都会等待2MSL后才彻底断开连接。
重新调整代码为session方式
import requests
def use_session():
_session = requests.session()
resp = _session.get(url='http://192.168.224.133:30000/test')
print(resp.json())
resp = _session.get(url='http://192.168.224.133:30000/test')
print(resp.json())
if '__main__' == __name__:
use_session()
两次get请求只建立了一个tcp通信信道,对同一个后端服务进行请求上明显效率更高。
查看源码可以看到requests会尝试去获取了一个poolmanager。
持有当前连接对象后再通过socket发送数据。
2、session对象学习
2.1、从上述的博客中,大概看到两个重点信息:(1)通过创建的session对象来调接口进行请求,相对是在客户端和终端建立一个通道,后续的各请求都是走此通道(而像目前公司自动化项目的实现方式,相当的于每次调接口,都建立一次连接),session的这种方式能够提高执行的效率、减少了连接的资源。(2)requests会尝试去获取了一个poolmanager
2.2、那通过登录接口返回的token值,来调其他的接口这种方式,和 session对象调接口的方式有什么不同呢?
2.3、 另外,如果登录接口中,用户名的密码是加密的,那需要先将密码加密,再使用session 对象来调登录接口
2.4、sesion 方式调用接口时,需要根据不同接口的请求头参数不同,来传递不同的请求头参数
2.5、实际操作。。。。。。。。。。。。。。。。。。。。。。
标签:__,get,python,resp,接口,session,requests From: https://www.cnblogs.com/ccnn9/p/17794466.html