背景介绍 为何要作借口测试? 不少系统关联都是基于接口来实现的,接口测试能够将复杂的系统关联进行简化. 接口功能比较单一,可以比较好的进行测试覆盖,也相对容易实现自动化持续集成. 接口至关于界面功能,会更底层一些,测试覆盖会更容易. 软件开发生命周期? 接口测试在单口测试后,UI测试以后 接口测试能够得到较高的投资回报(接口测试比单元测试的粒度要粗一些) 什么是接口测试? (什么是接口: 电梯、开车刹车、搜索引擎,不用关注内部,只关注外部应用) 接口测试又称为API测试 Application Programming Interface 接口测试是测试系统组件间接口的一种测试. 重点关注数据传递. 接口测试通常会用于多系统间交互开发,或者拥有多个子系统的应用系统开发的测试. Web Service 一种跨编程语言和跨操做系统平台的远程调用技术 最重要的两种实现方式: SOAP(只支持xml格式,但拥有良好的安全性.银行项目,能够考虑使用SOAP协议) & REST(http: json或其余格式,是一种设计规范) Web2.0时代,REST方法的普遍普及. SOAP & REST SOAP - Simple Object Access Protocol 交换数据一种协议规范,是一种轻量的、简单的、基于XML的协议. REST - Representational State Transfer 一种软件架构风格,能够下降开发的复杂性,提升系统的可伸缩性. 二者的区别: 安全性: SOAP会好于REST 效率和易用性: REST更胜一筹 成熟度: 总的来讲SOAP(存在时间比较长)在成熟度上因为REST REST or RESTFUL 区别: RESTful是REST的形容词形式 RESTful API指的是REST风格的接口 通常来讲REST等于RESTful,区别一个是名词一个是形容词 REST API (基于http的) 出现: REST最先是由Roy Fielding博士发表的论文中提到的 定义: 简单来讲REST是一种系统架构设计风格(而非标准),一种分布式系统的应用层解决方案 目的: Client和Server端进一步解耦 应用: 最为经典的莫过于github API 核心思想是资源 资源: 建立资源 - HTTP POST (Create) 至关于数据库的CRUD 获取资源 - HTTP GET (Retrieve) 更新资源 - HTTP PUT (Update) 删除资源 - HTTP DELETE (Delete) REST特色总结: 面向资源的接口设计 抽象操做为基础的CRUD Http是应用协议而非传输协议 REST支持的方法: Verd 描述 HEAD(SELECT) 只获取某个资源的头部信息 GET(SELECT) 获取资源 POST(CREATE) 建立资源 PATCH(UPDATE) 更新资源的部分属性(不多用,通常用POST代替) PUT(UPDATE) 更新资源,客户端须要提供新建资源的全部属性 DELETE(DELETE) 删除资源 补充一些概念: 幂等性(Idempotent): 是一个数学上的概念,在这里表示发送一次或屡次请求引发的边界效应是一致的.Post是不幂等方法 安全性: GET、HEAD和OPTIONS均被认为是安全的方法,由于它们旨在实现对数据的获取,并不具备“边界效应(Side Effect)” 设计规范: 协议: 使用HTTPs协议,确保交互数据的传输安全. 域名: 应该尽可能将API部署在专用域名之下. https://api.example.com 版本控制: 将版本号放在URL或者Header中 路径: 只能包含路径,不能包括动词 过滤信息: ?limit=10 ?offset=10 ?page=1 ?sortby=name Hypermedia API: 在返回结果中提供相关资源的连接,连向其余API方法 验证(Authentication): 肯定用户是其申明的身份,好比提供帐户的密码. 常见的HTTP status code状态码: 200(OK) - 若是如今资源已被更改 201(created) - 若是新资源被建立 202(accepted) - 已接受处理请求但还没有完成(异步处理) 301(Moved Permanently) - 资源的URL被更新 303(See Other) - 其余(如,均衡负载) 400(bad request) - 指代坏请求 406(no acceptable) - 服务端不支持所需表示 409(conflict) - 通用冲突 412(Precondition Failed) - 前置条件失败(如执行条件更新时的冲突) 415(unsupported media type) - 接受到的表示不受支持 500(internal server error) - 通用错误响应 503(Service Unavailable) - 服务当前没法处理请求 返回结果设计: 通用错误码, 具体产品由具体产品api文档给出 { "msg":"uri_not_found", "code":1001, "request":"GET Vv2VphotoV132" } REST API接口实例 GET /producet: 列出全部产品 POST /product: 新建一个商品 GET /product/ID: 获取某个指定商品的信息 PUT /product/ID: 更新某个指定商品的信息 DELETE /product/ID: 删除某个商品 GET /product/ID/purchase: 列出某个指定商品的全部投资者 GET /product/ID/purchase/ID: 获取某个指定商品的指定投资者信息 手动测试 测试方法: 借助工具来完成 拼接参数执行请求 自动化测试 测试方法: 编写自动化脚本实现 一劳永逸,加入回归测试集合(天天能够按期启动) 须要必定编码经验 常见的测试工具: Postman JMeter 性能测试,压力测试工具,也能够作RestAPI的测试 RestClient 等等 功能测试: 测试覆盖: 业务流程。支付功能 边界值,特殊字符(0-255),特殊字符的验证(中日文,双字符) 参数类型,必选项,可选项等 性能测试: 测试覆盖: 并发数: 同一时间,同时发给用户的数量, 好比说:能够支持50个并发,100个并发,咱们能够采用逐步加压的方式,找到系统支持的最大并发量 吞吐量,tps(性能指标) 错误率等 安全型测试 测试覆盖: 敏感数据加密 恶意攻击 REST API的测试步骤 了解接口格式 编写测试用例 测试用例评审(测试团队和开发团队一块评审) 开始测试 完成测试报告(中间要通过屡次的迭代) 结束 Postman介绍 Postman是Google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的Chrome插件. 主要功能包括: 模拟各类HTTP requests Collection功能(测试集合) 人性化的Response整理 内置测试脚本语言 设定变量与环境 HTTP Header: Accept: 指定客户端可以接收的内容类型 Accpet-Charset: 浏览器能够接受的字符编码集 Authorization: HTTP受权的受权证书 Content-Type: 请求的与实体对应的MIME信息 Referer: 先前网页的地址,当前请求网页紧随其后,指来路(引流) contect-type: application/x-www-form-urlencoded: 请求默认方式,数据是简单、平面的key-value键值对 application/json: 数据是复杂的嵌套关系,有多层数据 multipart/form-data: 既能够发送文本数据也支持二进制数据上载