python在进行项目自动化测试过程中对于遇到的requests.request()和session().request()进行接口自动化的封装
1.requests.request()的用法
接口请求的方式有四种,get/post/put/delete
import request
requests.post('xxxxx') #请求服务器接受所指定的文档作为对所标识的URI的新的从属实体
requests.put('xxxxx') #客户端向服务器传送的数据取代指定的文档的内容
requests.delete('xxxxx') # 请求服务器删除指定的页面
request.get('xxxxxx') # 请求指定的页面信息,并返回实体主体。
注意: GET:请求将提交的数据放置在HTTP请求协议头中;POST:提交的数据则放在实体数据中
以上四种方式都可以使用一种方式替代
import requests
requests.request(mode,url='xxxx',headers='xxxx',data='xxx')
#mode 方式可以是post/get/put/delete
2.两者的区别
requests.request()的生命周期就是一次请求,当结果输出之后,request就结束了
而session的生命周期也是针对一个客户端,但是却是在别人设置的会话周期内(一般是20-30分钟),session里边的内容将一直存在,即便关闭了这个客户端浏览器 session也不一定会马上释放掉的。
场景举例:
(1)登录商城
(2)查询积分
这个涉及到两个接口,一个是登录接口一个是登录以后查询积分的接口,如果使用requests.request()是先拿到登录接口对应的cookie然后用于下一个接口的查询
常规用法(伪代码)
import requests
# 登陆接口
response1 = requests.get(url_login,params,headers)
# 获取cookies信息
cookies = response.cookies
# 得到的cookies 是一个字典类型
cookie = cookies.get("cookies的key")
# 请求 查询接口
response2 = requests.get(search_url,params,headers,cookies=cookie)
# 查看查询响应的结果
response2.json()
使用session代码如下(对于多个接口中会有关联cookies的一般推荐使用requests.session()):
# 以下代码纯为了举例,没有效果的伪代码
import requests
# 获取 session对象
session = requests.session()
# 登陆接口
response1 = session.get(url_login,params,headers)
# 请求 查询接口
response2 = session.get(search_url,params,headers)
# 查看查询响应的结果
response2.json()
区别:request占用资源比较少,安全性也比较高,可是相对来说缺乏持续性。
session则相对来说对资源的消耗会大点,安全性相对来说也会稍微低点,可是它能实现比如会话跟踪技术。如果可以使用request的情况下,尽量使用request 因为相对于服务器来说资源的消耗还是比较重要的。在传递页面过程中request传递到下一页面就不能再传递了,而sesison却不如此,即request仅限于2个相邻的页面,每按一个网页上的一个链接就是一个新的request,当服务器返回给浏览器一个response时,request就结束了,此时保存在request中的对象就不存在了,但是当你用一个浏器连到服务器上时application-server会新开一个session给你,当连接超时或浏览器关闭时session才销毁。所以session可以跟踪用户的状态。
session相当于是一个客户端的全局变量,
比如A机与服务器第一次访问时设置session.setAttribute("aaa")="ComputerA".则在A机继续访问的任意一个页面都可以取的session.getAttribute("aaa")的值是ComputerA;
request是某一次访问的局域变量,
生命周期只是一次请求。因此login的变量应该放在session中