目录
前言:
接口测试环境准备
Jdk1.8或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html
Jmeter 下载址址:http://jmeter.apache.org/download_jmeter.cgi
插件的下载安装地址:http://www.jmeter-plugins.org/
快速生产脚本生成:
使用 jemter 原生的录制器 手写 jmeter 脚本,但是需要对 jmeter 相对熟悉, 使用 fiddles 抓包工具导出生产,针对 web 页面个人推荐 BlazeMeter 的谷歌插件
一、什么是接口测试?为什么要接口测试?
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
接口测试相对于UI来说,更加稳定,也可以说接口测试是一种特殊的单元测试, 当一个系统提供了大量的后台服务,有较少或者基本没有页面操作,比较适合开展 接口测试。例如某个系统大概有100多个对外的接口,每次上线,测试人员不得不一个 一个验证,此时如果开展自动化,将大大提高回归的效率和测试的覆盖率。
二、接口测试范围
-
业务功能(包括正常、异常场景是否实现,会涉及到等价类划分、边界值分析法、错误推断法、因果图法、判断表驱动法、正交试验法、功能图法、场景法)
-
业务规则(覆盖度是否全面)
-
参数验证(边界、业务规则是否达到要求)
-
异常场景(重复提交、并发提交、事务中断、多机环境、大数据量测试,数据异常、环境异常)
-
性能测试(响应时间、吞吐量、并发数、资源要求)
-
安全测试(权限验证、SQL 注入等)
三、接口测试流程
一般接口测试会从这几个方面去考虑到:
1、需求分析 2、Api文档分析与评审 3、测试计划编写 4、用例设计与评审 5、环境搭建(工具) 6、执行用例 7、缺陷管理 8、测试报告
大致是一样的,可参考这几个流程图:
图1
图2:
也可参考地址:https://www.cnblogs.com/orangezhangzz/p/14186855.html
四、接口都有哪些类型?以及分类
接口一般分为两种:1.程序内部的接口2.系统对外的接口
系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。
程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。
接口的分类:
1.webservice接口
2.httpapi接口
webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
httpapi接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍稍加工可以转换成其他语言的数据类型,比如可以转换成Python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等。)
分类如下:
在开始做接口测试之前,有必要了解一下接口的分类。这里的分类,主要是HTTP请求方法分类。下面是我们最常见的GET/POST/PUT/DELETE四种方法
五、接口测试重点
检查接口的功能:检查接口的功能有没有实现,也就是请求会不会成功,如果不成功会不会返回错误代号(或错误信息)
检查接口返回的数据:检查接口返回的数据、数据格式、数据类型是否与预期一致(正向且传递的参数正常);
检查接口的容错性:接口是否可以正常处理(假如传递的参数足够大或者为负、空值时)
检查接口的性能:http 请求接口大多与后端执行的 SQL 语句性能、算法等比较相关。
检查接口的安全性:外部调用的接口尤为重要
六、接口涉及的用例涉及方法
大致从这几个方面去考虑:
用例不是一次完成的,书写测试用例本身和完善代码一样,也是一个循序渐进的过程。
首先,必须熟读需求说明书和接口设计文档,了解每个接口具体的使用场景,明白软件的性能指标。
其次,设计接口测试用例:开始在编码阶段,测试人员根据需求说明书和接口设计文档设计接口测试用例。
然后,code review:开发完成编码后,在时间充裕的条件下,要进行 code review,一方面是检查开发的代码功能逻辑是否正确,另一方面通过review开发的代码来补充接口测试用例。
最后,完成用例后,随着对系统了解的增多,不断提高用例精度,对测试用例需要进行定期review,一旦测试需求发生变化,测试用例必须重新维护。
也可以从这几个方面考虑:
①功能:
功能是否正常;功能是否按照接口文档实现;
举例:有些添加到购物车,需要登录才能添加。也就是业务要求不支持游客添加购物车功能,如果设计一个没有登录的用户,然后去测试添加购物车接口,结果接口能添加到购物车,说明功能不正常,不符合需求和接口文档描述。
②逻辑业务:
是否依赖业务;
举例:该接口调用之前,需要调用登录接口,如果不登录也能请求数据,不符合业务规则。
③异常:
参数异常和数据异常;
参数异常:关键字参数,参数为空,多,少参数,错误参数;
数据异常:关键字数据,数据为空,长度不一致,错误数据;
举例:不管数据异常还是参数异常,测试点差不多,一个参数有key和value,key表示参数,value表示数据。
第一,看看参数和数据能不能支持关键字,例如Java中的保留关键字等等;
第二,就是参数和数据都为空,看看是否做了判断;
第三,参数多和少,例如有两个参数的接口,你需要设计一个三个参数的用例,一个只有一个参数的用例。数据那边长度不一致,例如设计很长的字符串是否支持,因为数据库创建表过程都设置好了每个字段的长度。输入错误的参数和数据,例如故意输出单词等等。
④安全测试用例设计:
cookie:有cookie才能获取数据,如果不带cookie还有信息返回,说明有问题
header:正常接口带header信息,删除header看是否能够返回数据。
唯一识别码:app手机识别码,一般是唯一的。
注:安全测试主要从上面三点检查。第三个是唯一识别码,主要是指app上手机的识别码,一般很少用到,除非很严格的接口测试,例如银行app登录,需要指纹,而指纹来源手机,一般有一个手机识别码判断过程。
可参考下面几张图片来看看:
图片1:
图片2:
图片3
可参考地址:https://blog.youkuaiyun.com/m0_57133702/article/details/116140705
七、测试用例需要注意事项
八、接口测试用例模板和数据准备
用例模板包含:
用例编号
模块
用例标题
接口名称(默认使用接口文档上的接口名称)
请求url
请求方法
请求头
请求数据
请求体
预期结果:
响应状态吗
响应数据
用例模板参考如下:
也可参考:
数据准备内容:
九、接口使用的测试工具
接口工具:Postman/Jmeter/SouapUI/python,单个接口测试时使用 Postman,多个接口测试时可以使用 Jmeter,或者使用 python 脚本;
Jmeter:可以测试各种类型的接口,不支持的也可以通过网上或自己编写的插件进行扩展。
postman:功能上更简单,组织方式也更轻量级,它主要针对的就是单个的 HTTP 请求。 接口测试工具根据对比
十、接口测试常见的问题和原则
常见问题:
接口测试经常遇到如下的 bug 和问题:
(1)传入参数处理不当,导致程序 crash;
(2)类型溢出,导致数据读出和写入不一致;
(3)因对象权限为进行校验,可以访问其他用户敏感信息;
(4)状态处理不当,导致逻辑出现错乱;
(5)逻辑校验不完善,可利用漏洞获取非正当利益等;
原则:
1) 基础配置,如域名、环境配置等,单出文件配置,方便不同环境测试、脚本维护
(2) 明确接口实现什么样的功能,实际需要什么样的功能,是否一致
(3) 接口测试数据太多,用该数据驱动模式更有层次,且易于维护
(4) 要在众多测试用例中选出冒烟测试用例及可用于性能测试的用例
(5) 先单接口测试,在多接口业务测试
(6) 测试完成以后,需要清洗脏数据
十一、接口测试结果报告
参考这地址:https://blog.youkuaiyun.com/weixin_43145997/article/details/124820310
十二、接口测试过程验证点
1、接口返回数据 a) 返回json数据的层次关系是否与文档一致 b) 数值类型数据: 特别是金额,负数、小数转为json输出是否正确 c)
接口返回数据与接口文档一致 d) 接口返回数据和数据库一致 e)
接口返回数据符合业务逻辑(比如转账功能,从一个账户扣款,另一个要增加相应金额) f)
对于列表,应该根据请求参数,也应该验证列表的长度是否与期望值一致 g) 负面测试用例,应验证ERROR INFO是否与实际相匹配 2、数据库
a) 接口传入数据与插入DB的数据一致性: b) 前端某个操作涉及后台DB多张表时,每张表都要检验数据正确性。 3、安全层面: a)
后端接口返回给前端的数据包含敏感信息(如:姓名、身份证号、卡号、手机号、加密后的密码等)时,不能明文传输,需要加密。 b)
后台打日志要求对于敏感信息不能打出,或者进行加星号脱敏后打出,具体有:
(1)身份证号,用户密码(含加密后),用户手机号码,用户姓名,银行卡号 (2)身份证号码脱敏字段为生日时,生日在日志中不能打出
4、性能层面: a) 接口响应时间: 接口处理数据的时间也是测试需要关注的一个点。牵扯到内部就是算法与代码的优化 b)
接口数据包大小:接口传递的数据包大小也需要关注,特别是返回给前端的接口,要把不同接口数据包大小需要做限制。 c)
并发承载能力:多用户并发时接口可以承载合同中的并发量。
十三、为什么写接口测试用例
功能测试用例,大家都写过。接口测试用例,很多人没有写过。在写之前,我们来讨论下,为什么要写接口用例。
①理清思路,避免漏测
②提高测试效率
③跟进测试进度
④告诉领导做过
⑤跟进重复性工作
上面五点,结合自己测试实际经验,应该来说是很好理解和认同的。有用例,就有思路,避免漏掉测试点。跟着测试用例走,一方面,可以避免随机测试那种没有目的性的测试,提高测试效率;另一方面,这对领导检查你的工作、同事询问你的进度时有很多便利,也能够提高对接效率。
总结
` 以上仅供参考内容