• 0
  • 0
分享
  • python+pytest接口自动化之session会话保持
  • quinn 2022-11-30 08:49:36 字数 2618 阅读 1532 收藏 0

前言

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

一、session(会话)

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

开始:客户端(通常是浏览器)-->发送第一个请求-->某应用服务器,彼此成功建立连接,即创建会话;
会话中:客户端接着请求该应用服务器的其他资源;
结束:关闭客户端(通常是浏览器)或者会话超时,会话结束。

二、会话保持

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

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

  1. 客户端应用第一次请求该应用服务器时,服务器会创建一个session,该session对象中会存储特定的用户会话所需的属性及配置信息(如用户信息或登录状态等),并保存在服务器中。

  2. 创建session时,会赋予其一个session ID,该session ID会被置于set-cookie中随着请求返回给客户端,并保存在本地的cookie中。

  3. 后续,客户端请求本应用中其他资源时,服务器就会收到cookie中的session ID,并根据ID在内存中查找之前创建的session对象,如果能找到且未过期,则说明是来自同一户用的请求。

三、python进行session会话保持

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

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

注意:

  • 这里我先尝试请求登录接口构造session,然后再利用该session去请求其他接口,仍然提示需先登录,说明该网站此种方式行不通。

  • 因为登陆后跳转到了首页,所以这里我们可以利用请求首页接口构造session,然后就可以利用该session去请求其他接口了。

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

1.png

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)

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

2.png

 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中的。


作者:自动化测试七叔

原文链接:https://blog.csdn.net/qishuzdh/article/details/125340559

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   大家好,今天我们来探讨一个问题,这个问题可能会影响到大家的职业规划,也可能会影响到人员招聘时选人的方向,希望本文对大家有帮助。  我想大家一定都思考过或者疑惑过:技术、经验、业务这三方面,哪个更重要一些?  在软件开发过程中,不管是开发人员、测试人员还是产品经理,无论是谁都要面临这个问题。  但是,我先不下结论,我们先来弄清楚如下几个问题。  技术、经验、业务的范畴  1.技术  一说到技术,有的人会说了:C++、Java、python这些就是技术。  但是不完全对,实际上这些编程语言是实现技术方案的工具。我个人认为,编程语言语法、数据结构是属于技术的,但是编写的代码是否为更优,这就是属于...
            0 0 1450
            分享
          • 在 Vue 3 的 Composition API 中,采用了 setup() 作为组件的入口函数。在结合了 TypeScript 的情况下,传统的 Vue.extend 等定义方法无法对此类组件给出正确的参数类型推断,这就需要引入 defineComponent() 组件包装函数,其在 rfc 文档中的说明为:https://composition-api.vuejs.org/api.html#setup interface Data {   [key: string]: unknown }   interface&nbs...
            0 0 1049
            分享
          • 容器技术是目前热门话题之一,在许多互联网公司已有实际应用,对于测试者来讲需要我们主动迁移测试管理环境适应新变化。本文将介绍如何在CentOS 7 + Docker环境中部署和配置Testlink1.9 + Mantis。本次环境搭建操作系统选用互联网公司主流Linux系统CentOS7,容器环境选择Docker1.12。而Testlink想必测试人员都不算陌生,这是一款开源的web测试管理工具,它不仅提供了测试需求、测试设计、测试执行和测试结果分析的管理过程,而且还能和常见的Bug跟踪工具协同工作。本次我们将介绍Testlink和Mantis缺陷跟踪系统的集成,该工具很好的...
            0 1 3545
            分享
          • 在压力测试中,经常需要生成随机值来模拟用户行为。JMeter 提供了多种方式来生成随机值,本文来具体介绍一下。随机数函数JMeter 提供了多个用于生成随机数的函数,其中最常用的是__Random函数。该函数可以生成一个指定范围内的随机整数或浮点数。语法如下:${__Random(min,max)}其中,min 和 max 是生成随机数的范围,可以是整数或浮点数。例如,${__Random(1,100)} 会生成一个 1 到 100 之间的随机整数。以下是随机手机号最后 3 位数字的例子:查看传过去的数据:也可以用 BeanShell 来实现。添加前置处理器: BeanShell PrePro...
            0 0 3406
            分享
          •   Bug管理是指对开发、测试、设计等活动过程中出现的bug问题给予记录、审查、跟踪、分配、修改、验证、关闭、整理、分析、汇总以及删除等一系列活动状态的管理。  Bug会导致软件在运行时发生意料不到的故障,给企业带来损失,而软件测试的过程简单来说就是围绕bug进行的质量保证工作。为了提高测试工作效率,同时能够更高效的管理bug、提交bug、解决bug,合理的使用一些bug管理软件是非常有必要的。目前市场的bug管理软件有很多,小编特地整理了全球范围内几款好用的bug跟踪管理软件分享给大家!  首先是国内的bug管理软件:  禅道  禅道是第一款国产开源项目管理软件。它的核心管理思想基于敏捷方法...
            0 0 5480
            分享
      • 51testing软件测试圈微信