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