探测器 东莞网站建设,wordpress推送到公众号,太原网站设计制作,网站建设 选择题知其然亦知其所以然#xff0c;接口测试没有那么复杂#xff0c;但也没有那么简单。本文作者#xff1a;张敏#xff0c;软件测试工程师#xff0c;就职于一家容器平台解决方案公司#xff0c;负责 DevOps 产品的测试。什么是 APIAPI(Application Programming Interface)…知其然亦知其所以然接口测试没有那么复杂但也没有那么简单。本文作者张敏软件测试工程师就职于一家容器平台解决方案公司负责 DevOps 产品的测试。什么是 APIAPI(Application Programming Interface)是一些预先定义的函数或指软件系统不同组成部分衔接的约定。也可以理解为是两个应用程序之间通信的机制或者使用一组规则和协议的组件或计算机硬件。提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力而又无需访问源代码或理解内部工作机制的细节。API 被编写并使用在以下几个地方基于 Web 的应用程序电脑操作系统数据库系统计算机硬件软件库上面是很广义的 API 的概念包含了硬件和软件但我们常说的 API 其实是很狭义的 Web Service 或者说 Web API 。Web ServiceWeb Service 是一个平台独立的低耦合的自包含的、基于可编程的 web 的应用程序可使用开放的 XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序用于开发分布式的交互操作的应用程序。百度百科Web Service 是 API 的实现用于通过网络(通常是 http/https)在 2 个应用程序之间进行通信。所以 Web Service 和 Web API 是两个概念Web Service 是包装在 HTTP 中的 APIWeb Service 需要网络然而API 不需要网络所有的 Web Service 都是 APIs但是并不是所有的 API 都是 Web Service而实现 Web Service 的方式有三种【面向方法】RPC 远程过程调用的架构包括 XML-RPC/JSON-RPC 协议【面向消息】SOA 面向服务的架构包括 SOAP 协议【面向资源】REST 表现层状态转化的架构REST RESTful我们大多数时间最常接触到的就是 REST 风格的 Web ServiceREST 是 Web 服务的一种架构风格一种设计风格是一种思想非协议也非规范。简单看一下传统 API 设计以及 REST API 设计非 REST 设计# 查询用户http://localhost:8080/admin/getUser# 新增用户http://localhost:8080/admin/addUser# 更新用户http://localhost:8080/admin/updateUser# 删除用户http://localhost:8080/admin/deleteUser结论以不同的 URL(主要为使用动词)进行不同的操作。REST 架构# 查询用户GET http://localhost:8080/admin/user # 新增用户POST http://localhost:8080/admin/user # 更新用户PUT http://localhost:8080/admin/user # 删除用户DELETE http://localhost:8080/admin/user结论URL 只指定资源以 HTTP 方法动词进行不同的操作。用 HTTP STATUS/CODE 定义操作结果。RESTful 是一种常见的 REST 应用是遵循 REST 风格的 Web 服务REST 式的 Web Service 是一种 ROA(面向资源的架构)。并且有以下几个特点每一个 URI 代表一种资源客户端和服务器之间传递这种资源的某种表现层客户端通过四个 HTTP 动词(get、post、put、delete)对服务器端资源进行操作实现“表现层状态转化”。标准的 RESTful 只有这四种操作 GET、POST、PUT、DELETE。这四种动作对应资源的增删改查操作。查 GET 增 POST改 PUT 删 DELETE 而我们还常接触的 HEAD、PATCH 其实不属于标准的 RESTful可以理解为是开发人员以 RESTful 为标准约定的一种简单的方法。所以目前我们所接触的应用是没有完全按照 RESTful 风格进行开发的都是基于 RESTful 风格进行开发。幂等性对同一REST接口的多次访问得到的资源状态是相同的。安全性对该REST接口访问不会使服务器端资源的状态发生改变。URI URL提到了 URI就简单了解一下 URI 和 URL 的区别URI统一资源标识符URL统一资源定位符所有的 URL 都是 URI。举个简单的例子我们知道百度的地址是 https://www.baidu.com/但如果我们想阅读一篇关于 API 的文章不能通过 https://www.baidu.com/ 这个地址去浏览想要阅读的文章需要在后面加上一定的参数比如文章的 ID 等等。所以https://www.baidu.com/ 就是一个 URI它只是标识了一个资源但是并没有定位到某一具体的资源。而某篇文章的具体地址就是 URL 它定位了一个资源我们可以通过这个 URL 找寻到该文章的位置。所以 REST 架构是面向资源的架构它的每一条 URL 代表的就是一个具体的资源。什么是 API 测试直接测试应用程序编程接口(API)并作为集成测试的一部分来确定它们是否满足功能、可靠性、性能和安全性的期望。这就是 API 测试。API 测试的优势更早期的测试一旦实现了逻辑就可以构建测试来验证响应和数据的正确性而不必等待构建前端。更简单的测试维护UI是不断变化的但是 API 没有这样的挑战API 测试现在被认为是自动化测试的关键因为 API 现在是应用程序逻辑的主要接口。更快的解决问题当 API 测试失败时我们确切地知道系统哪里坏了哪里可以找到缺陷。更快的测试速度和更广的覆盖范围300 个UI测试可能需要 30 小时才能运行。300 个 API 测试可能在 3 分钟内运行。这意味着将在更短的时间内发现更多的 Bug同时也将立即修复它们。API 测试的内容如何进行 API 测试API 测试的开始时间并非在完成产品之后在获得接口文档以后就可以开始 API 测试。API 测试的测试用例需要根据接口文档进行撰写所以 API 测试十分依赖接口文档因此需要确保接口文档的正确性。测试前需要准备测试环境如果没有正式的测试环境可以先进行 Mock。API 测试的范围很广包括异常情况测试性能测试等等需要根据测试的内容选择合适的测试工具抓包类的工具包括 CharlesFiddlerWireshark 等测试脚本可以用过多种语言编写包括 PythonJavaGo 等测试工具包括 JMeterPostmanACCELQ 等等。测试执行时一旦出现问题可以十分快速的定位出现问题的部分及时反馈给开发人员进行修复。测试完成后需要完成测试报告对 API 测试进行整体的归纳总结。API 测试评判标准往更细的说我们经常接触的 API 测试其实就是对 URL 资源的操作。简单来说一个 URL 就是一个接口而 URL 则由以下几部分组成业务功能覆盖是否完整业务规则覆盖是否完整参数验证是否达到要求(边界、业务规则)接口异常场景覆盖是否完整接口覆盖率是否达到要求代码覆盖率是否达到要求性能指标是否满足要求安全指标是否满足要求(SQL 注入) 单个 API 测试往更细的说我们经常接触的 API 测试其实就是对 URL 资源的操作。简单来说一个 URL 就是一个接口而 URL 则由以下几部分组成请求协议http — 普通的 http 请求https — 加密的 http 请求传输数据更加安全ftp — 文件传输协议主要用来传输文件请求 IP服务器地址请求端口服务器所开放的端口不填写默认为80接口路径被操作的资源路径接口参数参数在接口路径后使用 “?” 与路径进行区分参数间使用 “” 间隔除以上部分需要测试一个 API还需要知道以下部分:http 请求方式包括 GET /POST/PUT/DELETE 等http 请求头请求头包含许多有关的客户端环境和请求正文的有用信息。例如请求头可以声明浏览器所用的语言请求正文的长度。示例Accept: application/json, text/plain, */*Content-Type: application/json;charsetUTF-8Authorization:eyJhbGciOiJIUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36http 请求体API 发送的 body 数据有多种格式json格式xml格式html格式二进制格式( 多数用于图片 )字符串格式当了解 API 的整个请求结构后就能进行 API 测试了。而 API 测试主要测试的内容也是 API 的参数设计测试用例时完全可以采用功能测试设计用例的方法来设计比如正常发送请求或者参数不传值传值类型不正确等等多种异常情况。 API 测试步骤如下:发送带有必要输入数据的请求获取具有输出数据的响应验证响应是否按要求返回 该 API 测试的验证方式就是通过 HTTP 响应码返回数据格式 返回数据类型返回数据信息这四部分进行验证。HTTP 响应码1xx(临时响应) 、2xx (成功) 、3xx (重定向) 、4xx(请求错误) 、 5xx(服务器错误)返回数据格式json、xml返回数据类型string、int、Booleans返回数据信息检验是否符合预期根据测试要求选择是否比对数据库数据保证测试结果的准确性 总结来说进行 API 测试的时候可以考虑以下几个方面:理解 API 的需求指定 API 输出状态(响应状态代码)关注小型函数 API(登录 API、获取令牌 API、健康检查 API)对 API 进行分组(同一类别的 API 共享一些公共信息如资源类型、路径等) 利用自动化功能进行 API 测试选择合适的自动化工具选择合适的验证方法创建正面测试和负面测试现场测试过程不要低估 API 自动化测试 开始愉快的 API 测试之旅吧-- END --