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

作者:自动化测试七叔 时间:2021-10-15 15:45:31 

前言

在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢?我们可以通过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

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

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

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对象
S = 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对象,查看个人通知消息、个人信息接口。

# 使用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)

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

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

 4、完整代码如下:

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对象
S = 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)

来源:https://blog.csdn.net/qishuzdh/article/details/125340559

标签:python,pytest,session,会话保持
0
投稿

猜你喜欢

  • 页面中横排布局的思考

    2008-01-18 12:56:00
  • Go语言sort包函数使用示例

    2023-10-15 03:29:59
  • js实现的捐赠管理完整实例

    2023-08-22 05:25:14
  • 清除浮动的最简写法

    2009-03-30 15:58:00
  • 如何编写一个只在Web服务关闭时执行的程序?

    2009-11-08 19:03:00
  • IE下float产生双倍margin

    2007-12-26 12:29:00
  • 基于Python OpenCV和 dlib实现眨眼检测

    2021-05-28 18:50:28
  • Python中的异常处理相关语句基础学习笔记

    2021-10-18 00:54:50
  • Bootstrap编写导航栏和登陆框

    2023-08-16 19:08:42
  • mysql基础教程:安装与操作

    2009-07-30 08:18:00
  • 解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码

    2011-06-06 10:29:00
  • python自动化实现登录获取图片验证码功能

    2022-09-21 13:23:59
  • Python中字符串的常见操作技巧总结

    2021-06-26 18:35:45
  • python中stdout输出不缓存的设置方法

    2023-03-08 10:23:15
  • MySQL 基本概念

    2011-09-10 16:22:34
  • 用ASP实现就MP3曲目信息的操作全攻略

    2008-05-28 12:42:00
  • python使用建议技巧分享(三)

    2021-07-07 06:58:16
  • IE8新特性及IE8安装使用 目录

    2008-04-01 09:50:00
  • 详解Python实现图像分割增强的两种方法

    2022-08-16 20:23:50
  • Python3.x爬虫下载网页图片的实例讲解

    2022-11-25 23:24:07
  • asp之家 网络编程 m.aspxhome.com