Cypress - GET 和 POST 请求
Cypress - 使用 GET 和 POST 请求进行 API 测试
Section titled “Cypress - 使用 GET 和 POST 请求进行 API 测试”Cypress 不仅适用于 UI(用户界面)测试,它在 API(应用程序编程接口)测试方面也表现出色。您可以使用 cy.request() 命令直接向服务器端点发送 HTTP 请求,这使您能够在独立于 UI 的情况下测试 API 的功能、性能和可靠性。
GET 方法
Section titled “GET 方法”HTTP GET 方法用于从指定资源检索数据。当使用 cy.request() 执行 GET 操作时,您通常需要提供方法 (‘GET’) 和 URL。Cypress 随后会发出请求,并允许您对响应进行断言(assertion)。
成功的 GET 请求通常返回状态码 200 (OK)。您还应该验证响应的其他方面,例如响应头 (headers) 和响应体 (body) 内容。如果您在 cypress.config.js 中设置了 baseUrl,cy.request() 将自动将其用于相对 URL。
GET 请求的实现
Section titled “GET 请求的实现”以下是一个发起 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 端点正确返回了期望的数据和状态。
POST 方法
Section titled “POST 方法”HTTP POST 方法用于向服务器发送数据以创建或更新资源。当使用 cy.request() 执行 POST 操作时,您通常会包含方法 (‘POST’)、URL 以及包含要发送数据的请求体 (request body)。
成功创建新资源的 POST 请求通常返回状态码 201 (Created)。响应体可能包含新创建的资源或确认消息。
POST 请求的实现
Section titled “POST 请求的实现”以下是发起 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 请求并按预期创建了资源。
其他 HTTP 方法和高级用法
Section titled “其他 HTTP 方法和高级用法”cy.request() 支持所有标准的 HTTP 方法,包括 PUT、DELETE、PATCH、HEAD、OPTIONS 等。您还可以配置请求头 (headers)、认证、查询参数等等。有关详细选项,请参阅官方 Cypress 文档中关于 cy.request() 的部分。该命令对于全面的 API 测试策略至关重要,例如设置应用程序状态或验证后端逻辑。