课程视频传送门 -> REST API 接口测试 https://www.imooc.com/learn/1048
接口测试 : 验证单个方法的正确性、测试系统组件/模块间接口、重点关注数据传递(双向数据传递,eg:搜索引擎)
接口测试优点:功能比较单一,可以比较好地做测试覆盖(相对界面功能更底层),也相对容易实现自动化持续集成
接口测试位置:在单元测试之后,UI测试之前
API (Application Programming Interface)
WebService (一种远程调用技术) 的两种实现方式:SOAP与 REST, 比较如下,
- 安全性和成熟度:SOAP优 (银行软件优先考虑SOAP)
- 效率和易用性:REST优
SOAP(Simple Object Access Protocol) -> 交换数据的一种协议规范,轻量、简单、基于XML
REST(Representational State Transfer) -> 是一种软件架构风格风格,面向资源、CRUD、HTTP传输、可以基于JSON或其它
创建资源 | HTTP POST (C - Create) |
获取资源 | HTTP GET (R - Retrieve) |
更新资源 | HTTP PUT (U - Update) |
删除资源 | HTTP DELETE (D- Delete) |
幂等性(Idempotent):表示发送一次和多次请求引起的副作用是一致的,例如GET是幂等方法,POST不是幂等方法。
安全性:GET、HEAD、OPTIONS 均被认为是安全的方法,因为它们旨在实现对数据的获取,不具有副作用(Side Effect)。
$ REST API 设计规范:
协议 | 使用HTTPS协议,确保交换数据的传输安全 |
域名 | 应该尽量将API部署在专用域名下,例如 https://api.example.com |
版本控制 | 将版本号放在URL或Header中 |
路径 | 只能包含名词,不能包含动词 |
过滤信息 | ?limit=10 ?offset=10 ?page=1 ?sortedby=name |
Hypermedia API | 在返回结果中提供相关资源的链接,连向其它API方法 |
验证(Authentication) | 确定用户是其声明的身份,比如提供账户的密码 |
授权(Authorization) | 保证用户有对请求资源 特定的操作权限。比如用户私人信息只有自己能访问;有些特殊的操作只有管理员有权限,其他用户只读 |
$ 常用的HTTP状态码:
百度百科传送门 -> https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
$返回结果设计:
通用错误码,具体产品由其API文档提供
{
"msg”:"uri_not_found",
"code":1001, //例如:系统在公司代号+模块在系统中的代号+唯一性代号
"request":"GET\/v2\/photo\/132"
}
$ REST API 接口实例
GET /product 列出所有商品
POST /product 新建一个商品
GET /product/ID 获取某个指定商品的信息
PUT /product/ID 更新某个指定商品的信息
DELETE /product/ID 删除某个商品
GET /product/ID/purchase 列出某个商品的所有投资者
GET /product/ID/purchase/ID 列出某个商品的指定投资者信息
$ 接口测试流程
手动测试:借助工具、拼接参数执行请求
自动化测试:编写自动化脚本,可以加入回归测试集合、持续集成
$ 测试工具
Postman(Chrome的插件)
JMeter
RestClient
$ 功能测试
测试覆盖:
业务流程
参数类型,必选项、可选项
边界值,特殊字符、语言支持
$ 性能测试
测试覆盖:
并发数
吞吐量,tps
出错率...
$ 安全性测试
测试覆盖:
测试覆盖敏感数据加密
恶意攻击
$ 接口测试步骤
1.了解测试接口格式 (URL、输入项类型、可选项/必选项、返回结果格式...)
2.编写测试用例(2,3可能需要重复)
3.测试用例评审
4.开始测试(可能要多个迭代,直到达到测试退出条件)
5.完成测试报告
6.结束
=================================================================================
$ 接口测试工具Postman
Postman是Google开发的一款功能强大的网页调试与发送网页HTTP请求、并能运行岑氏用例的Chrome 插件
下载地址:https://www.getpostman.com/downloads/
提前安装 .net4.5: https://www.microsoft.com/en-us/download/details.aspx?id=42642
Postman界面如下
主要功能包括:
模拟各种HTTP requests
Collection功能(测试集合)
人性化的Response整理
内置测试脚本语言
设定变量与环境
$ HTTP Header
Accept:指定客户端能够接收的内容类型
Accept-Charset:浏览器可以接受的字符编码集
Authorization:HTTP授权的授权证书
Content-Type:请求的与实体对应的MIME信息
Refer:先前网页的地址,当前请求网页紧随其后
关于Content-Type
application/x-www-form-urlencoded:请求默认方式,数据是简单、平面的key-value键值对
application/json:数据是复杂的嵌套关系,有多层数据
multipart/form-data:既可以发送文本数据,也支持二进制数据
=================================================================================
$ 写一个REST API测试计划
1.需求描述:
GET: https://localhost:8080/MyWebsite/user/ | Header:Content-Type = application/json Body:空 Response:返回所有User对象 Status code:200 |
GET: https://localhost:8080/MyWebsite/user/{id} | Header:Content-Type = application/json Body:空 Response:返回指定id的User对象 Status code:200 |
POST: https://localhost:8080/MyWebsite/user/ | Header:Content-Type = application/json Body:name(String类型,不为空不可重复),age(int类型,在0和100之间),salary(double类型) Response:新加User对象 Status code:201(新资源被创建) |
PUT: https://localhost:8080/MyWebsite/user/{id} | Header:Content-Type = application/json Body:name(String类型,不为空不可重复),age(int类型,在0和100之间),salary(double类型) Response:修改User对象 Status code:200 |
DELETE: https://localhost:8080/MyWebsite/user/{id} | Header:Content-Type = application/json Body:空 Response:删除id的User对象 Status code:204 |
DELETE: https://localhost:8080/MyWebsite/user/ | Header:Content-Type = application/json Body:空 Response:删除所有User对象 Status code:204 |
错误返回 | Code:4 -> Message:找不到指定id对象 Code:5 -> Message:对象已经存在 Code:6 -> Message:参数不匹配 |
2.测试计划
业务流程 - GET | 正向用例:返回所有对象和返回某一个对象 负向用例:一个不存在的id URL输入不正确 |
业务流程 - POST | 正向用例:输入正确参数新加一个对象(特殊字符,中文等) 负向用例:参数name为空/重复 参数age为0/-1/100/101/字符串/null/空 #边界值、错误类型 参数salary为整数/带小数/负数/null/空 |
业务流程 - PUT | 正向用例:输入正确参数修改一个对象(特殊字符,中文等) 负向用例:参数id为空/无效值 参数name为空/重复 参数age为0/-1/100/101/字符串/null/空 参数salary为整数/带小数/负数/null/空 |
业务流程 - DELETE | 正向用例:删除所有对象和删除某一个对象 负向用例:一个不存在的id URL输入不正确 |