接口测试之requests中的会话

news2024/9/25 19:14:01

requests中的会话

之前的例子中,我们都是单独调用接口或解析响应,

但在实际应用场景中,我们往往会需要连续调用一些接口。

比如:

1.先登录

2.再做一些操作

3.最后登出

就像我们在浏览器中对网页做操作一样,requests 也可以模拟这些操作的步骤。

在开始之前,我们简单了解下浏览器是怎样做到这些事情的,为什么我们在浏览器里登录了某个网站之后,这个网站就知道我们后续的操作都是在这个刚刚登录的账号里做的呢?


Cookies和Session

这里有两个概念,一个是cookies, 一个是session。

Cookie 或者 Cookies 是 Web 服务器保存在用户浏览器上的小文本文件。它可以包含有关用户的信息,比如用户名、甚至加密后的密码之类的信息。这样,当我们再次使用这个浏览器访问这个服务器时,服务器可以直接读取这些信息,而无需用户再次输入。

Session,称为会话,用户通常会在服务器提供的网页之间进行跳转来访问不同的页面,服务器对一个用户创建一个 Session 对象,存放在服务器端,这样服务器就知道这个用户是谁了。session 里也可以存放用户名等信息。

Session 一般是会过期自动终止的,毕竟服务器端资源有限,一段时间不操作,很多网站就会自动删除你的session,这时你再做操作,网站会提示你重新登录。而有些网站在提示你重新登录时,页面上还会显示“欢迎,某某某”这样的字样,因为这后面的用户名它很可能是存在了你的浏览器 cookies 里,所以你重新操作时,网页还是知道你的用户名,毕竟 cookies 是不会自动被删除的,顺带一提,cookies 是保存在客户端,所以我们是可以设置要不要保存 cookies的,很多网站都设置了如果不保存 cookies 将提示你无法使用该网站。


requests 中的cookies

在 requests 中,响应和请求里都有 cookies 功能。

如果某个响应中包含一些 cookie,你可以快速访问它们(以下例子可以在交互模式中运行):

>>> url = 'http://example.com/some/cookie/setting/url' 
>>> r = requests.get(url) 
>>> r.cookies['example_cookie_name'] 
'example_cookie_value' 


要想发送你的cookies到服务器,可以使用 cookies 参数:

>>> url = 'http://httpbin.org/cookies' 
>>> cookies = dict(cookies_are='working') 
>>> r = requests.get(url, cookies=cookies) 
>>> r.text 
'{"cookies": {"cookies_are": "working"}}' 

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

>>> jar = requests.cookies.RequestsCookieJar() 
>>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies') 
>>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere') 
>>> url = 'http://httpbin.org/cookies' 
>>> r = requests.get(url, cookies=jar) 
>>> r.text 
'{"cookies": {"tasty_cookie": "yum"}}' 

requests 中的会话

在 requests 中,也有会话的概念,这里只是借用了 session 这个名词,但其实,和服务器端的 session 并不同。reqeusts 是模拟客户端的工具,显然不可能用它来模拟服务端的会话。但是,我们也不想像上面的 cookies 例子一样,去手动在一系列请求和响应之间传递 cookies。


requests 的 session 就帮助我们把这变成了自动的。

例1. requests 中会话的例子

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

这个例子中:

第二行创建了一个 reqeusts 会话,

第三行使用 get 访问了一个网址,这个 get 请求使服务端创建了一个服务端的 session 对象,并且这个网址的作用是把服务端的 session 内容返回给用户。(见任务1的第一小题)

第四行用户 get了 另一个网址,服务器返回了一个 "sessioncookie": "123456789" 的 json数据。这个数据恰恰是第三行的返回值,这说明服务端正确地记住了我们。

任务1. 我们来做一个小练习加深一下印象。

1. 打断点观察例1中的第三行给出的响应内容。(你可以在第三行前加一个r = 然后断点观察 r 的值)

2. 去掉例1中的第三行,观察运行例1的结果变化。

利用这个会话功能,我们可以做很多事情。比如,用requests登录一个网站,在网站上做一些操作,抓取一些数据,然后登出。可以说我们以前用 selenium 之类图形化自动化库做的事情,大多数都可以通过接口来做啦。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 全套资料获取方式:点击下方小卡片自行领取即可

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

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

相关文章

Spark编程-SparkSQL

SparkSql能做些啥 Spark SQL的核心概念是DataFrame,它是一个分布式的数据集合,类似于关系数据库中的表。支持使用SQL语言直接对DataFrame进行查询,提供了丰富的内置函数和表达式,可以用于数据的转换、过滤和聚合等操作,支持多种数据源&#…

【SpringCloud Alibaba】(四)使用 Feign 实现服务调用的负载均衡

在上一文中,我们实现了服务的自动注册与发现功能。但是还存在一个很明显的问题:如果用户微服务和商品微服务在服务器上部署多份的话,之前的程序无法实现服务调用的负载均衡功能。 本文就带着大家一起实现服务调用的负载均衡功能 1. 负载均衡…

Vue2基础五、工程化开发

零、文章目录 Vue2基础五、工程化开发 1、工程化开发和脚手架 (1)开发 Vue 的两种方式 核心包传统开发模式:基于 html / css / js 文件,直接引入核心包,开发 Vue。工程化开发模式:基于构建工具&#xf…

让你 React 组件水平暴增的 5 个技巧

目录 透传 className、style 通过 forwardRef 暴露一些方法 useCallback、useMemo 用 Context 来跨组件传递值 React.Children、React.cloneElement 总结 最近看了一些 Ant Design 的组件源码,学到一些很实用的技巧,这篇文章来分享一下。 首先&am…

LeetCode111. 二叉树的最小深度

111. 二叉树的最小深度 文章目录 [111. 二叉树的最小深度](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)一、题目二、题解方法一:迭代方法二:递归 一、题目 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子…

理光310/320/325系列激光打印机加粉后不换芯片清零方法

设置步骤: 依次按停止107开始键进入维修模式, 按下键两次选择Engine Maintenance,点OK键进入, 按上键选择Refill mode项后点OK键, 按下键选择到Pure refill mode后点Ok键(默认是Auto refill mode), 然后按两次后退…

GB/T 25000.51解读——软件产品的功能性怎么测?

前面的文章中,我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容,从本文开始,我们将针对标准中规定的软件产品的八大质量特性进行详细解读。本文为大家解读软件产品的功能性测试。 软件产…

微服务契约测试框架-Pact

契约测试 契约测试的思想就是将原本的 Consumer 与 Provider 间同步的集成测试,通过契约进行解耦,变成 Consumer 与 Provider 端两个各自独立的、异步的单元测试。 契约测试的优点: 契约测试与单元测试以及其它测试之间没有重复&#xff0c…

java商城系统和php商城系统有什么差异?如何选择?

java商城系统和php商城系统是两种常见的电子商务平台,它们都具有一定的优势和劣势。那么,java商城系统和php商城系统又有哪些差异呢? 一、开发难度 Java商城系统和PHP商城系统在开发难度方面存在一定的差异。Java商城系统需要使用Java语言进…

小红书课程发光社群知识库,点亮哥专为超级个体设计解决方案

小红书课程点亮哥知识库 开创了学习小红书教育培训先河 针对超级个体轻创业的学习需求场景 创新推出了“知识库全新学习方式”。 一个人如何做好小红书? 超级个体轻创业,如何做好小红书? 通过打造个人IP、或者塑造老板个人品牌,来实现互联网变现,如何做好小红书? 就像挑…

系统架构设计师-软件架构设计(5)

目录 一、构件与中间件技术 1、软件复用 2、构件与中间件技术的概念 3、构件的复用 3.1 检索与提取构件 3.2 理解与评价构件 3.3 修改构件 3.4 组装构件 4、中间件 4.1 采用中间件技术的优点: 4.2 中间件的分类: 5、构件标准 5.1 CORBA(公共…

Android 电子称定标流程

1、首先确保电子称正确安装,底部悬空,托盘悬空。 2、去皮,把去皮数据保存到本地 3、定标、例如拿100克的砝码放入托盘, 获取值-去皮值及得到定标值 4、通过定标值计算出需要设置的满量程,或者计算对应的重量&#x…

vue-element-admin中实现自适应功能

npm install postcss-px-to-viewport --save-dev 项目根目录下建一个名字为 .postcssrc.js 的js文件(前边的.别忘了),在该文件里写以下代码 //添加如下配置: module.exports {plugins: {autoprefixer: {}, // 用来给不同的浏览器自动添加相应前缀&a…

小学期笔记——天天酷跑4

效果: 点击登录: ------------------------ 效果: 静态的一张图 ------------------------ 完善一下会变成那张静态的图从左往右移动,但是这一张图到后面会拉丝 -------------------- 再完善一下: (再…

洗地机有没有必要买?好用的洗地机推荐

随着科技的发展,越来越多的家用电器出现。就比如在清洁家电方面,相继出现了吸尘器、扫地机、洗地机!其中洗地机更是近年来爆火的一个智能清洁家电!而如果你们和小编一样是个上班族,然后每天下班回家面对脏乱的地板&…

汽车UDS诊断深度学习专栏

1.英文术语 英文术语翻译Diagnostic诊断Onboard Diagnostic 在线诊断 Offboard Diagnostic离线诊断Unified diagnostic service简称 UDS 2.缩写表 缩写解释ISO国际标准化组织UDSUnified diagnostic service,统一的诊断服务ECU电控单元DTC 诊断故障码 ISO14229UD…

Modbus TCP/IP之异常响应

文章目录 一、异常响应二、异常码分析2.1 异常码0x012.2 异常码0x022.3 异常码0x032.4 异常码0x04、0x05等 一、异常响应 对于查询报文,存在以下四种处理反馈: 正常接收,正常处理,返回正常响应报文;因为通信错误等原因…

我对牟长青分享的各个私董会数据分析

我是卢松松,点点上面的头像,欢迎关注我哦! 其实之前,我也想写一个关于各个草根社群的数据分析,但这样的文章容易得罪人,因为我一直喜欢直言不讳,所以一直没有动笔。例如,我在6月份写…

OpenGl中的VAO、VBO与EBO

文章目录 VBO(顶点缓冲区对象)VBO的使用 EBO(索引缓冲对象)EBO的使用 VAO(顶点数组对象)VAO的使用 三者的区别someting。。。 哎,很离谱,上个月学learnopengl学到一半跑去看庄懂老师的视频,结果该还的东西迟早得还,再打开之前的工…

NineData支持最受欢迎数据库PostgreSQL

根据在 Stack Overflow 发布的 2023 开发者调研报告中显示,PostgreSQL 以 45% vs 41% 的受欢迎比率战胜 MySQL,成为新的最受欢迎的数据库。NineData 也在近期支持了 PostgreSQL,用户可以在 NineData 平台上进行创建数据库/Schema、管理用户与…