调用登录接口登录了,其他的接口怎么保持登录状态呢?
  首先来看一看,web端或者说客户端是怎么样用cookie/token等保持登录状态的。一般来说,cookie都会在登录接口由服务端返回,而且会是在header里面返回,并且,header里面有一个set-cookie这样的key,是的,就是这家伙,会把登录的cookie写到客户端的cookie缓存里,而后,当客户端要请求指向这个path的其它接口时,将此缓存的cookie塞到请求里面请求,服务端认得这个cookie,即认为后面的接口为已登录状态。
  当然,也不排除,有些变态的系统,cookie并不是由登录接口返回的。我碰到过一例,请求主页面时即返回set-cookie,然后客户端拿此cookie及用户名密码登录成功后,cookie激活。有点变态,不是常规实现,后来被重构了。还有些接口,直接把登录token啥的带在url里面,直接在url拼一拼就能完成鉴权。要具体问题具体分析,我接触的项目有限,只能讲讲比较常见的场景,给大家提供一些思路。
这是登录接口的返回headers截图:

比较常见的情况下,关键字create session会创建session对象,下一个请求带上session别名,该session对象会自动完成请求在上下文传递过程中的 Cookie 处理,如下面的例子:

另小伙伴们还可能有其他场景,如服务器间session共享,第二个请求要发往另一个host/域名,如某些app接口请求参数中需要带上cookie/token字段,部分SSO,这时候新请求可能需要创建另一个session,将cookie主动塞到session里面,f5可以看到create session关键字有个${cookies}参数,嗯,就是放到这里面,下图第11行脚本,注意是以键值对的方式传递的(抓包也看得出):

第8行有个把set suite variable的操作,目的是在此suite下还有跨域名(如其它二级域名)的请求,也可以使用该登录cookie值,只要cookie未过期,只要服务器的session能识别。第8行也是为了重构做准备。
 
第一次重构:
  因为登录是一个很多接口都会依赖的动作,所以要把它抽取成关键字,个人建议是放在suite setup里面,这样做的好处是,省去了每个用例中都去调一次登录接口的时间。关键字抽取,会抽取图2的1-5行,图3中的1-8行做为一个关键字,将用户名密码设为入参,重构完,大概会变成:

在这个suite中,是对banner功能点的接口测试集合,在suite setup里放了登录接口,用例一运行就先登录,名为newmanage的session保持了我的登录状态,其后的待测接口,都请求的同一个域名,因此使用alias为newmanage的get 和post请求,服务端认为已经登录,请求成功。

还有前面说的另外一种情况,在登录时已经把cookie最核心的键值对取出来了,所以待测接口需要的话,新建个seesion把该cookie塞进去就行了,至于如何写会使脚本更精炼合理,建议按实际情况重构脚本。嗯,最后养成好习惯,suite结束时delete all sessions放在suite teardown下。

使用robotframework做接口测试三——保持登录状态的更多相关文章

  1. 使用robotframework做接口测试二——处理响应数据

    初使用RequestsLibrary做接口测试时,你会不会感到困惑,为什么会有${resp.content}, ${resp.status_code}这样的写法,这个status_code什么鬼,f5 ...

  2. 使用robotframework做接口测试之一——准备工作

    最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...

  3. 使用robotframework做接口测试5——一个用例中调多个接口

    凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...

  4. 使用robotframework做接口测试4——搞定接口签名及密码加密

    接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了.于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍. ...

  5. Struts2(三.用户登录状态显示及Struts2标签)

    1.编写main.jsp /WebContent/main.jsp 之前用户登录时已把用户存入session <%@ page language="java" content ...

  6. Postman+Postman interceptor的安装和使用-解决把chrome浏览器登录状态同步到postman进行有依赖的接口测试 Postman 使用方法详解

    Postman+Postman interceptor的安装和使用-解决把chrome浏览器登录状态同步到postman进行有依赖的接口测试   问题引入:做接口测试时,有依赖关系的接口往往不好测试( ...

  7. springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)

    今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...

  8. Vue管理系统前端系列三登录页和首页及`vuex`管理登录状态

    目录 登录页面设计 vuex 对应 用户模块 丰富界面 首页相关代码 登录页面设计 该节记录了登录界面的设计,以及 vuex 的简单实用,然后将首页简单搭建完成. 先看最终效果图 先在 views 文 ...

  9. 使用Robot Framework做接口测试

    http://chuansong.me/n/1858477 1.RF框架 1.1 RF框架介绍Robot Framework 框架是一个通用的测试框架,一直是由诺西网络(Nokia Siemens N ...

随机推荐

  1. go变量和数据类型

          go语言的基本数据类型   布尔类型:bool 整型:int8.byte.int16.int.uint.uintptr等 浮点类型:float32.float64  复数类型:comple ...

  2. Ruby 中的闭包-代码块

    看了一片文章https://ruby-china.org/topics/38385讲closure的. 写下一些感想: 闭包就是 一个函数能够记住和存取它的lexical作用域,即使这个函数是在它的l ...

  3. axios 请求多个接口

    axios.all([ axios.get('https://api.github.com/xxx/1'), axios.get('https://api.github.com/xxx/2') ]) ...

  4. BZOJ5056 OI游戏[最短路树]

    有生以来做过的bzoj比A+B还简单的最水的题.(确信) 不解释. UPD:据说这题正解应当是矩阵树定理?但是这个不是用来最小生成树计数的么?有生之年会补的. #include<iostream ...

  5. java 获取随机数的方法

    方法一: (数据类型)(最小值 + Math.random()*(最大值-最小值+1) ); 示例: (int)(1+Math.random()*(10-1+1)): 获取int类型 1-10的随机数 ...

  6. [HNOI2008][bzoj 1005]明明的烦恼(prufer序列)

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7121  Solved: 2816[Submit][Stat ...

  7. TensorFlow使用记录 (十四): Multi-task to MNIST + Fashion MNIST

    前言 后面工作中有个较重要的 task 是将 YOLOV3 目标检测和 LanNet 车道线检测和到一个网络中训练,特别的是,这两部分数据来自于不同的数据源.这和我之前在 caffe 环境下训练检测整 ...

  8. 在Latex中,拉普拉斯算子的小写符号l怎么表示

    如下图所示的小写字母l,在Latex中不知道该如何表示,试过用\mathcal但是发现不行,因为\mathcal只支持大写字母. 正确方法: \ell

  9. [CSP-S模拟测试]:循环依赖(拓扑)

    题目传送门(内部题148) 输入格式 每个测试点第一行为一个正整数$T$,表示该测试点内的数据组数. 接下来$T$组数据,每组数据第一行一个正整数$n$,表示有引用单元格进行计算的单元格数,接下来$n ...

  10. find命令不递归查询子目录

    [root@dbrg-2 test]# find .  ! -name "." -type d -prune -o -type f -name "*.jpg" ...