使用robotframework做接口测试三——保持登录状态
调用登录接口登录了,其他的接口怎么保持登录状态呢?
首先来看一看,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做接口测试三——保持登录状态的更多相关文章
- 使用robotframework做接口测试二——处理响应数据
初使用RequestsLibrary做接口测试时,你会不会感到困惑,为什么会有${resp.content}, ${resp.status_code}这样的写法,这个status_code什么鬼,f5 ...
- 使用robotframework做接口测试之一——准备工作
最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...
- 使用robotframework做接口测试5——一个用例中调多个接口
凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...
- 使用robotframework做接口测试4——搞定接口签名及密码加密
接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了.于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍. ...
- Struts2(三.用户登录状态显示及Struts2标签)
1.编写main.jsp /WebContent/main.jsp 之前用户登录时已把用户存入session <%@ page language="java" content ...
- Postman+Postman interceptor的安装和使用-解决把chrome浏览器登录状态同步到postman进行有依赖的接口测试 Postman 使用方法详解
Postman+Postman interceptor的安装和使用-解决把chrome浏览器登录状态同步到postman进行有依赖的接口测试 问题引入:做接口测试时,有依赖关系的接口往往不好测试( ...
- springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)
今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...
- Vue管理系统前端系列三登录页和首页及`vuex`管理登录状态
目录 登录页面设计 vuex 对应 用户模块 丰富界面 首页相关代码 登录页面设计 该节记录了登录界面的设计,以及 vuex 的简单实用,然后将首页简单搭建完成. 先看最终效果图 先在 views 文 ...
- 使用Robot Framework做接口测试
http://chuansong.me/n/1858477 1.RF框架 1.1 RF框架介绍Robot Framework 框架是一个通用的测试框架,一直是由诺西网络(Nokia Siemens N ...
随机推荐
- Java笔试题及答案
1.下列不可作为java语言修饰符的是(D) A) a1 B) $1 C) _1 D) 11 答案:java标识符不能以数字开头,包含英文字母,数字,下划线以及$ 2.有一段java 应用程序,它的主 ...
- Myeclipse中左边的项目目录没了
切换一下Perspective, java, resource都有项目窗口 具体的 Window->Open Perspective 如果项目窗口被关了的话 windows->show v ...
- php类知识----特别用法
spl_autoload_register注册 <?php #spl_autoload_register-----这个例子是用来打印实例化类的类名 function thereisagameof ...
- React之this.refs, 实现数据双向绑定
1.实现数据双向绑定 将input组件与this.state属性绑定,要么是readonly, 要么使用onChange事件: 获取input元素的value值,有两种方式: 1) e.target. ...
- canvas addHitRegion()
CanvasRenderingContext2D.addHitRegion() 是 Canvas 2D API 给位图添加点击区域的方法. 但是 mobile 都不兼容
- 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组
1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 输入二个 ...
- Python基础之Python语言类型
编程语言主要从以下几个角度进行分类: 编译型和解释型 静态语言和动态语言 强类型定义语言和弱类型定义语言 编译和解释的区别是什么? 编译器把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样 ...
- 如何使用getattr运行单个函数
import sys def foo(): print("哈哈想不到吧") if __name__ == '__main__': getattr(sys.modules[__nam ...
- python中的fstring的 !r,!a,!s
首先是fstring的结构 f ' <text> { <expression> <optional !s, !r, or !a> <optional : fo ...
- Mysql 修改密码和设置远程连接
[参考文章]:mysql修改root密码和设置权限 1. 修改密码 1.1 set password 登录mysql set password for 用户名@localhost = password ...