REST API 接口测试

课程视频传送门 -> 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输入不正确
发布了89 篇原创文章 · 获赞 1 · 访问量 4842

猜你喜欢

转载自blog.csdn.net/wy_hhxx/article/details/101560875