什么是 API ?

  • 是一种软件的中间件,它允许两个应用程序之间通过一套预先定义的规则和协议来相互通信、交换数据和执行操作。

  • 它定义了软件如何请求以其他软件的功能和数据,就像外卖菜单一样,让开发人员无需了解底层细节就能使用其他服务,从而加速开发过程。

API的工作原理

  • 请求-响应模式:
    API使用请求-响应模式进行通信。 一个应用程序(客户端)向API发送一个请求,API处理该请求并返回一个响应,通常使用JSON或XML等标准数据格式。

  • 隐藏内部细节:
    API的目的是隐藏复杂的内部系统细节,只暴露对程序员有用的部分,并保持接口的一致性,即使内部实现发生变化。

  • 现实世界的类比:
    可以把它想象成一个ATM机。 用户通过ATM的界面(API)进行操作,但不需要知道银行内部如何处理交易的复杂流程。

API的应用和重要性

  • 促进集成:
    API允许开发人员将来自其他应用程序的数据和服务集成到自己的应用中,而无需从头开始构建所有功能。

  • 支持多种功能:
    例如,社交媒体应用程序使用API来获取和发布帖子;地图应用程序使用地理位置API来显示步行性评分;电子商务网站使用支付API来处理交易。

  • 现代技术的基石:
    API对于构建现代互联软件至关重要,是移动应用、云服务和微服务等技术的基础。

API的种类

  • 开放API:: 可供所有第三方开发者使用的公共API。
  • 合作伙伴API:: 仅供特定的业务合作伙伴使用的API。
  • 内部API:: 供同一组织内的其他团队使用的API。

按技术架构或协议划分

REST API

  • 描述:目前最流行、最常用的API架构风格。它基于HTTP协议,使用标准的HTTP方法(GET, POST, PUT, DELETE),数据格式通常为JSON。

  • 特点:无状态、资源导向、易于理解和实现。

  • 例子:GitHub API、大多数现代Web服务提供的API。

SOAP API

  • 描述:一种较老的、基于XML的协议。它定义了一套严格的标准和规范,包括安全性和事务处理。

  • 特点:严格、安全、可靠,但也比REST更复杂、更重。

  • 例子:许多传统企业级系统和金融支付系统。

GraphQL API

  • 描述:由Facebook创建的一种查询语言和运行时。它允许客户端精确地指定需要的数据,避免了REST API中常见的“过度
    取”或“获取不足”的问题。

  • 特点:灵活、高效,一次请求即可获取所有所需资源。

  • 例子:GitHub的公共API也提供了GraphQL版本。

gRPC API

  • 描述:由Google开发的高性能、开源的RPC框架。它使用HTTP/2作为传输协议,并使用Protocol Buffers作为接口定义语言和序列化工具。

  • 特点:速度快、效率高、支持双向流,特别适合微服务之间的内部通信。

  • 例子:在大型分布式系统和微服务架构中非常常见。

WebSocket API

  • 描述:提供全双工、双向的实时通信渠道。与HTTP的一次请求-一次响应模式不同,WebSocket连接建立后,服务器可以主动向
    户端推送数据。

  • 特点:实时性高,适合聊天应用、实时游戏、在线交易平台等。

  • 例子:股票行情推送、在线协作工具。

按功能或用途划分

  • 这是根据API提供的能力来分类。

1.操作系统API

  • 描述:操作系统提供的函数集合,允许应用程序使用操作系统的功能,如文件管理、内存分配、创建图形界面等。

  • 例子:Windows API、Linux的系统调用。

2.数据库API

  • 描述:允许应用程序与数据库进行交互,执行查询、更新、删除等操作。

  • 例子:JDBC、ODBC。

3.远程API

  • 描述:允许应用程序通过网络访问位于另一台计算机(远程)上的资源或服务。我们日常谈论的Web API大多属于此类。

  • 例子:所有通过HTTP调用的RESTful API。

4.硬件API

  • 描述:允许软件与硬件设备交互,例如控制摄像头、打印机、传感器等。

  • 例子:手机上的摄像头API、蓝牙API。

总结

分类维度 主型要类 特点与例子
分类维度 主型要类 特点与例子
使用范围 私有API、合作伙伴API、公开API 按受众和商业策略划分
技术架构 REST API、SOAP API、GraphQL API、gRPC API、WebSocket API 按通信协议和数据格式划分
功能用途 操作系统API、数据库API、远程API、硬件API 按提供的具体功能划分

API 测试方式

一、API测试核心类型

1.功能测试

  • 正确性验证:输入合法参数,检查返回数据、状态码是否符合预期。

  • 错误处理:输入非法参数(如空值、超长字符),验证错误码和提示信息。

  • 边界值测试:测试参数的最小/最大值、临界值。

  • 必填字段验证:忽略必填参数,检查接口是否正确处理。

2.性能测试

  • 负载测试:模拟多用户并发请求,检查响应时间、吞吐量。

  • 压力测试:逐步增加负载至极限,观察系统崩溃点及恢复能力。

  • 稳定性测试:长时间运行接口,检测内存泄漏、性能下降等问题。

3.安全测试

  • 身份认证:测试Token、API Key等认证机制是否有效。

  • 权限控制:验证不同角色用户访问受限资源的权限。

  • 数据安全:检查敏感数据(如密码、身份证号)是否加密传输。

  • SQL注入/XSS:模拟攻击参数,验证接口防护能力。

4.兼容性测试

  • 不同操作系统、浏览器、设备类型下的接口行为。

  • API版本兼容性(如v1与v2接口共存场景)。


二、常用测试工具

1.Postman

  • 图形化界面,支持自动化测试、环境变量管理。

  • 示例:设置预请求脚本、测试断言(如pm.response.to.have.status(200))。

2.Swagger/OpenAPI

  • 通过API文档生成测试用例,验证接口规范符合度。

3.JMeter

  • 性能测试为主,支持分布式压测、生成详细报告。

4.自动化框架

  • Python:requests + pytest(示例代码):
1
2
3
4
5
import requests
def test_api_endpoint():
response = requests.get("https://api.example.com/users") #可以修改这里
assert response.status_code == 200
assert "application/json" in response.headers["Content-Type"]
  • JavaScript:Supertest + Mocha。

三、测试步骤

1.理解API文档

  • 明确请求方法(GET/POST/PUT/DELETE)、参数、响应格式。

2.设计测试用例

  • 覆盖正常场景、异常场景(如网络超时、服务器错误)。

3.执行测试

  • 手动测试:使用Postman、curl命令快速验证。

  • 自动化测试:集成到CI/CD流水线(如Jenkins、GitHub Actions)。

4.验证与报告

  • 检查响应数据、状态码、头部信息。

  • 记录缺陷并跟踪修复(如使用Jira)。

四、重点场景测试

1.幂等性测试

  • 对同一请求多次提交,结果是否一致(如支付接口)。

2.数据一致性

  • 检查数据库与API返回数据是否匹配。

3.第三方依赖

  • 模拟依赖服务故障(如使用WireMock模拟外部API失败)。

五、最佳实践

  • 环境隔离:区分测试、预生产、生产环境。

  • 数据管理:使用独立测试数据,避免污染生产环境。

  • 监控与日志:记录接口响应时间、错误率,便于排查问题。

  • 文档维护:及时更新测试用例与API变更同步。

六、示例:Postman自动化测试

  1. 在Tests标签中编写断言:
1
2
pm.test("Status code is 200", () => pm.response.to.have.status(200));
pm.test("Response time < 500ms", () => pm.expect(pm.response.responseTime).to.be.below(500));
  1. 使用Collection Runner批量运行测试用例。
  • Postman 下载
1
$ sudo wget https://dl.pstmn.io/download/latest/linux64 -O postman-linux-x64.tar.gz && sudo tar -xvzf postman-linux-x64.tar.gz -C /opt && sudo ln -s /opt/Postman/Postman /usr/bin/postman