Python+pytest接口自动化之session会话保持的实现

前言

在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢?我们可以通过Cookie绕过登录,其实这就是保持登录状态的方法之一。那么今天笔者想讲通过session进行会话保持。

一、session(会话)

session,即会话。那么什么又是会话?我们来看一下会话的生存周期就能大致明白,如下:

开始:客户端(通常是浏览器)-->发送第一个请求-->某应用服务器,彼此成功建立连接,即创建会话;

会话中:客户端接着请求该应用服务器的其他资源;

结束:关闭客户端(通常是浏览器)或者会话超时,会话结束。

二、会话保持

会话保持,可以通俗的理解为使同一用户发送的相关联的请求处于同一个会话中不被断开。比如使用session成功地登录了某个网站,则在再次使用该session对象请求该网站的其他网页时,都会默认使用该session中之前保存的cookie等参数去请求,而不需要再次登录。

session会话保持大致原理如下:

  • 客户端应用第一次请求该应用服务器时,服务器会创建一个session,该session对象中会存储特定的用户会话所需的属性及配置信息(如用户信息或登录状态等),并保存在服务器中。
  • 创建session时,会赋予其一个session ID,该session ID会被置于set-cookie中随着请求返回给客户端,并保存在本地的cookie中。
  • 后续,客户端请求本应用中其他资源时,服务器就会收到cookie中的session ID,并根据ID在内存中查找之前创建的session对象,如果能找到且未过期,则说明是来自同一户用的请求。

三、python进行session会话保持

在接口自动化测试中,某些情况下可以使用session会话保持机制来保持登录状态,这样就不需要每次清求接口都需要先登录。

接下来,我们以查看TesterHome网站上个人的通知消息、个人信息为例,来说明在python接口自动化测试中怎样利用session保持登录状态。

注意:

  • 这里我先尝试请求登录接口构造session,然后再利用该session去请求其他接口,仍然提示需先登录,说明该网站此种方式行不通。
  • 因为登陆后跳转到了首页,所以这里我们可以利用请求首页接口构造session,然后就可以利用该session去请求其他接口了。

1、首先,Fiddler抓包获取登录成功后请求首页接口时的cookie

 2、拿到cookie,利用请求首页接口构造session对象。

1

2

3

4

5

6

7

8

9

10

11

12

13

import requests

  

headers = {

    "user-agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",

    "cookie"'如上面截图所示获取的cookie,即登录成功后跳转时,请求首页接口https://testerhome.com/时的cookie'

}

  

# 构造一个全局session对象

= requests.session()

  

# 使用session对象即S模拟登录成功后请求首页接口,更新S

h_url = "https://testerhome.com/"

h_res = S.get(url=h_url, headers=headers).text

这一步会得到的session对象S中就包含了登录成功后的cookie等信息了,再使用该session对象去请求其他接口就不需要再次登录了。

3、使用上一步得到的session对象,查看个人通知消息、个人信息接口。

1

2

3

4

5

6

7

8

9

# 使用session对象S请求个人通知消息接口

n_url = "https://testerhome.com/notifications/personal"

n_res = S.get(url=n_url).text

print(n_res)

  

# 使用session对象S请求个人信息接口

s_url = "https://testerhome.com/setting"

s_res = S.get(url=s_url).text

print(s_res)

请求个人信息接口,执行结果如下:

4、完整代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import requests

  

headers = {

    "user-agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",

    "cookie"'如上面截图所示获取的cookie,即登录成功后跳转时,请求首页接口https://testerhome.com/时的cookie'

}

  

# 构造一个全局session对象

= requests.session()

  

# 使用session对象即S模拟登录成功后请求首页接口,更新S

h_url = "https://testerhome.com/"

h_res = S.get(url=h_url, headers=headers).text

  

# 使用session对象S请求个人通知消息接口

n_url = "https://testerhome.com/notifications/personal"

n_res = S.get(url=n_url).text

print(n_res)

  

# 使用session对象S请求个人信息接口

s_url = "https://testerhome.com/setting"

s_res = S.get(url=s_url).text

print(s_res)

总结

session与cookie是不同的机制。

相同点:两者都能记录用户的状态,且都是由服务端生成。

不同点:cookie是存储在本地客户端的,而session则存储在服务端。

两者之间存在联系:session会话保持机制需要依赖cookie,因为session ID是存储在cookie中的。

  感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

衡石分析平台系统分析人员手册-导入图表库图表

导入图表库图表​ 本文讲述在仪表盘中如何使用图表库图表,如果您还不了解图表库,请先点击链接了解它的功能和作用。 在数据集市中建立图表库后,分析人员可以在应用创作中引用图表库图表,快速的进行数据分析工作。 导入图表库图…

java第三天(游戏开发)

学到 双缓存机制 public void paint(Graphics g) {// super.paint(g);//createImage(width, height) 是一个方法调用,它创建了一个指定宽度和高度的空图像缓冲区。这个方//法可以在 Component 类中找到,因此任何从 Component 继承的类(比…

Unix:Linux的“祖师爷”

目录 Unix的诞生 Unix对Linux的深远影响 Unix与Linux区别在哪里? Unix的诞生 Unix操作系统诞生于1969年,由肯汤普逊(Kenneth Lane Thompson)和丹尼斯里奇(Dennis MacAlistair Ritchie)在AT&T的贝尔实…

牛客周赛 Round 65

文章目录 超市思路:Solved: 雨幕思路:Solved: 闺蜜思路:Solved: 医生思路:Solved: 降温(easy)思路:Solved: F-降温(hard&a…

iOS Swift逆向——被编译优化后的函数参数调用约定修复

头文件导入: typedef long long s64; typedef unsigned long long u64;typedef s64 Int; typedef u64 Bool;struct Swift::String {u64 _countAndFlagsBits;void *_object; };union Swift_ElementAny {Swift::String stringElement; };struct Swift_Any {Swift_Ele…

前端算法:树(力扣144、94、145、100、104题)

目录 一、树(Tree) 1.介绍 2.特点 3.基本术语 4.种类 二、树之操作 1.遍历 前序遍历(Pre-order Traversal):访问根节点 -> 遍历左子树 -> 遍历右子树。 中序遍历(In-order Traversal&#xf…

Spring Web MVC 入门

1. 什么是 Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从从⼀开始就包含在Spring框架中。它的 正式名称“SpringWebMVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". 什么是Servlet呢? Ser…

错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘

这个错误提示说明在提交时某个文件的大小超过了 Gitee 仓库的单文件大小限制(100MB)。你需要从Git 历史中彻底移除这个大文件,否则无法推送到远程仓库。 解决步骤 1. 确认大文件信息 使用以下命令找出超过限制的大文件: git re…

Oracle OCP认证考试考点详解082系列01

题记: 本篇博文是Oracle OCP认证考试考点详解082系列的第一篇,本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 1. 第一题: 1. 题目 2. 解析及答案 关于Oracle数据库中节…

映射问题的解决办法(mybaitis)

最初我用的是注解来操控数据库&#xff08;注释掉的部分&#xff09; Mapper public interface ThreadMapper {// Select("SELECT * FROM thread LIMIT #{page}, #{size}")List<Thread> getListByPage(Param("page") int page, Param("size&qu…

网络安全证书介绍

网络安全领域有很多专业的证书&#xff0c;可以帮助你提升知识和技能&#xff0c;增强在这个行业中的竞争力。以下是一些常见的网络安全证书&#xff1a; 1. CompTIA Security 适合人群&#xff1a;初级安全专业人员证书内容&#xff1a;基础的网络安全概念和实践&#xff0c…

嵌入式学习-网络-Day03

嵌入式学习-网络-Day03 1.linux下IO模型及特点 1.1阻塞式IO 1.2非阻塞式IO 设置非阻塞&#xff1a; 1&#xff09;通过函数参数设置 2&#xff09;通过fcntl函数设置文件描述符属性 1.3信号驱动IO&#xff08;异步IO&#xff09; 1.4IO多路复用&#xff08;重点&#xff09; IO…

【Qt】QTableView添加下拉框过滤条件

实现通过带复选框的下拉框来为表格添加过滤条件 带复选框的下拉框 .h文件 #pragma once #include <QCheckBox> #include <QComboBox> #include <QEvent> #include <QLineEdit> #include <QListWidget>class TableComboBox : public QComboBox …

云渲染渲染100怎么使用?

下载安装步骤&#xff1a; 访问官方网站下载客户端&#xff1a; 请访问渲染100官网&#xff1a;云渲染_性价比更高的3D云渲染平台_渲染100【官网】&#xff0c;并点击“客户端下载”按钮。 安装程序&#xff1a; 下载完成后&#xff0c;双击安装文件进行安装。在安装过程中&am…

数据挖掘(一)

数据挖掘&#xff08;一&#xff09; 文章目录 数据挖掘&#xff08;一&#xff09;亲和性分析示例分类问题的简单示例完整实例 数据挖掘旨在让计算机根据已有数据做出决策。决策可以是预测明天的天气、拦截垃圾邮件、检测网站的语言&#xff0c;或者在约会网站上发现新的恋爱对…

StarRocks数据库在SQL语句中解析JSON字符串

StarRocks数据库在SQL语句中解析JSON字符串 -- 使用数据库 use sr_test; -- 删除表 drop table ts_usr; -- 创建表 CREATE TABLE ts_usr ( uid bigint NOT NULL COMMENT "用户id", uname varchar(64) NULL COMMENT "用户名", ujson varchar(1024) NULL CO…

监控易FAQ:批量新增监测点和设备

FAQ概览&#xff1a; 批量新增监测点流程&#xff1a;下载模板、填写信息及上传验证批量新增设备指南&#xff1a;选模板、填关键信息、注意上传细节接口信息与名称填写建议&#xff1a;特定监测项手动选择&#xff0c;避免批量添加新功能亮点&#xff1a;设备智能分类与核心使…

css隐藏元素滚动条

Chrome和Safari浏览器 使用CSS滚动条选择器&#xff0c;然后设置display&#xff1a;none隐藏它&#xff1a; ::-webkit-scrollbar {display: none; /* Chrome Safari */ }Firefox浏览器 将滚动条宽度设置为none&#xff1a; scrollbar-width: none; /* Firefox */IE浏览器…

记录运维大屏监控平台的开发、springboot实现服务器性能监测分析系统

1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a;windows 7…

OpenGL摄像机

摄像机类是基于坐标系统实现的&#xff0c;有关坐标系统&#xff1a;坐标系统。 摄像机基类 .h #ifndef QTOPENGL_CAMERA_H #define QTOPENGL_CAMERA_H#include<QMatrix4x4> #include <vector> #include <QOpenGLShaderProgram>#define PI 3.1415926535897…