简介:提到web api
自动化测试,已经有很多工具可以选择:如基于命令行的curl
,基于UI
界面的postman
,基于浏览器自带的F12
,以及在敏捷团队越来越流行的apifox
,都可以很好地完成web api
自动化测试。对于playwright
来说,提供的api testing
能力可以很方便地和ui testing
能力结合,从而实现更复杂的测试验证任务。
Web API
介绍
![图片[1]-Playwright实战-web API自动化测试-365博客](https://qiniu.dianchuang365.cn/2025/02/20250203024218355.png)
Web API
,即 Web Application Programming Interface
,是一种用于提供 Web 服务的接口,通过 HTTP
协议进行通信。它允许不同的应用程序在网络上进行数据交换和通信,常见的 Web API
有下列4种: RESTful API
、SOAP API
、 GraphQL API
、gRPC API
REST API
REST
,即 Representational State Transfer
,是一种基于 HTTP
协议的软件架构风格,用于构建分布式系统。REST API
是一种符合 REST 原则的 Web API
,它使用 HTTP
方法(如 GET
、POST
、PUT
、DELETE
)来实现资源的增删改查操作。
SOAP API
SOAP
,即 Simple Object Access Protocol
,是一种基于 XML
的通信协议,用于在分布式系统中进行信息交换。SOAP API
使用 XML
格式来定义消息格式和消息协议,通常使用 HTTP
或 SMTP
协议来传输数据。
GraphQL API
GraphQL
是一种用于构建 API
的查询语言,它允许客户端根据自身的需求来请求特定的数据。GraphQL API
提供了一个灵活的数据查询和获取方式,客户端可以通过一个请求来获取多个资源的数据,从而减少网络传输量和提高数据获取效率。
gRPC API
gRPC
是一种高性能、开源的远程过程调用(RPC
)框架,它使用 Protocol Buffers
(protobuf
)作为接口定义语言(IDL
),支持多种编程语言和平台。gRPC API
提供了一种简单而强大的方法来定义服务接口和方法,并在客户端和服务器之间进行通信。
下列表格总结了他们的主要特点:
Web API类型 | 主要贡献者 | 主要特点 |
RESTful API | Roy Fielding | 资源、路径、请求方法。在互联网应用广泛 |
SOAP API | 微软 | 基于xml,较复杂。支持事务处理 |
GraphQL API | 一次请求获得多个资源。减少数据传输 | |
gRPC API | 基于http/2,速度更快,性能更高,也更复杂 |
REST API
介绍
![图片[2]-Playwright实战-web API自动化测试-365博客](https://qiniu.dianchuang365.cn/2025/02/20250203024237125.png)
RESTful API
是符合REST原则的API设计风格,它通过使用HTTP协议中的各种方法来操作资源,包括GET
、POST
、PUT
、DELETE
等。
REST
Representational State Transfer
,表述性状态传递,服务器将资源状态表述传递给客户端。
RESTful API
特点
• 资源导向: RESTful API
的核心概念是资源,每个资源都有一个唯一的标识符(URI
)。客户端通过HTTP
方法对资源进行操作,如GET用于获取资源、POST
用于创建资源、PUT用于更新资源、DELETE
用于删除资源等。
• 无状态性: RESTful API
是无状态的,每个请求都必须包含足够的信息来处理该请求,而不依赖于服务器上的会话状态。这样可以使得API的设计更加简洁,并且易于扩展和维护。
• 可缓存性: RESTful API
通过利用HTTP
协议中的缓存机制来提高性能和可扩展性。服务器可以在响应中包含缓存控制信息,客户端可以根据这些信息来缓存资源,减少不必要的网络请求。
• 统一接口: RESTful API
使用统一的接口来访问资源,即通过HTTP方法对资源进行操作。这种统一接口的设计使得API更易于理解和使用。
下面,重点结合Playwright
说明下REST api
如何完成自动化测试。
常见api
自动化测试工具
浏览器调试工具
chorome
浏览器自带的devtools
,对于测试人员和开发人员,可能都是最需要掌握的调试工具。典型的测试场景如:模拟慢速网络连结
官网有详细介绍:
https://developer.chrome.com/docs/devtools?hl=zh-cn
curl
Curl
是一个基础的开源命令行工具,用于在服务器之间传输数据,同时支持创建 HTTP
请求并将其发送到后端服务中,同时也支持使用 cURL
命令发送 HTTP
请求,例如 POST
、PUT
和 DELETE
。
postman
Postman
,有客户端版本和 web
网页版。Postman
支持多种协议和格式,包括 HTTP
、HTTPS
、GraphQL
、REST
等。Postman
的优点在于它易于使用,支持多种请求类型和参数设置,可以方便地创建和管理 API
测试套件;还支持将测试结果导出为多种格式,如 JSON
、CSV
等;还提供了一些有用的工具,如 Mock Server
,可以帮助用户模拟 API
响应以及运行单元测试。
JMeter
JMeter
主要用来做性能测试。优点是Java
编写,免费开源,无需安装,做web api
测试也是可以的。
soupUI
SoapUI
是专门为 API
测试而开发的开源工具,可以轻松测试 REST
和 SOAP API
。
apifox
Apifox
是一款集 API
文档、API
调试、API mock
、API
自动化测试为一体的接口一站式协作平台,类似于 Postman
、Swagger
、mock
和 Jmeter
的综合体。它提供了直观、易于使用的界面,支持多种 HTTP
请求方法、参数类型和数据格式,还提供了丰富的测试和调试功能,例如断言、测试集合、环境变量等。
下列表格总结了他们的主要特点:
工具 | 描述 | 主要优点 |
浏览器调试工具 | 浏览器自带的开发者工具,可用于发送和调试HTTP请求。 | 无需额外安装软件,直接在浏览器中调试,方便快捷。 提供了丰富的调试功能,包括请求和响应的查看、编辑和分析等。 |
curl | 命令行工具,用于发送和接收HTTP请求。 | 跨平台,支持Linux、macOS和Windows等操作系统。灵活,可通过命令行参数设置各种请求参数和选项。 |
Postman | 图形界面工具,提供了丰富的功能和可视化操作界面。 | 用户友好,无需编写代码,通过可视化界面快速构建和发送请求。支持多种请求类型和测试脚本编写,功能强大。 |
JMeter | Java编写的压力测试工具,也可用于接口测试。 | 功能强大,支持多种协议和高并发压力测试。 可以通过插件扩展功能,满足不同测试需求。 |
SoupUI | 支持SOAP协议和RESTful风格的接口测试。 | 提供了丰富的接口测试功能,支持多种协议和数据格式。 用户界面友好,易于使用和学习。 |
apifox | API 接口文档管理工具 | 适合团队协作,从api定义,开放,测试,文档,全生命周期管理 |
Playwright
发送请求
以上工具在不同维度和层面提供了不同的能力,帮助完成web api
测试。就自动化来说,无论是python
环境下的requests
库,还是Java
环境下的REST-assured
,选择Playwright
有一个额外的好处,那就是可以和web UI
自动化测试无缝连接,包括但不限于如下场景:
• 通过调用api
获取token
,在后续自动化测试中复用,避免从UI
层反复login
的痛点
• 利用api
提前创建测试数据,比通过UI
层的交互来创建数据更加高效
• 利用api
来清理测试过程中产生的垃圾
数据,为下次自动化测试做好准备
• 调用第三方api
准备测试环境,包括测试数据、服务、缓存、中间件…
Playwright
主要通过APIRequestContext
方法来实现。
简单来说,掌握api test
发送request
请求,包含了4
个要素和4
方法:
4要素
• url
• method
• headers
• parameter/Payload
request
• get
• post
• delete
• put
CRUD
以下是API测试中基本的CRUD(创建、读取、更新、删除)操作:
操作 | HTTP方法 | 描述 |
创建 | POST | 创建一个新的资源。客户端发送一个带有新资源数据的POST请求。 |
读取 | GET | 检索现有资源或资源列表。客户端发送一个GET请求到API端点。 |
更新 | PUT 或 PATCH | 修改现有资源。客户端发送一个带有更新数据的PUT或PATCH请求。PUT请求用新数据替换整个资源,而PATCH只更新指定的字段。 |
删除 | DELETE | 删除现有资源。客户端发送一个带有要删除资源的唯一标识符的DELETE请求。 |
这些操作构成了API测试的基础,使测试人员能够有效地与应用程序的资源进行交互。
APIRequestContext
使用
import { test, expect } from '@playwright/test';
import { request, APIRequestContext } from '@playwright/test';
test('get api get', async () => {
const apiContext: APIRequestContext = await request.newContext();
const response = await apiContext.get('https://reqres.in/api/users?page=2');
const responseCode = await response.status();
console.log(responseCode);
expect(responseCode).toBe(200);
});
test('get api get2', async ({request}) => {
const response = await request.get('https://reqres.in/api/users?page=2');
const responseCode = await response.status();
console.log(responseCode);
expect(responseCode).toBe(200);
});
test('get api post', async () => {
const apiContext: APIRequestContext = await request.newContext();
const response = await apiContext.post('https://reqres.in/api/users?page=2', {
data: {
title: 'Book Title',
author: 'John Doe',
},
headers: {
authorization: `Bearer eyJhbGciOiJIUzcCI6IkpXVCJ9.eyJzd`
}
});
const resBody = await response.body();
const responseCode = await response.status();
console.log(responseCode);
expect(responseCode).toBe(201);
});
说明如下:
• APIRequestContext
生成apiContext
实例
• apiContext.get()
方法
• response.status()
断言返回值为200
• request
方法类似
• post
、get
调用方法类似
Playwright
处理响应
接口断言写法,通常3
个方面考虑,分别是:返回值
、返回数据
、数据类型
:
status code
expect(code).toBe(200);
JSON data
expect(res.message).toContain('操作成功');
JSON Schema
expect(typeof phoneNumber).toBe('string');
结论
• Web API
广泛用于互联网基于前后端分离的项目中,通讯协议http/https
时,一般也称为REST API
• CRUD
操作,对应于数据的创建
、读取
、更新
、删除操作
,操作结果可以用status code
状态码获取,也可以用json data
结构,而json schema
往往对应数据类型的校验,在实际项目中,断言的内容,可以以上3
个维度考虑
• 灵活运用UI testing
与api testing
能力,可以实现更复杂的自动化验证需求
暂无评论内容