1. 为什么要做接口测试
2. Json简介
3. 3A原则
一、为什么要做接口测试
本文讨论的接口均是服务级的接口,不是代码级
接口是什么
在讨论为什么要做接口测试之前,我们可以先稍微了解一下接口是什么?
接口可以很不准确的理解成是与资源打交道,这个资源可能是本系统的,也可能是其他系统的。
举个例子,假如我们在开发1个bug管理系统,该系统需要拿到公司的所有开发和测试人员的信息,这样开发和测试人员不用注册都可以登录进去了,这应该很好理解。
那么这些人员的信息储存在哪里呢?一般存储在hr系统里。现在的需求更加明确了,我们要到hr系统中去拿到人员信息,获取hr系统中的人员资源。
怎么拿呢?很多种方式,可以直接把hr系统的数据库拷贝一份放到bug管理系统里,不过这样不好,因为数据的同步会有点麻烦;还可以直接连hr系统的数据库去查,这样也不太好,这样我们就需要了解hr系统的数据存储结构和逻辑,一旦hr系统的数据字段发生改变,bug管理系统也要去该,以便同步。
比较好的做法是,hr系统暴露一些接口,通过这些接口去获取人员信息资源,这样bug系统就不需要关心hr系统的数据存储实现了。
这些接口可能是这样的:
- 登录的接口,提供人员的用户名和密码,去hr系统中判断该人员是否存在,如果存在验证用户名和密码,如果验证通过就返回1个token,该token就是这个人员的通行证,通过token可以登录到bug管理系统中去;
- 获取人员信息的接口,返回该人员的职位:测试还是开发,以及用户名,昵称等信息;
综上:接口可以理解成是不同系统或模块之间资源交流方式;
接口测试实际上是黑盒测试
作为黑盒测试,基本的测试思路是通过输入和输出判断被测系统或者对象的逻辑。
获取人员的信息,我需要把人员的用户名传给hr系统接口,这样hr系统的接口会返回给我用户的一些更加具体的信息。这里的输入是用户名,输出是用户的详细信息。
为什么要做接口测试
既然是接口获取和操作资源的方式,而大部分系统和产品中,资源一般都是产品的核心,比如微信核心资源就是通讯录关系链和聊天记录等,因此资源是必测的。
另外接口中大部分的内容是数据,通过数据的对比我们能推测到系统和产品的逻辑,测接口就是测逻辑。
最后接口中的返回相对单纯,不像web页面,html代码中有太多ui的东西,ui最不稳定,变化太快,接口相对稳定一点点,但是里面的干扰信息更少,断言相对容易很多。
有哪些常见的接口
携程订飞机票,飞机票的信息一般都是通过各大航空公司的接口拿到的;
淘宝的物流信息,一般淘宝的物流信息都是通过各个物流公司的接口拿到的;
第三方微博客户端,个人用户的微博等信息都是通过微博的接口拿到的;
常见的接口测试工具
postman: 推荐。基本功能免费。最简单的基于http接口的调试和测试工具;
jmeter:后置处理器配合断言基本上可以满足接口测试需求,就是测试报告要做二次开发
自己撸代码:推荐。配合类似xunit测试框架,基本可以满足一切需求;零基础实现python接口自动化视频教程,一起撸代码吧
soapui: 收费的;
insomnia:强力推荐。postman的弱化版,基本功能免费,重要的是工具代码开源,可以自己改;
paw: 强力推荐。mac上最强,淘宝买个授权好像就百把块钱;
二、Json简介
官方解释
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
什么是JSON
首先json是字符串。
大家都知道,字符串是用来传递信息的。json字符串实际上就是一种规定了格式的字符串,
通过这种格式,我们可以在不同的编程语言之间互相传递信息,比如我们可以把javascript的对象转换成json传递给java,这样java可以反解析出java语言自身代表的对象;同理,我们可以把java对象转成json,通过解析json,python语言可以把json转成是自身的dict或者是list,json统一了交流的格式,使得信息可以在不同的语言间顺畅传递。
三、3A原则
单元测试用例
Arrange: 初始化测试对象或者准备测试数据
Act : 调用被测方法
Assert: 断言
服务间的接口测试用例
服务间的接口测试实际上是黑盒测试,3A原则也适用于这种测试用例的编写
- A: arrange
初始化测试数据,就是造数据,这里的数据有我们输入的数据,也有目标接口所涉及的资源,比如hr系统中的用户信息,我们必须先有几条人员的详细信息才能去测获取人员信息的接口(当然只是正常的流程,我们有时候还需要清掉数据以便测试资源为空的情况); - A: act 调用接口,传入输入数据;
- A: assert 断言,
对返回的资源信息进行断言,比如获取用户信息的接口返回了用户信息之后,我们要判断返回的用户是不是我们想要的那个用户,我们获取的是李雷的信息,接口如果返回韩梅梅,那么接口的逻辑就是不对的;
手工测试用例
手工的功能测试用例也可以用3A原则来编写。
- Arrange: 准备被测功能相关的测试数据,比如往系统里录入一批工单以便测试工单的分页功能
- Act : 调用被测的功能,实际上这就是我们一直讲的测试步骤
- Assert: 断言
总结
总之对于接口的自动化测试用例说来,遵循3A原则就意味着
- Arrange: 测试用例执行之前需要准备测试数据,包括需要输入的数据及存量数据
- Act: 通过不同的参数来调用接口,并拿到返回
- Assert: 必须做断言,否则用例就没有任何意义了