Skip to content

Cypress - GET 和 POST 请求

Cypress - 使用 GET 和 POST 请求进行 API 测试

Section titled “Cypress - 使用 GET 和 POST 请求进行 API 测试”

Cypress 不仅适用于 UI(用户界面)测试,它在 API(应用程序编程接口)测试方面也表现出色。您可以使用 cy.request() 命令直接向服务器端点发送 HTTP 请求,这使您能够在独立于 UI 的情况下测试 API 的功能、性能和可靠性。

HTTP GET 方法用于从指定资源检索数据。当使用 cy.request() 执行 GET 操作时,您通常需要提供方法 (‘GET’) 和 URL。Cypress 随后会发出请求,并允许您对响应进行断言(assertion)。

成功的 GET 请求通常返回状态码 200 (OK)。您还应该验证响应的其他方面,例如响应头 (headers) 和响应体 (body) 内容。如果您在 cypress.config.js 中设置了 baseUrl,cy.request() 将自动将其用于相对 URL。

以下是一个发起 GET 请求并验证其响应的示例:

describe('API GET Request Test', () => {
it('Should retrieve comments and validate the response', () => {
// 假设 baseUrl 在 cypress.config.js 中可能是 'https://jsonplaceholder.cypress.io'
// 如果没有设置 baseUrl,则使用完整 URL: 'https://jsonplaceholder.cypress.io/comments'
cy.request('GET', 'https://jsonplaceholder.cypress.io/comments')
.then((response) => {
expect(response.status).to.eq(200);
expect(response.body).to.be.an('array').and.not.be.empty;
expect(response).to.have.property('headers');
expect(response).to.have.property('duration'); // Cypress 添加的属性
// 示例: 如果需要,检查特定评论的属性
// expect(response.body[0]).to.have.property('email');
});
});
});

执行结果:

执行后,Cypress 会在 Command Log(命令日志)中记录 GET 请求及其详细信息。如果所有断言都通过,则测试将被标记为成功,确认 API 端点正确返回了期望的数据和状态。

HTTP POST 方法用于向服务器发送数据以创建或更新资源。当使用 cy.request() 执行 POST 操作时,您通常会包含方法 (‘POST’)、URL 以及包含要发送数据的请求体 (request body)。

成功创建新资源的 POST 请求通常返回状态码 201 (Created)。响应体可能包含新创建的资源或确认消息。

以下是发起 POST 请求以创建新资源的示例:

describe('API POST Request Test', () => {
it('Should create a new post and validate the response', () => {
const newPost = {
title: 'My Cypress Test Post',
body: 'This post was created by a Cypress API test.',
userId: 1,
};
cy.request('POST', 'https://jsonplaceholder.cypress.io/posts', newPost)
.then((response) => {
expect(response.status).to.eq(201); // 201 Created
expect(response.body).to.have.property('title', newPost.title);
expect(response.body).to.have.property('body', newPost.body);
expect(response.body).to.have.property('userId', newPost.userId);
expect(response.body).to.have.property('id'); // 通常是服务器生成的 ID
});
});
});

执行结果:

Cypress Command Log 会显示 POST 请求,包括其有效载荷 (payload) 和服务器的响应。测试成功表明 API 正确处理了 POST 请求并按预期创建了资源。

cy.request() 支持所有标准的 HTTP 方法,包括 PUT、DELETE、PATCH、HEAD、OPTIONS 等。您还可以配置请求头 (headers)、认证、查询参数等等。有关详细选项,请参阅官方 Cypress 文档中关于 cy.request() 的部分。该命令对于全面的 API 测试策略至关重要,例如设置应用程序状态或验证后端逻辑。