"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Cypress를 사용한 API 테스트: 전체 가이드

Cypress를 사용한 API 테스트: 전체 가이드

2024-11-04에 게시됨
검색:136

API Testing with Cypress: A Complete Guide

소개

Cypress는 엔드투엔드 테스트 기능으로 널리 알려져 있지만 API 테스트를 위한 강력한 도구이기도 합니다. 오늘날 많은 애플리케이션이 백엔드 서비스 및 API에 크게 의존하기 때문에 API 테스트는 최신 웹 애플리케이션의 안정성, 성능 및 보안을 보장하는 데 필수적인 부분입니다. 이 게시물에서는 API 테스트 설정, 요청 생성, 응답 검증, 프로세스 자동화 등 Cypress를 사용한 API 테스트의 기본 사항을 안내합니다.

API 테스트에 Cypress를 사용하는 이유는 무엇입니까?

  1. 내장 기능: Cypress에는 HTTP 요청, 어설션 및 비동기 테스트 관리를 위한 기능이 내장되어 있습니다.
  2. 간편한 통합: UI 테스트와 함께 API 테스트를 기존 Cypress 테스트 제품군에 쉽게 통합할 수 있습니다.
  3. 훌륭한 개발자 경험: Cypress는 사용자 친화적인 인터페이스, 빠른 피드백 및 실시간 디버깅을 제공합니다.
  4. 자동화: CI/CD 파이프라인에서 API 테스트를 자동화하여 모든 배포에서 API가 일관되게 테스트되도록 할 수 있습니다.

Cypress에서 API 테스트 시작하기

종단 간 테스트를 위해 이미 Cypress를 설치했다면 API 테스트를 시작할 준비가 된 것입니다. 그렇지 않은 경우 아래 설치 단계를 따르세요.

1단계: Cypress 설치

npm install cypress --save-dev

설치가 완료되면 다음 명령을 사용하여 Cypress를 실행할 수 있습니다.

npx cypress open

2단계: 첫 번째 API 테스트 설정
Cypress는 HTTP 요청을 보내는 데 사용할 수 있는 cy.request() 메서드를 제공합니다. 다음은 사용자 목록을 반환하는 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명의 사용자가 포함되어 있는지 확인합니다.

API 테스트의 일반적인 HTTP 메서드

Cypress에서 GET, POST, PUT, DELETE와 같은 일반적인 HTTP 요청을 수행하는 방법은 다음과 같습니다.

요청 받기
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에는 토큰이나 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);
  });

여기서 Authorization 헤더는 요청과 함께 토큰을 보내는 데 사용됩니다.

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를 기반으로 해당 게시물을 검색합니다.

CI/CD 파이프라인에서 API 테스트 자동화

API의 안정성을 보장하려면 CI/CD(지속적 통합/지속적 배포) 파이프라인의 일부로 API 테스트를 실행하는 것이 중요합니다. 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 테스트가 자동으로 실행되도록 보장합니다.

Cypress를 사용한 API 테스트 모범 사례

API 테스트의 신뢰성, 유지 관리 및 효율성을 보장하려면 다음 모범 사례를 따르세요.

  1. 환경 변수 사용: API 키, 토큰, 기본 URL과 같은 민감한 데이터를 환경 변수에 저장합니다.
  2. 필요한 경우 모의 응답: 매번 실제 API에 도달하고 싶지 않다면 cy.intercept()를 사용하여 API 응답을 모의하십시오.
  3. 비율 제한 처리: API에 비율 제한이 있는 경우 요청 사이에 재시도 또는 지연을 추가하여 테스트에서 이를 적절하게 처리하는지 확인하세요.
  4. 테스트를 독립적으로 유지: 각 API 테스트가 다른 테스트와 독립적인지 확인하여 종속성 문제 없이 어떤 순서로든 실행될 수 있도록 하세요.
  5. 엣지 케이스에 집중: 모든 잠재적인 시나리오를 포괄하기 위해 행복한 경로와 엣지 케이스(예: 유효하지 않은 입력, 대규모 데이터 세트, 속도 제한)를 모두 테스트합니다.

결론

API 테스트는 외부 서비스나 백엔드 API에 의존하는 경우에도 애플리케이션이 원활하게 작동하는지 확인하는 데 필수적인 부분입니다. Cypress는 UI 테스트와 함께 API를 테스트하는 간단하면서도 강력한 방법을 제공하므로 최신 JavaScript 애플리케이션으로 작업하는 개발자에게 탁월한 선택입니다. cy.request(), 어설션, CI/CD 통합과 같은 기능을 활용하면 문제를 조기에 파악하고 API 품질을 보장하는 강력하고 안정적인 API 테스트 모음을 구축할 수 있습니다.

지금 Cypress로 API 테스트를 시작하고 자동화되고 안정적인 테스트로 개발 워크플로를 개선하세요!

릴리스 선언문 이 글은 https://dev.to/aswani25/api-testing-with-cypress-a-complete-guide-7p7?1 에서 복제되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3