Python接口自动化之cookie、session应用详解
作者:软件测试自动化测试 发布时间:2023-02-02 11:10:35
在上一篇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())
来源:https://blog.csdn.net/ZangKang1/article/details/119042865


猜你喜欢
- 该计算器功能:1.校验:小数点,重复计算,以及大量更符合用户体验的操作。2.能够从键盘输入。效果图:html代码:<!DOCTYPE
- 在安装MySQL时遇到几个问题,网上查找的答案大同小异,并没有很好的解决我的问题,完成之余记录下来方便以后查看。1.官网下载8.0.16版本
- mysql存储过程delimiter $DROP FUNCTION IF EXISTS `fun_convert`$CREATE DEFIN
- 前述VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有
- lstm(*input, **kwargs)将多层长短时记忆(LSTM)神经网络应用于输入序列。参数:input_size:输入'x
- 地理图表什么是地理图表?地理图表有什么作用?地理图表主要应用在那些领域?其实这些问题看看下面的实例图形就已不攻自破了,地理图表一看首先就是地
- 前言本文中代码运行的python版本一律采取2.7.13科普:经典类:classic class新式类:new-style classpyt
- 本文是利用python 复制文件夹 刚开始写了一个普通的递归复制文件夹 然后想了想 觉得对io频繁的程序 thre
- 检测这些圆,先找轮廓后通过轮廓点拟合椭圆import cv2import numpy as npimport matplotlib.pypl
- 多值运动,也就是对于某个对象来说,不仅仅只是其中一个属性值在变化,而是好多个,比如宽,高,字体,透明度等等同时变化当然了,多值运动会产生一个
- os即operating system(操作系统),Python 的 os 模块封装了常见的文件和目录操作。os.path模块主要用于文件的
- 1. 目标通过hadoop hive或spark等数据计算框架完成数据清洗后的数据在HDFS上爬虫和机器学习在Python中容易实现在Lin
- 最简单的实现一个队列至少满足2个方法,put和get.借助最小堆来实现.这里按"值越大优先级越高"的顺序.#coding
- 1 环境操作系统:Windows 10Python版本:3.9.0Google Chrome 87.0.4280.88
- web 调试工具介绍和开发环境搭建python与selenium开发环境搭建:一、下载python软件:https://www.python
- 在使用opencv显示图像时,有时候需要显示多张图像,就会出现多个窗口,显得冗余,用户不好操作。这时候就想着能不能将这些图像在一个窗口中显示
- 修改/etc/my.cnf或者/etc/mysql/my.cnf文件[client]default-character-set = utf8
- 相信大家都用过 jupyter,也用过里面的魔法命令,这些魔法命令都以 % 或者 %% 开
- 一、前言假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作。比如说应用到我们之前的音乐高潮提取
- 运行下面两个命令,即可把 Vim(含插件)配置成 Python IDE。目前支持 MAC 和 Ubuntu。curl -O https://