测试进阶实现跨请求地保持登录的神器session你get了么?
前言
在学习自动化或者是去面试自动化相关岗位时,难免会遇到的一个问题是:如何处理自动化请求中的登录信息?不论是在学习接口自动化还是出去面试 自动化测试 岗位,测试人员遇到的一个问题都是如何处理登录?
举例一个很简单的例子:
在做接口自动化测试的时候,肯定会遇到一种测试场景在进行操作的时候会提示用户进行登录或者直接返回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(对应响应数据正文)。
请看下面截图!
通过上面截图可知悉,用户登录成功后,服务端通过登录接口返回的响应数据的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()
代码片段
运行结果:
总结
Requests的session自动保存cookie的功能,其实就类似jmeter的cookie管理器,不同的点在于使用jmeter时,我们需要先将登录的cookie手动提取后保存到管理器内,然后将其他请求放在管理器下,才会默认去调用该管理器内的cookie;而通过s=requests.session()的作用是,先发起一次对话,然后进行不同请求直接使用同一个对话,服务端返回cookie后进行自动保存,其他接口需要cookie是直接通过s.get()或s.post()进行自动获取。 我是谁?
我是一名从事了多年软件测试的老测试员,今年年初我花了一个月整理了一份最适合2020年学习的软件测试学习干货,可以送给每一位对软件测试感兴趣的小伙伴,想要获取的可以关注我的头条号并在后台私信我:【头条】,即可免费获取。
Python算法之冒泡排序冒泡排序是什么冒泡排序(BubbleSort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进
骁龙870三星E4屏,沦为1699元千元机,正在加速退场临近年末,高通和联发科都已经发布了全新的旗舰芯片,各大手机厂商也都在预热新机型的发布。今年的手机市场即将收关,今年的手机也正在加速退场。但这并不代表这些手机就不值得入手,相反有些手
华为智能眼镜已在花粉俱乐部开板华为智能眼镜自12月份曝光以来,已经获得很大的关注量。之前曾有报道称本次新品将会支持镜面显示,但从今天的开板位置来看,这纯属谣言花粉俱乐部中华为智能眼镜的开板位置从图中可以看到,这
3种你以为是智商税的大家电,依然深受欢迎,而且无法被替代在的科技水平发展的很快,而且逐渐渗透到不同领域的产品中,近年来就出现了很多新奇又实用的智能家电产品,可能很多没有用过的人都认为大多数的智能家电产品比较鸡肋,但是作为一个喜欢尝鲜的年
新手建站无需购买服务器10分钟快速部署你的静态网页阿里云云开发平台重磅推出开源应用中心,聚合最热门的开源应用,让你像安装app一样快速上线一个网站。面向新人和持续活跃的开发者用户推出上线激励加油包,最高100元无门槛代金券免费送,
vivo发布新款智能手机,2699元配备独立显卡,玩游戏用它太轻松2021生机大会很多朋友们在选购电脑时会特别注重显卡,很大一方面是出于游戏的目的,毕竟显卡对于游戏来说真的是太重要了。可是谁又能想到现在买手机也需要看显卡了,没错现在已经有智能手机
揭秘腾讯投资版图游戏与文娱传媒两翼齐飞你的财宝在哪里,你的心也在那里。圣经马太福音尽管2021年的中概互联巨头们依然没能走出业绩和股价上的阴霾,但在发展和扩张的道路上,却仍旧继续着跑马圈地的步伐。阿里在企服领域频频出手
Linux测试端口的连通性的方法服务部署的时候经常会碰到检查服务器和服务器,或者服务器和客户端之间网络端口是否通的情况,以下就是几种常见的判断连通性的命令1。telnetipport如telnet127。0。0。
一直被骂的惠威音箱到底是不是垃圾?一直以来,发烧界好像极其看不起国产器材,特别是音箱类产品。而作为国产音箱的大厂惠威,也一直是被一些人骂。好像不骂一下惠威就不能叫发烧友一样,其中甚至很多连惠威的音箱都没听过,仅仅人
中国手机力推5G,却让苹果摘了桃子市调机构StrategyAnalytics预估今年四季度5G手机出货量将超4G手机,而今年和明年苹果都是5G手机市场的老大,这意味着中国手机企业早早就在2019年推广5G手机,但是
苹果s是什么型号?S16t32GB,是序列号,A4黑色,第四代iPhone4发布2011年10月。2012年12月10日2012年9月10日CC制造周DDD车身识别码EE颜色,此手机支持3G网络。发