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搭建基于SAMBA的网络存储
学习目标: 通过本实验理解Linux系统下SAMBA服务器和客户端的配置,实现客户机可自动挂载服务端的共享存储. 操作步骤: 1. SAMBA服务器搭建 2. SAMBA客户端配置 参考命令: ...
- ES5_03_Object扩展
ES5给Object扩展了一些静态方法, 常用的2个: 1. Object.create(prototype, [descriptors]) * 作用: 以指定对象为原型创建新的对象 * 为新的对象指 ...
- header 无法实现跳转
错误:Warning: Cannot modify header information - headers already sent by (output started at 方法:“php.in ...
- 使用vue-print-nb插件页面空白以及打印没有样式问题
在使用vue-print-nb中遇到两个问题: 第一个问题:点击打印后,打印的内容是一片空白 vue-print-nb的原理大概是在你的页面上创建一个iframe,然后把你要打印的那一个div抓出来给 ...
- leadcode的Hot100系列--78. 子集--回溯
上一篇说了使用位运算来进行子集输出,这里使用回溯的方法来进行排序. 回溯的思想,我的理解就是: 把解的所有情况转换为树或者图,然后用深度优先的原则来对所有的情况进行遍历解析. 当然,因为问题中会包涵这 ...
- HDU 1565:方格取数(1)(最大点权独立集)***
http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意:中文. 思路:一个棋盘,要使得相邻的点不能同时选,问最大和是多少,这个问题就是最大点权独立集. 可以 ...
- Codeforces Gym100962J:Jimi Hendrix(树型DP)
http://codeforces.com/gym/100962/attachments 题意:有一个n个节点的字母树,给出n-1条边的信息,代表边上有一个字母,然后给出长度为m的字符串,问是否能在这 ...
- Ural 2064:Caterpillars(思维暴力)
http://acm.timus.ru/problem.aspx?space=1&num=2064 题意:有n只虫子在爬树,每个虫子往上爬ti距离后会往下掉落ti距离,每爬一个单位距离耗费一个 ...
- HDU 5791:Two(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description Alice gets two sequences A ...
- 9.秋招复习简单整理之Spring面试AOP和IOC的理解
1.Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系,但不适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用 ...