Cypress 以其端到端测试能力而闻名,但它也是测试 API 的强大工具。 API 测试是确保现代 Web 应用程序的可靠性、性能和安全性的重要组成部分,因为当今许多应用程序严重依赖后端服务和 API。这篇文章将引导您了解使用 Cypress 进行 API 测试的基础知识,包括设置 API 测试、发出请求、验证响应以及自动化流程。
如果您已经安装了 Cypress 进行端到端测试,那么您就可以开始 API 测试了。如果没有,请按照以下安装步骤操作。
第 1 步:安装 Cypress
npm install cypress --save-dev
安装后,您可以使用以下命令运行 Cypress:
npx cypress open
第 2 步:设置您的第一个 API 测试
Cypress 提供了 cy.request() 方法,可用于发送 HTTP 请求。以下是测试返回用户列表的 API 的基本示例:
describe('API Testing with Cypress', () => { it('should retrieve a list of users', () => { cy.request('GET', 'https://jsonplaceholder.typicode.com/users') .then((response) => { // Validate the status code expect(response.status).to.eq(200); // Validate the response body expect(response.body).to.have.length(10); expect(response.body[0]).to.have.property('name'); }); }); });
在此示例中,我们正在测试 GET 请求来检索用户列表。 Cypress 验证响应状态代码并检查响应正文是否包含 10 个用户。
以下是如何在 Cypress 中执行常见的 HTTP 请求,例如 GET、POST、PUT 和 DELETE。
GET请求
GET 请求用于从服务器检索数据。例如:
cy.request('GET', 'https://jsonplaceholder.typicode.com/posts/1') .then((response) => { expect(response.status).to.eq(200); expect(response.body).to.have.property('id', 1); });
POST 请求
POST 请求用于在服务器上创建新资源。以下是测试 POST 请求的方法:
cy.request('POST', 'https://jsonplaceholder.typicode.com/posts', { title: 'New Post', body: 'This is the content of the new post.', userId: 1 }) .then((response) => { expect(response.status).to.eq(201); expect(response.body).to.have.property('title', 'New Post'); });
PUT 请求
PUT 请求用于更新现有资源。例子:
cy.request('PUT', 'https://jsonplaceholder.typicode.com/posts/1', { id: 1, title: 'Updated Post Title', body: 'Updated content', userId: 1 }) .then((response) => { expect(response.status).to.eq(200); expect(response.body).to.have.property('title', 'Updated Post Title'); });
删除请求
DELETE 请求用于删除资源。例子:
cy.request('DELETE', 'https://jsonplaceholder.typicode.com/posts/1') .then((response) => { expect(response.status).to.eq(200); });
一旦您掌握了基本的 API 请求,您就可以继续学习更高级的 API 测试技术,例如处理身份验证、测试 API 失败和链接 API 调用。
处理身份验证
某些 API 需要通过令牌或 API 密钥进行身份验证。 Cypress 可以通过设置自定义标头来处理身份验证。例如:
cy.request({ method: 'GET', url: 'https://api.example.com/protected', headers: { Authorization: `Bearer ${Cypress.env('auth_token')}` } }) .then((response) => { expect(response.status).to.eq(200); });
此处,授权标头用于随请求一起发送令牌。
测试 API 失败
测试 API 在出现问题(例如无效输入或缺少资源)时的行为非常重要。例如,测试404错误:
cy.request({ method: 'GET', url: 'https://jsonplaceholder.typicode.com/posts/9999', failOnStatusCode: false }) .then((response) => { expect(response.status).to.eq(404); });
通过设置failOnStatusCode: false,Cypress 不会自动对非 2xx 响应进行测试失败,从而允许您验证错误响应。
链接 API 调用
有时,您需要将多个 API 调用链接在一起,例如,创建一个资源,然后在后续测试中使用它:
cy.request('POST', 'https://jsonplaceholder.typicode.com/posts', { title: 'Post for chaining', body: 'Chained post content', userId: 1 }).then((postResponse) => { cy.request('GET', `https://jsonplaceholder.typicode.com/posts/${postResponse.body.id}`) .then((getResponse) => { expect(getResponse.body).to.have.property('title', 'Post for chaining'); }); });
在此示例中,POST 请求创建一个新帖子,GET 请求根据第一次调用返回的 ID 检索该帖子。
为了确保 API 的稳定性,将 API 测试作为持续集成/持续部署 (CI/CD) 管道的一部分来运行至关重要。 Cypress 可以轻松集成到 Jenkins、GitHub Actions 或 Travis CI 等 CI/CD 工具中。
以下是在每次推送时运行 Cypress 测试的 GitHub Actions 工作流程示例:
name: CI on: push: branches: - main jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '14' - name: Install dependencies run: npm install - name: Run Cypress tests run: npx cypress run
此工作流程确保每次将代码推送到主分支时都会自动执行 API 测试。
为了确保您的 API 测试可靠、可维护且高效,请遵循以下最佳实践:
API 测试是确保应用程序无缝运行的重要组成部分,即使它依赖于外部服务或后端 API。 Cypress 提供了一种简单而强大的方法来测试 API 和 UI 测试,使其成为使用现代 JavaScript 应用程序的开发人员的绝佳选择。通过利用 cy.request()、断言和 CI/CD 集成等功能,您可以构建强大且可靠的 API 测试套件,以尽早发现问题并确保 API 的质量。
立即开始使用 Cypress 测试您的 API,并通过自动化、可靠的测试改进您的开发工作流程!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3