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日志记录模块的简单使用.在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题. 这篇文章我们使 ...
随机推荐
- Appium+python自动化(十三)- 与Capability完美懈垢之解读(超详解)
简介 Capability又叫Appium Desired Capabilities,前边写了那么多实例代码,小伙伴可以发现一些规律,就是有一部分代码总是重复的出现在你的视线中.这部分就是对Capab ...
- SSH不能连接并提示REMOTE HOST IDENTIFICATION HAS CHANGED
ssh连接报错: 解决: vi /root/.ssh/known_hosts 找到要连接的主机的ip,把它的那行所有信息删除(就是一行)
- asp.net core 2.2 生产环境直接更新View页面并立即生效
有的时候我们会直接在生产环境上更新页面文件,比如更改了JS代码,CSS代码或页面的文案,布局等.这种没有改到后台代码的情况一般就是直接发布页面文件了,在asp.net core 2.2以前的版本(没有 ...
- 消息驱动式微服务:Spring Cloud Stream & RabbitMQ
1. 概述 在本文中,我们将向您介绍Spring Cloud Stream,这是一个用于构建消息驱动的微服务应用程序的框架,这些应用程序由一个常见的消息传递代理(如RabbitMQ.Apache Ka ...
- python方法和函数集锦
方法的使用: 变量.方法名(参数) 函数的使用: 函数名(参数) 字符串 1.删除空白 rstrip(): 返回去掉尾部的空格后的字符串.(不改变原字符串) lstrip(): 去掉首部空格 stri ...
- 侦听器watch 监听单个属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux命令学习-cp命令
Linux中,cp命令的全称是copy,主要作用是复制文件或文件夹,类似于Windows下的复制功能. 假设当前处于wintest用户的主目录,路径为 /home/wintest ,存在文件夹test ...
- Java学习笔记之---流程控制语句
Java学习笔记之---流程控制语句 (一)循环语句 (1)if语句 if(布尔表达式){ //如果布尔表达式为true将执行的语句 } if(i%2!=0){ System.out.println( ...
- Atom常用插件、快键键、使用技巧
atom 中间有一条白色的虚线,怎么去掉? Settings/Packages/wrap-guide disable 自动换行 File-Settings-Editor-Soft Wrap(打勾即可) ...
- springcloud-路由gateway
1. 场景描述 springcloud刚推出的时候用的是netflix全家桶,路由用的zuul(springcloud-路由Zull),但是据说zull1.0在大数据量访问的时候存在较大性能问题,2. ...