Requests17--接口关联-Cookies
什么是关联接口
①多个接口之间存在依赖关系
<1>让你测试登录成功后的页面,登录成功不是你测
<2>让你测试退单(取消订单)接口,但是下单不是你测
<3>业务流程测试:测试下单后,退单功能正确性
HTTP无状态
是指协议对于交互性场景没有记忆能力
<1>上一个网页的数据,只传递一次给下一个网页(接口传参),之后数据丢失
HTTP无状态的例子
点击一个纯html网页多次,服务器会不会认为是同一人访问多次,还是认为是不同的人来访问
登录一个购物网站,然后选择商品到购物车,登录成功以后,服务器就忘记了这个用户,选择商品到购物车时,服务器不知道是谁在选择商品,实际开发中,会通过很多方法来解决HTTP无状态的问题,就是会话保持问题
http无状态解决方案
<1>cookie/cookies
2>在客户端存储数据,用于在多个网页/接口间共享数据
3>网页中“记住账号和密码”,很多都是使用了cookie
<2>session(会话)
1>在服务器存储数据,用于在多个网页/接口间共享数据
2>登录之后,一直保持在线状态,很多时候使用了session
<3>cookie和session也可以混合使用
如何关联登录接口/保持会话/会话保持
①给登录接口发送请求,获得响应头,在响应头中获得set-cookie(其中存着会话编号sessionid),取出来要关联的值(比如sessionid)
<1>res1=requests.post(被依赖url)
<2>res1.cookies用于获得前一个接口(服务器)发给客户端的cookie值
②给被测接口发请求,将上一步的关联值当做参数(很多时会放在请求头的cookie中)发过去
<2>res=requests.post(被测url, cookies=上一接口的cookie值)
requests.get(url, cookies)
cookie的含义
cookie有时也用其复数形式cookies
类型为“小型文本文件”,是某些网站为了辨别用户身份,进行会话跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
win10中的cookies位置(每人电脑不同,系统不同,存放位置也不同)
IE浏览器:%APPDATA%\Microsoft\Windows\Cookies\ 目录中的xxx.txt文件 (IE浏览器分开存放的)。
火狐浏览器:%APPDATA%\Mozilla\Firefox\Profiles\ 目录中的xxx.default目录,名为cookies.sqlite的文件。
谷歌浏览器:%LOCALAPPDATA%\Google\Chrome\User Data\Default\ 目录中,名为Cookies的文件。
cookie是解决HTTP无状态问题的一种方法
cookie的使用机制
cookie的生成
服务器通过在HTTP 的响应头中附加一些信息,提示浏览器生成相应的 cookie
纯粹的客户端脚本如 JavaScript 或者 VBScript也可以生成 cookie
在响应头中,一般使用Set-Cookie来存储服务器发来的cookies
cookie的使用
浏览器按照一定的原则把需要的cookie附在请求资源的 HTTP 请求头上自动发送给服务器
在请求头中,一般使用Cookie存储发送给服务器的cookies,以保持会话
抓取Cookies
接口需求
目的:使用CHarles手动抓包,查看接收和发送的cookies
接口地址:http://192.168.175.128:8000/login_action/
接口说明:登录
方法:post
参数:username,password

response.cookies
requests响应对象的cookies属性中存储着cookies,
获取响应中的cookies,cookies实际上在响应头中,如果响应头中没有cookie,则r.cookies为空,需要设置post方法的allow_redirects=False,
如果接口存在自动重定向,则响应头中的cookies为空,或者说接口跳转后cookies就不存在了,r.cookies是RequestsCookieJar对象,
可直接当做字典使用,也可使用dict(r.cookies)直接输出易读的字典
## 查看响应中的cookies
"""
查看响应中的cookies
接口需求
接口地址:http://192.168.139.137:8000/login_action/
接口说明:登录接口
方法:post
参数:username,password
"""
import requests
url = 'http://192.168.139.137:8000/login_action/'
data = {'username':'admin','password':'admin123456',}
r = requests.post(url,data,allow_redirects=False)
print(r.cookies)
本文来自博客园,作者:暄总-tester,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15513508.html

浙公网安备 33010602011771号