——————·今天距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。

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

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

session

1

session介绍

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

2

session原理

  • 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。

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

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闪亮登场了。

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详解及应用

以上

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请求

快来星标 置顶 关注我

后台 回复资源取干货

回复2020与我共同成长

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

测试交流Q群:727998947

Python接口自动化之cookie、session应用相关推荐

  1. python接口自动化之cookie,session,token鉴权解决方案

    http协议:简单.快捷.无连接.无状态.多次请求之间是没有关联的,独立的. 一.cookie鉴权 1.什么是cookie? cookie是在服务器产生的存储在客户端的一小段文本信息,格式是字典,键值 ...

  2. Python接口自动化之动态数据处理

    VOL 135 15 2020-06 今天距2021年199天 这是ITester软件测试小栈第135次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  3. Python接口自动化之接口依赖

    VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  4. Python接口自动化之logging封装及实战

    VOL 124 15 2020-05 今天距2021年230天 这是ITester软件测试小栈第124次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  5. Python接口自动化之logging日志

    VOL 122 11 2020-05 今天距2021年234天 这是ITester软件测试小栈第122次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  6. Python接口自动化之pymysql数据库操作

    VOL 120 06 2020-05 今天距2021年239天 这是ITester软件测试小栈第120次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  7. Python接口自动化之yaml配置文件

    VOL 119 04 2020-05 今天距2021年241天 这是ITester软件测试小栈第119次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  8. Python接口自动化之数据驱动

    VOL 118 01 2020-05 今天距2021年244天 这是ITester软件测试小栈第118次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  9. Python接口自动化之登录接口测试

    VOL 117 29 2020-04 今天距2020年246天 这是ITester软件测试小栈第117次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

最新文章

  1. oracle存储过程的基本语法
  2. Android菜单详解——理解android中的Menu
  3. 【数据库】MySQL数据库(一)
  4. java定义final_Java中何时将方法声明为final的
  5. python sqlite3加密_sqlite3加密 - kjpioo的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. SQL Server数据文件迁移
  7. hibernate延迟加载(get和load的区别)(转)
  8. 十三水算法php_基于PHP+Redis令牌桶限流
  9. unity3d赛车游戏视频教程
  10. dxf转换html5,移动端CAD版本转换如何输出DXF格式-迅捷CAD转换器
  11. 生信常用分析图形绘制02 -- 解锁火山图真谛!
  12. bose蓝牙音箱使用说明_坚果蓝牙耳机说明书 坚果蓝牙耳机使用说明
  13. PhotoShop中蒙版介绍
  14. 2020智能营销领域最具商业合作价值企业盘点
  15. InnoDB下SQL执行底层原理和redolog、binlog
  16. 真机调试错误 Reason: image not found想到的
  17. 简述docx文档格式-CTF竞赛专用
  18. 访问网上计算机要输入密码,教大家访问电脑显示输入网络密码怎么办
  19. 一对一直播源码,一对一直播平台将普及我们的生活
  20. 前端云原生——微信小程序云服务配置

热门文章

  1. 无人驾驶(如何自己构建hdmap)
  2. 随想录(产品-工程开发-算法)
  3. 随想录(在实践中学习kernel代码)
  4. 从汇编的眼光看C++(之泛型编程)
  5. jq自动获取html的值,jquery如何获取class值?
  6. mysql 2003 10038_关于MySql10038错误的完美解决方法(三种)
  7. delphi 关闭时缩小到托盘_如何正确地缩小毛孔?
  8. tomcat 错误页面html,Nginx整合Tomcat后配置友好错误界面
  9. Leetcode PHP题解--D7 905. Sort Array By Parity
  10. Leetcode 每日算法一题*****#495. 提莫攻击