Python接口自动化之cookie、session应用详解

 更新时间:2021年08月24日 14:09:03   作者:软件测试自动化测试  
本文主要介绍cookie、session原理及在自动化过程中如何利用cookie、session保持会话状态的应用,有需要的朋友可以参考下,希望可以有所帮助

在上一篇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())

到此这篇关于Python接口自动化之cookie、session应用详解的文章就介绍到这了,更多相关Python接口自动化cookie、session应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于CUDA out of memory的解决方案

    关于CUDA out of memory的解决方案

    这篇文章主要介绍了关于CUDA out of memory的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 图文详解Python中最神秘的一个魔法函数

    图文详解Python中最神秘的一个魔法函数

    Python进阶之路我觉得有两个东西一定要了解,一个是魔法函数,下面这篇文章主要给大家介绍了关于Python中最神秘的一个魔法函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • Pandas分组函数groupby的用法详解

    Pandas分组函数groupby的用法详解

    在数据分析时,经常需要将数据分成不同的群组,pandas中的groupby()函数可以完美地完成各种分组操作,本文就来介绍一下Pandas分组函数groupby的用法,感兴趣的可以了解一下
    2024-01-01
  • python3.6的venv模块使用详解

    python3.6的venv模块使用详解

    这篇文章主要介绍了python3.6的venv模块使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • python 实现多维数组(array)排序

    python 实现多维数组(array)排序

    今天小编就为大家分享一篇python 实现多维数组(array)排序,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python练习之操作MySQL数据库

    Python练习之操作MySQL数据库

    这篇文章主要介绍了Python练习之操作MySQL数据库,文章通过如何创建MySQL数据表?如何向MySQL表中插入数据?如何查询MySQL中的数据?的三个问题展开了详细的内容介绍
    2022-06-06
  • Python实现的计算器功能示例

    Python实现的计算器功能示例

    这篇文章主要介绍了Python实现的计算器功能,涉及Python四则运算、取反、百分比等相关数学运算操作实现技巧,需要的朋友可以参考下
    2018-04-04
  • 详解python变量与数据类型

    详解python变量与数据类型

    这篇文章主要介绍了python变量与数据类型的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • Python爬虫模拟登录带验证码网站

    Python爬虫模拟登录带验证码网站

    这篇文章主要介绍了Python爬虫模拟登录带验证码网站的相关资料,需要的朋友可以参考下
    2016-01-01
  • Python并发:多线程与多进程的详解

    Python并发:多线程与多进程的详解

    今天小编就为大家分享一篇关于Python并发:多线程与多进程的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论