fiddler 自动响应数据保存_Python接口自动化之cookie、session应用

——————·今天距2021年260天·——————

这是ITester软件测试小栈第112次推文

在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请求,介绍了post源码,data、json参数应用场景及实战
以下介绍cookie、session原理及在接口自动化中的应用。

HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。

如果我们测试的接口有依赖关系怎么办呢(比如购物支付时,需要先登录),这时我们就要用到cookie和session技术来保持客户端与服务器端连接的状态。

cookie

1 cookie介绍

cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。

2 cookie原理

① Cookie技术会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。

839cc8babf0bcb7cd39a4b4f41b1f261.png

② 客户端再向服务器端发送请求的时候,客户端会在请求报文中加入Cookie值后发送出去。服务器端会检查客户端发送的请求中有没有Cookie值,然后对比服务器上的记录,最后确定是哪一个客户端,之前的信息状态是什么。

413a85574b5bb7cb10d7ea7c999939cf.png413a85574b5bb7cb10d7ea7c999939cf.png

这样一来,服务器就能够分辨出发送请求的客户端究竟是哪一个了。

session

1 session介绍

session是一种在服务端记录用户信息的技术,是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制。它是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库或者集群中。

2 session原理

5952f6694f809447f4642289e0f58fc3.png

  • Session是存放在服务器端、用来存放用户数据的(类似于HashTable结构)。

  • 当浏览器第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。

  • 当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable,以此来达到共享数据的目的。

cookie和session区别

1. 存储位置不同:Cookie是将用户数据通过加密的方式保存在客户端,大多数情况Cookie存储在浏览器;Session是用于控制客户端和服务端的连接,Session存储在服务器;

2. 存储容量不同:单个Cookie保存的数据不得超过4kb,一个站点最多20个Cookie,Session一般情况下没有上限,不过建议不要存放太多东西,否则影响性能;

3. 存取方式不同:Cookie只能用ASCII字符串,通过编码方式获取Unicode字符或者二进制数据,不好存储复杂的信息,而Session能存储任何类型的数据;

4. 隐私策略/安全性不同:Cookie放在客户端,可以进行Cookie欺骗,所以不安全,Session放在服务端,更加安全;

5. 有效期不同:Cookie可以设置属性达到长期有效,Session依赖于JSESSIONID的Cookie,Cookie JSESSIONID的过期时间默认为-1,只需要关闭窗口Session就会失效,就算不依赖Cookie,用UrL重写也不能完成,如果Session超时时间过长,容易导致内存溢出;

6. 服务器压力不同:Cookie保存在本地,不存在服务端压力,Session保存在服务端,每个用户产生一个Session,当访问增多,会比较占用服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用Cookie。

77c9a10bc4d0df6b1008bbd1375ad9ab.gif

 现在有登录、充值两个接口,在未登录时,直接调用充值接口。

import requests
url = 'http://127.0.0.1:8000/recharge'
payload = {
    "mobilephone":"1530272****",
    "amount":100
}
recharge_res = requests.post(url,data=payload)
print(recharge_res.json())

请求结果:提示请先登录。

{'status': 0, 'code': None, 'data': None, 'msg': '抱歉,请先登录。'}

这时候,今天的主角cookie和session闪亮登场了。

0acdef691164f0d66c73875c737d3ad5.png

cookie应用

import requests

# 登录接口
url = 'http://127.0.0.1:8000/user/login'
payload = {
    "mobilephone":"1530272****",
    "pwd":"123456"
}
login_res = requests.post(url,data=payload)
print(login_res.json())
# 获取响应结果的cookies
cookies = login_res.cookies
print(cookies)

# 充值接口
url = 'http://127.0.0.1:8000/recharge'
payload = {
    "mobilephone":"1530272****",
    "amount":100
}
# 充值接口请求时携带cookies
recharge_res = requests.post(url,data=payload,cookies=cookies)
print(recharge_res.json())

session应用

import requests

# 登录接口
url = 'http://127.0.0.1:8000/user/login'
payload = {
    "mobilephone":"1530272****",
    "pwd":"123456"
}
# 创建session会话管理
session = requests.session()
login_res = session.post(url,data=payload)
print(login_res.json())

# 充值接口
url = 'http://127.0.0.1:8000/recharge'
payload = {
    "mobilephone":"1530272****",
    "amount":100
}
recharge_res = session.post(url,data=payload)
print(recharge_res.json())

总结:本文主要介绍cookie、session原理及在自动化过程中如何利用cookie、session保持会话状态。

下一篇:python自动化测试-token详解及应用

594910bd775ef797d17b99cbf54afd87.png

以上 That‘s all 更多系列文章 敬请期待 ITester软件测试小栈 往期内容宠幸 1.Selenium系列文章汇总

2.Fiddler基本使用


3.Fiddler抓包介绍


4. Fiddler请求过滤

5.Fiddler设置断点(一)


6.Fiddler跨域调试及Django跨域处理


7.Python接口自动化-接口基础(一)


8.Python接口自动化-接口基础(二)


9.Python接口自动化-requests模块之get请求


10.Python接口自动化-requests模块之post请求

0597b710b1030b0ce31e653b03a9fa01.png

快来星标 置顶 关注

 后台182dc78f7665cb58004e0406e0d5b0b1.png 回复 资源 取干货 回复2020与我共同成长

db9ed3d3dd68cb0cef492371720b959c.gif

7e73d86e12509c62722cd23792d5c8e4.png

db9ed3d3dd68cb0cef492371720b959c.gif

c1274d663f212572e9ae46903713658f.gif

想要获取相关资料和软件 ?

测试交流Q群:727998947

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值