2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1、接口测试简介
1)先简单介绍下接口测试,那么什么是接口测试呢?
百科的回答:接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。
看起来有点拗口,我们试着用通俗一点的方式说明下,把系统比作一家公司,那么使用系统的好比是个人或者其他公司。
对外接口(我们常说的接口测试指的是对外接口):
那么使用方想要找公司办事情的时候,通过邮箱、电话、聊天工具之类的,通过公司对外提供的渠道,如应聘找HR,有问题找客服,商务合作找销售,而不能直接找到公司内具体事情处理人。因为一家公司人那么多,谁负责什么让使用方记住显然不现实;使用方要求的事情是否合理,需要通过接口人先过滤;同时暴露给使用方谁负责什么,也容易把人挖走。
那么这跟系统接口测试有什么关系呢?
邮箱、电话、聊天工具之类,好比各种浏览器(客户端),HR、客服、销售等渠道就可以理解成是系统对外提供的接口,使用方要做什么事情,找对应的接口请求就可以,接口在找对应的代码执行,再把结果告诉使用方。如此一来,使用方不需要知道具体的代码实现,通过接口就能做到想做的事情,而系统提供方,也不用担心代码被人看到。而接口测试,就是测试这些接口。
系统内接口(一般是单元测试做):
上面解释了对外的接口,那么对内的接口是什么呢?
一家公司,当人多的时候,就会有很多的细分部门,部门之间的交互,就跟公司跟公司之间交互一样,有什么事情就通过部门接口人来对接。
所以系统内接口与对外接口类似,当然因为是一家公司的,故意捣乱的行为就比较少,这块的测试就不需要像对外的接口那么严谨。
2)接口测试测什么

如图,系统的前端,在我们操作控件时,如点击登录按钮,点击购买按钮,会携带着数据,通过http之类的协议,向后端发起请求,后端处理后,返回结果对象,前端收到结果对象后,解析渲染后,在浏览器展示给我们看。
而接口测试,则是跳过前端,模拟前端请求后端,获取对应的结果对象,验证结果对象是否符合预期。
我们以游戏商城购买物品为例,场景:用户登录,提交购买物品+购买数量的信息给服务端,服务端处理信息后返回结果。
用户在前端填写用户名、密码,点击登录按钮->点击按钮时,会请求登录接口,带着用户名、密码、客户端信息等数据,数据正确则登录成功
用户选择购买的物品,输入数量,点击购买按钮->点击按钮时,会请求购买接口,带着用户信息、购买物品、购买数量数据,处理后返回结果
那么购买物品的接口,要测试什么呢?
①常规功能测试,同前端功能测试。
既然在前端都可以测试了,为什么要测试这块呢?
主要是为了测试左移,更快的介入测试,且相对于前端测试而言,更准确的定位问题(排除了前端的因素)。
②非常规功能测试(业务安全)。
后端校验:如上面的购买物品,前端一般都会限制购买数量不能<=0,如果后端没有校验,那么购买负数数量,则就变成获得金钱。
还有有的物品,会需要VIP达到N级才可购买,前端一般会置灰无法选择,而后端如果没有校验,则可以跨VIP等级购买。
没有展示在前端的物品,如做活动时才打折出售的物品,他们的ID与普通商品不一样,也需要校验后端是否有校验。
必要参数不填。
敏感信息是否暴露:在返回值中,是否携带了如用户密码之类的敏感信息
测试以上各种情况下,后端处理后返回的结果是否预期的。
性能测试、安全测试
这两块属于专项测试,不属于接口测试,接口测试需要测试,但是前端、数据库等也是需要测试的。
2、关键字简单介绍
在suite中引用RequestsLibrary后,F5,点击Source,看一下库RequestsLibrary有哪些方法
下面以接口http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1,来对关键字做下说明
Create Session系列:与服务器建立连接,你想找人办事,但是对方不认识你,所以你要先跟他打个招呼,他回应你了,你才能继续跟他说具体事情。
参数如上图,这里就对alias、url、headers{}做下说明,其他不一定用的上,先不介绍
alias:随便写,对于新建的这个session的别名,后续请求时用。
url:请求的域名,如例子中为http://p.3.cn,如果有端口号则包括端口号。
headers:请求头,告诉服务端是以什么样的方式来请求它的,如要告诉它请求方式、数据类型、客户端信息等,数据格式是dict。一般主要传x-requested-with、Content-Type,其他根据项目情况传值
cookies:如果对方认识你了,则可以带上你的身份(登录后,在服务器上会存储你的身份信息)。
Delete All Sessions:与建立连接对应的,你跟他说没事了,我先走了
Get、Post、Put、Delete Request:请求系列,即具体要做的事情。
这里以Get Request做下说明
参数如上图,这里就对alias、uri、headers、params做下说明,其他不一定用的上,先不介绍
alias:前面Create Session起的别名
uri:具体的路径,如例子中是/prices/mgets,如果访问的是根目录,则为/
headers:请求头,如果跟session一致,则不需要再赋值
params:请求的body,如例子中可以是skuIds=954086 type=1
To Json:服务器收到接口请求后会返回response,可通过该方法,将response.content转为json
上一篇 1、大型项目的接口自动化实践记录--robotframework环境搭建
下一篇 3、大型项目的接口自动化实践记录----开放API练习
2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介的更多相关文章
- 3、大型项目的接口自动化实践记录----开放API练习
开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...
- 1、大型项目的接口自动化实践记录--robotframework环境搭建
因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...
- 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等
1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...
- 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比
上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...
- 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果
上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...
- 接口自动化平台搭建(二),搭建django项目与接口自动化平台的由来与功能特征
1.创建django项目 a.使用命令创建,安装完django之后就有django-admin命令了,执行命令创建即可,命令如下: django-admin startproject my_djang ...
- python入门以及接口自动化实践
一.Python入门必备基础语法# 标识符:python中我们自己命名的都是标识符# 项目名 包名 模块名# 变量名 函数名 类名# 1:字母 下划线 数字组成 命名的时候不能以数字开头# 2:见名知 ...
- 19 | 真实的战场:如何在大型项目中设计GUI自动化测试策略
- python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)
通过上篇文章日志管理模块loguru简介,我们已经知道了loguru日志记录模块的简单使用.在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题. 这篇文章我们使 ...
随机推荐
- 学习体验centos7 下根目录扩容操作(步骤详细!!!)
转自 苗尼玛乔 感谢你!
- K8s集群部署(二)------ Master节点部署
Master节点要部署三个服务:API Server.Scheduler.Controller Manager. apiserver提供集群管理的REST API接口,包括认证授权.数据校验以 及集群 ...
- 基于SpringBoot从零构建博客网站 - 开发设置主页标识和修改个人信息功能
由于守望博客系统中支持由用户自己设置个人主页的URL的后半段,所以必须要用户设置该标识的功能,而且是用户注册登录之后自动弹出的页面,如果用户没有设置该标识,其它的操作是不能够操作的,同时要求主页标识只 ...
- SPOJ INTSUB - Interesting Subset(数学)
http://www.spoj.com/problems/INTSUB/en/ 题意:给定一个集合,该集合由1,2,3....2n组成,n是一个整数.问该集合中有趣子集的数目,答案mod1e9+7. ...
- Codeforces Gym101246C:Explode 'Em All(DP + bitset)
http://codeforces.com/gym/101246/problem/C 题意:给出一个n*m的图,“*”表示这个地方需要炸掉,炸弹可以如果丢在(i,j)位置的话,那么可以炸掉第i行第j列 ...
- Java设计模式学习笔记(三) 工厂方法模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...
- 提升布局性能____Making ListView Scrolling Smooth
listview是一个比较重要的UI组件,一切影响UI的操作,比如适配器从磁盘.网络或者数据库中加载数据的操作,最好都放在子线程中完成.子线程可以使用thread,不过那样比较老土,官方推荐使用Asy ...
- MyBatis 存储过程
From<MyBatis从入门到精通> <!-- 6.2 存储过程 6.2.1 第一个存储过程 delimiter ;; create procedure 'select_user_ ...
- Spark on YARN资源申请
1.spark submit参数 $ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster ...
- STM32F072从零配置工程-基于HAL库的串口UART中断配置
先上一个采用串口直接传输的Demo: 此处的思路是完全采用HAL库来实现的,核心是运用HAL_UART_Transmit_IT和HAL_UART_Receive_IT两个函数来实现的,可以作为一个De ...