测试进阶:实现跨请求地保持登录的神器session你get了么?

news/2024/7/19 11:16:41 标签: python, 爬虫, http, 软件测试, 网络互联

前言

在学习自动化或者是去面试自动化相关岗位时,难免会遇到的一个问题是:如何处理自动化请求中的登录信息?不论是在学习接口自动化还是出去面试自动化测试岗位,测试人员遇到的一个问题都是如何处理登录?

https://img-blog.csdnimg.cn/img_convert/f69f4aeda6d0bf0304b77e6bc5f0cc0a.png" />

举例一个很简单的例子:

在做接口自动化测试的时候,肯定会遇到一种测试场景在进行操作的时候会提示用户进行登录或者直接返回HTTP状态码401(未授权)。

例如:我们在进行电商平台购物时,要创建订单前都会提示我们先进行登录。 因为HTTP协议是无状态的,所以在创建订单时,服务器不知道哪个用户在操作。因此,用户在创建订单时必须要先进行登录,登录成功后服务器会返回一个特定的标识,该标识用于识别用户并跟踪用户 。

常见的身份信息

在进行自动化过程中一般遇到的登录一般会听到2个名词:一个是token,一个是cookie。

Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息,一般是服务端创建会话后通过请求的response请求返回给客户端(浏览器或者其他客户端)。cookie 类似我们用身份证入职一个公司,然后公司给我们一个员工编号,后面工作过程中,我们都是通过员工编号进行工时统计或薪资发放等。

Token则是由应用商通过账号密码生成的有时效有权限的随机数,token的使用类似是我们出生后有了身份证,后面生活的时候直接给看自己身份证。

实战-自动保存/获取cookie

自动获取cookie的原理

python有一个非常强大的接口测试第三方库 – requests。很多学习Python的同学们可能都知道requests库常见用法一般如下两种:

1.第一种方式:

requests.get(url,params,headers)

requests.post(url,data,headers)

2.第二种方式:

requests.request(url,method.params,headers)

requests.request(url,method.data,headers)

使用上述两种方法,在遇到接口需要依赖登录信息时,需要通过手动的方式提取cookie再通过变量传递给下一个接口使用。

实际上,除了上述手动获取cookie方法外,requests还有另外一种用法:requests.session()。session其实是一个会话类,requests的所有请求方法,底层都是调用的这个类的对象。

其他方法和session的区别在于:

直接使用requests调用请求方法发送请求,每次都会创建一个新的session(会话对象),所以没有之前请求的cookies信息

直接创建一个session会话对象来发请求,那么每次发请求用的都是同一个会话对象,能够自动保存之前的会话信息(cookies数据),那么其他接口使用同一个会话时会自动调用会话已保存的cookie信息。

如果接口依赖cookies,则可使用session自动管理,s=requests.session(),那么依赖的接口可通过s.get()/s.post()自动关联cookies了

认识可自动的标识 Set Cookie

大家可能会疑问,什么样的情况下session会自动获取对应的cookie呢?这个时候可以用到Charles抓包工具,Charles这个抓包工具能很清楚的划分接口的各个数据,包括Response的headers、Set Cookie(存储登录的cookie信息)、Text(对应响应数据正文)。

请看下面截图!

https://img-blog.csdnimg.cn/img_convert/562f0eaa0efc3067f589fdb0a96a1be3.png" />

通过上面截图可知悉,用户登录成功后,服务端通过登录接口返回的响应数据的set cookie返回对应的用户的cookie信息。

如何自动获取?

从上面原理的介绍我们可以知道,接口请求之前我们先创建会话与服务端建立连接后,就会产生对应的cookie。通俗点的说呢,就好比我们拿身份证去注册,注册成功后对方的数据库就会产生一个ID编号,接下来我们都是通过这个编号进行验证身份。

代码实现方法如下:

1.创建会话:s=requests.session()

2.发起登录请求:s.post(url,data,headers) #登录请求一般是post请求

3.查看订单详情页:s.get(url,params,headers) #查看数据一般是get请求

注意:进行创建订单或者查询订单详情等请求必须放在登录请求之后,否则session对应的cookie信息是空的

其他:查看保存的cookie信息—response.cookies.values()

代码片段

https://img-blog.csdnimg.cn/img_convert/8e176834ff85f0a2c0bb6f56d4ab5861.png" />

https://img-blog.csdnimg.cn/img_convert/1885db821231c877517faeb657322e9a.png" />

运行结果:

https://img-blog.csdnimg.cn/img_convert/fe2a12a75c79af3ea8374b9ad27d9a59.png" />

总结

Requests的session自动保存cookie的功能,其实就类似jmeter的cookie管理器,不同的点在于使用jmeter时,我们需要先将登录的cookie手动提取后保存到管理器内,然后将其他请求放在管理器下,才会默认去调用该管理器内的cookie;而通过s=requests.session()的作用是,先发起一次对话,然后进行不同请求直接使用同一个对话,服务端返回cookie后进行自动保存,其他接口需要cookie是直接通过s.get()或s.post()进行自动获取。


http://www.niftyadmin.cn/n/1367173.html

相关文章

测试管理实践:当测试过程、测试交付存在潜在风险时,如何应对?

在软件测试活动中,作为一名测试人员有没有遇到过这样的场景,在测试一个特性或者制定一份测试方案时,往往会想着进行简单测试、做简单设计,认为 1、这个场景出现的概率太低,几乎不可能会存在,不测了 2、实…

工具推荐:如何通过代码构造Excel测试数据?

项目背景 系统有个Excel导入功能,需要通过Excel来构造测试数据,生成测试数据之后,上传Excel并导入验证。 如果数据验证出错,需要给出错误提示;如果数据校验通过,则执行导入操作。 我们主要通过Alibaba的E…

「讨论」测试工程师能不能作为一份终生的职业?30岁以后怎么办?

【讨论】测试工程师可否作为一份终生的职业?这是我在论坛看到的一个讨论,你的答案是什么呢? 我希望大家能认真思考后给出一个属于自己的答案,无论你是新手入门,还是资深专家。回答这个问题请不要凭一腔热血&#xff0…

软件测试基础:测试新人如何提交一份高质量的测试用例?

测试一个新功能时,最重要的一个步骤就是编写测试用例,测试用例写好了,那么后面的测试工作基本就非常顺利了,那么作为一个职场新人来说,怎样提高测试用例的质量呢? 1、充分理解需求 作为一个新人来说&#…

如何从功能测试转自动化测试?这3件事对你一定有帮助!

为什么要进行自动化测试 开始正文前,我们必须先统一认知,充分认识到自动化测试的必要性,随着被测系统越来越大,逻辑越来越复杂,测试的工作量也会倍增,这必然会暴露出测试资源与测试生命周期的冲突&#xf…

不一样的测试之旅:医疗行业软件测试有什么不一样的?

一直在学习别人的测试之路,现在也想分享一下自己的经历。 结缘测试 和大家不同的地方在于,作为一名生物医学工程专业毕业生,我都是在医疗行业打转。 我的软件测试之旅分为两段,第一段是一份实习,从2019年9月到2020年…

测试工程师经常遇到的问题有哪些?如何解决?一键收藏

测试工程师经常遇到的问题有: 开发的提测质量不佳,开始提测之后明明还有许多功能没有开发完整就提测,导致测试延期 经常出现功能漏测的情况,无法保障产品质量 经常出现明明测试过的功能,测试通过之后又出现重复的bu…

大热的DevOps,和软件测试的关系竟然是什么呢?

DevOps是近年来的大热词汇。为了了解DevOps,我们不妨从三个最简单的问题入手:what?Why?How? 首先,what? DevOps是什么? DevOps,是Development和Operations两个词的组合。表面上看&#xff0c…