接口测试,主要是对接口文档、功能、可用性、安全等方面做验证。拿到一个接口验证的任务,我们需要从哪些方面来分析并开展测试呢,这里做个简要描述,实际测试时可以做个比对。
一、接口设计基础思考点:
类别 | 描述 |
可读性 | restful和语义化 |
安全 | API签名认证、网络限制、加密传输、黑白名单等 |
健壮性 | 尽量返回清晰的错误码列表(比如资源notfound错误码设计为404xx) |
可用性 | 设置限流、降级、超时等机制 |
性能 | 集群部署,负载均衡、容器化 |
监控 | 记录请求日志、打点上报、错误告警,便于定位问题 |
易用性 | 接口选填必填项描述准确,提供文档、测试工具 |
兼容性 | 不同版本号来区分新老接口,分清接口职责,当老接口参数过于复杂时,考虑提供新版本接口。 |
二、接口测试常用关注点:
大类 | 小类 | 描述 |
静态测试 | 文档检查 | 接口文档描述是否清晰(接口命名规则、入参描述及限制、返回字段及不同入参的返回描述、接口安全限制、接口性能描述、接口版本号信息等)、接口功能描述等 |
代码检查 | 代码扫描、代码白盒阅读和分析 | |
动态测试 | 安全性验证 | 签名验证、接口数据加密验证、大数据包请求破坏性、请求端白名单准入、sql注入等; |
健壮性验证 | 接口请求模拟各种能触发失败请求的数据,检查接口对应返回码有哪些,验证各种失败条件下,返回码是否正常、接口重入;各种异常请求数据,字段长度超长、超过边界值、请求端异常断开、请求重复提交(幂等测试)等 | |
性能验证 | 高并发验证,检查接口耗时、单一服务器及集群下的并发承载能力、高并发下的限流处理机制、异常下的降级处理、后端服务超时,导致接口处理超时等场景; | |
监控及报送 | 正常、异常情况下日志记录,监控数据的采集和报送功能是否正常; | |
向前兼容 | 接口改版,正常情况下,应该不影响原有调用方调用,做到向前兼容,需要验证向前兼容功能是否正常。 | |
基本功能验证 | 主要是接口提供基本功能,需要全流程走一遍,使用方法主要是边界值、逻辑判断、 |
三、接口测试工具:
Fiddler:Fiddler被称为抓包神器,它是一个http协议调试代理工具,它能够记录互联网之间的http协议通信,可以设置断点,查看所有“进出”Fiddler的数据(如cookie,html,js,css等文件)。Fiddler 要比其他的网络调试器要更加简单,操作便捷,格式显示清晰,这个工具也可以进行接口测试,但是不能写断言,只能用composer构造HTTP请求,需要人工确认返回结果的正确性。
Postman:是谷歌开发的一款接口测试软件,它使用简单,功能强大,能够发送任何类型的HTTP请求 (GET, HEAD, POST, PUT..),可以进行文件上传、响应验证、变量管理、环境参数管理,还可以批量管理和运行用例,并支持用例导出、导入,可以进行接口的自动化测试。缺点是自动化断言不够强大,不能和jenkins、代码管理库进行持续集成测试。
soapUI:是一个开源测试工具,通过soap/http来检查、调用,实现Web Service的接口和性能测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。soapUI pro是soapUI的商业非开源版本,实现的功能较开源的soapUI更多,国外公司使用较多。
Jmeter:是一款100%纯Java编写的免费开源工具,主要用来做性能测试,但也可以做接口测试,配合后置处理器与断言,可以满足大部分的接口测试场景,JMeter提供了BeanShell编程能力,可以写出比较灵活的测试脚本,通过jmeter+ant+jenkins可以实现接口和性能自动化测试。
代码实现接口测试:
java代码实现接口测试:java可以通过httpclient.jar包,利用JUnit或者TestNG这样的单元测试工具进行用例编写,结合jenkins实现接口持续集成测试。
python代码实现接口测试:python可以利用强大的第三方库Requests实现接口用例编写,结合unittest单元测试框架,生成测试报告,也可以和jenkins做持续集成测试。
推荐方式:初期,可以使用工具来做接口测试;后期,还是通过代码实现来做接口自动化测试,实现了接口测试框架后,后续接口测试可以非常自由 ,并且可以快速开展持续集成测试,更自由和灵活。