一、什么叫接口
接口一般来讲分为两种:
(1)程序内部的接口:方法与方法、模块与模块之间的交互,程序内部抛出的接口,如登录发帖,发帖就必须要登录,如果不登录不能发帖,发帖和登录这两个模块之间就要有交互,就会抛出一个接口,进行内部系统调用。
(2)系统对外的接口:从别人的 站或服务器上获取资源或信息,对方不会提供数据库共享,只能提供一个写好的方法来获取数据,如购物 站和第三方支付之间,购物 站支付时可选择第三方支付方法,但第三方不会提供自己的数据库给购物 站,只会提供一个接口,供购物 站进行调用,购物 站通过 络发送一些参数给接口,接口解析处理后返回结果给购物 站,购物 站解析结果进行下一步处理。
二、接口的分类
接口分类一般分为两种:
(1)webService接口:走soap协议通过http传输,请求 文和返回 文都是xml格式的。测试时需要通过工具才能进行调用、测试。少数公司还在使用这种接口,如医院等行业。
(2)http api接口:走http协议,通过路径来区分调用的方法,请求和 文都是key-value形式的,返回 文一般都是json串,有get和post等方法。目前来讲,是最常用的。
三、接口返回数据
接口返回的数据一般都是json串,json是一种通用的数据类型,格式为key-value。
四、接口测试
顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主要分为功能测试,性能测试,稳定性测试,安全性测试等。
在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比,是每个公司开展自动化测试的首选。
程序内部的接口错误常见形式:
1、把调用模块接收到的形参数量是否等于调用模块发送的实参数量外,顺序是否正确2、实参的属性(如数据类型和大小)是否与相应形参的属性相匹配3、实参的量纲是否与对应形参的量纲相匹配例来说,是否形参以度为单位而实参以弧度为单位4、此模块传递给彼模块的实参数量,是否等于彼模块期望的形参数量5、此模块传递给彼模块的实参的属性,是否与彼模块相应形参的属性相匹配6、此模块传递给彼模块的实参的量纲,是否与彼模块相应形参的量纲相匹配7、如果调用了内置函数,实参的数量、属性、顺序是否正确8、如果某个模块或类有多个入口点,是否引用了与当前入口无关的形参9、是否有子程序改变了某个原本仅为输入值的形参 10、如果存在全局变量,在所有引用他们的模块中,他们的定义和属性是否相同11、常数是否以实参形式传递过
五、系统对外的接口测试自动化:
1、基本的接口功能自动化测试流程如下:
需求分析 -> 用例设计 -> 脚本开发 -> 测试执行 -> 结果分析
2、需求分析:
需求分析是参考需求、设计等文档,在了解需求的基础上还需清楚内部的实现逻辑,并且可以在这一阶段提出需求、设计存在的不合理或遗漏之处。
如:豆瓣电影搜索接口,我理解的需求即是支持对片名,演职人员及标签的搜索,并分页返回搜索结果。
3、用例设计:
用例设计是在理解接口测试需求的基础上,使用MindManager或XMind等思维导图软件编写测试用例设计,主要内容包括参数校验,功能校验、业务场景校验、安全性及性能校验等,常用的用例设计方法有等价类划分法,边界值分析法,场景分析法,因果图,正交表等。
针对豆瓣电影搜索接口功能测试部分,我们主要从参数校验,功能校验,业务场景(或业务逻辑)校验三方面,设计测试用例如下:
业务逻辑用例设计:
业务逻辑方面的测试用例主要是针对服务端接口的处理逻辑进行的用例设计,这种用例设计不是针对某个功能点是否实现,而是对接口的处理逻辑以及一些相互依赖的业务进行验证,通常依照接口的逻辑流程图来进行。举一个例子,豆瓣电影查询中的两个动作:登录和评价操作,这两个业务是相互依赖的,评价操作必须在登录完成后(登录状态下),否则无法完成评价,这个时候我们就可以设计这样一条case:没有登录的状态下进行下单操作,看服务端如何处理。
可以看到这一块有两个判断,我们需要对不同的判断分支都设计用例,以保证流程图中涉及到的分支我们都有测试用例覆盖。图中涉及到的不同的分支有:
1.abdf;
2.acg;
3.abdeg;
相应的,我们的用例就应该是:
1.userInfo != null && value(userGroup) != 0;
2.userInfo == null;
3.userInfo != null && value(userGroup) == 0;
业务逻辑的用例设计主要是以服务端接口内部的逻辑流程图为基础,针对流程图中的判断和分支进行用例设计,保证服务端接口的每一种逻辑下都有测试用例覆盖。
性能和安全性方面:
服务器的性能往往是个非常重要的关注点,在实际的测试中我们主要关注的是接口的QPS数值,以及CPU和内存占用等性能指标,通常借助于其他工具比如LoadRunner进行性能测试。安全性方面,主要考虑一些常见的安全策略比如请求加密、sql注入等等。
4、脚本开发:
依据上面编写的测试用例设计,我们使用python+nosetests框架编写了相关自动化测试脚本。可以完整实现接口自动化测试、自动执行功能 。
5 相关lib安装
必要的lib库如下,使用pip命令安装即可:
5.1 接口调用
使用requests库,我们可以很方便的编写上述接口调用方法(如搜索q=刘德华,示例代码如下):
在实际编写自动化测试脚本时,我们需要进行一些封装。如下代码中我们对豆瓣电影搜索接口进行了封装,test_q方法只需使用nosetests提供的yield方法即可很方便的循环执行列表qs中每一个测试集:
我们按照测试用例设计,依次编写每个功能的自动化测试脚本即可。
5.2 结果校验
在手工测试接口的时候,我们需要通过接口返回的结果判断本次测试是否通过,自动化测试也是如此。
对于本次的接口,我们搜索“q=刘德华”,我们需要判断返回的结果中是否含有“演职人员刘德华或片名刘德华”,搜索“tag=喜剧”时,需要判断返回的结果中电影类型是否为“喜剧”,结果分页时需要校验返回的结果数是否正确等。完整结果校验代码如下:
5.3 执行测试
对于上述测试脚本,我们使用nosetests命令可以方便的运行自动化测试,并可使用nose-html-reporting插件生成html格式测试 告。
运行命令如下:
5.4 发送邮件 告
测试完成之后,我们可以使用smtplib模块提供的方法发送html格式测试 告。基本流程是读取测试 告 -> 添加邮件内容及附件 -> 连接邮件服务器 -> 发送邮件 -> 退出,示例代码如下:
6. 结果分析
打开nosetests运行完成后生成的测试 告,可以看出本次测试共执行了51条测试用例,50条成功,1条失败。
失败的用例可以看到传入的参数是:{“count”: -10, “tag”: “喜剧”},此时返回的结果数与我们的期望结果不一致(count为负数时,期望结果是接口 错或使用默认值20,但实际返回的结果数目是189。赶紧去给豆瓣提bug啦- -)
7、MOCK接口
在实际工作中,可能要测的接口还没有被开发完全,我们就需要在自己的机器上MOCK出接口,让它实现接口设计文档要求的功能,帮助我们不耽误工作进度。
我们可以借助unittest内置的mock服务实现mock接口
举例:
使用mock服务虚拟出接口:
文章参考:
https://www.cnblogs.com/lovesoo/p/7845731.html
https://www.cnblogs.com/bell1991/p/6904809.html
https://blog.csdn.net/weixin_44988085/article/details/97915650ps_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522161018728916780277096109%252522%25252C%252522scm%252522%25253A%25252220140713.130102334..%252522%25257D&request_id=161018728916780277096109&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-97915650.first_rank_v2_pc_rank_v29&utm_term=什么是接口
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!