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

本文介绍了如何在接口测试中使用session保持登录状态,包括session的概念、原理以及在Python的requests库中实现的具体步骤,以TesterHome网站为例,展示了如何构造session并利用它访问需要登录的接口。
摘要由CSDN通过智能技术生成

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

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)

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

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)

总结
session与cookie是不同的机制。

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

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

两者之间存在联系:session会话保持机制需要依赖cookie,因为session ID是存储在cookie中的。
 最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值