• 15
  • 15
分享
  • 测试进阶:实现跨请求地保持登录的神器session你get了么?
  • 曼倩诙谐 2021-09-18 09:46:55 字数 2215 阅读 1210 收藏 15

  前言

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

  举例一个很简单的例子:

  在做接口自动化测试的时候,肯定会遇到一种测试场景在进行操作的时候会提示用户进行登录或者直接返回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(对应响应数据正文)。

  请看下面截图!

1-1.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()

  代码片段

1-2.png

1-3.png

  运行结果:

1-4.png

  总结

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



作者:绿豆芽呀   

来源:51Testing软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 前言:关于如何使用selenium webdriver测试REST api的问题,你可以在StackOverflow.com上看到很多相关的问题。不熟悉自动化测试的新人有时不理解Selenium仅仅基于WebUI做自动化测试。但是,如果你想使用Selenium为UI测试执行一些数据设置/数据清理,那么可以通过一些额外的库来实现这一点;这就是我们将在本文中看到内容。如果你只需要测试api,那么建议浏览这篇文章:Jmeter如何测试REST API /微服务Web UI测试存在的问题:慢(这是因为你的浏览器首先向服务器发送一个请求以获取某些信息,一旦获得所需数据,可能需要一些时间来处理数据,并通过...
            0 0 970
            分享
          •   忙忙碌碌,不知不觉在新公司已经3个月了。尤其是最近一段时间,异常的忙,但是我仍然会抽出一定量的时间来做些开发。  以后成熟的话,打算输出一个手把手开发的系列,分享给更多的测试童鞋。  前几天跟群里一位小伙伴聊天,听到了一个关键词。相信这也是很多测试童鞋都有过的体会,感觉测试容易被开发鄙视,得不到尊重。  既然今天也没什么技术向的内容分享,那就随便聊聊吧,以一个入行3年多的测试小兵的角度,谈谈我的感受。  一、听听测试跟开发都吐槽对方什么?  1.来自开发的问候  由于忙于各种业务,所以认识了很多的开发童鞋。接触的多了,大家话题也就聊开了。因为他们也会跟不同的测试人员合作,所以我偶尔就能听到...
            0 0 818
            分享
          • 1. Charles安装官网下载安装Charles:https://www.charlesproxy.com/download/2. HTTP抓包(1)查看电脑IP地址  例如:192.168.1.169(2)设置手机HTTP代理手机连上电脑,点击“设置->无线局域网->连接的WiFi”,设置HTTP代理:服务器为电脑IP地址:如192.168.1.169端口:8888设置代理后,需要在电脑上打开Charles才能上网(3)电脑上打开Charles进行HTTP抓包手机上打开某个App或者浏览器什么的,如果不能上网,检查前面步骤是否正确点击“Allow”允许,出现手机的HT...
            1 0 4145
            分享
          • 新浪科技讯北京时间10月24日早间消息,据报道,美国苹果旗舰店已经开始销售能用Apple Watch或iPhone解锁的外门锁。这款售价329美元的Level Lock+门锁是苹果旗舰店销售的首款支持Home Key的门锁。Level Lock+由Level Home公司出品。在大门上安装这款产品后,用户只需使用苹果Home Key功能轻触便可打开或关闭门锁。Home Key是一款使用NFC和苹果软件中的安全令牌实现开锁和解锁的功能。用户可以通过短信把钥匙发送给朋友,也可以直接通过苹果设备自动开门。对苹果来说,这是2021年宣布的一项备受期待的功能取得的重要进展。Home Key表明苹果仍在推...
            0 0 799
            分享
          •   robotframework其实就是一个自动化的框架,想要进行什么样的自动化测试,就需要在这框架上添加相应的库文件,而用于webui页面自动化测试的就是selenium库。关于robotframework框架的搭建我这里就不说了,今天就给大家根据一个登录的实例来讲一讲,selenium库的相关应用吧。  要想运用selenium库,首先是导入此库的信息。在哪里导入呢?  那就是在我们已经安装好的robotframework的操作页面即ride中导入。  打开ride,按照以下顺序依次建立项目:  1.新建测试项目  2.新建测试套件,在已经建好的项目下建立测试套件  3.新建测试...
            15 15 987
            分享
      • 51testing软件测试圈微信