티스토리 뷰

반응형

웹 개발 실무 기술 A to Z

웹 애플리케이션 개발에서 테스트는 필수적인 과정이며,
✔️ 단위 테스트(Unit Test) → 개별 함수 및 모듈이 올바르게 동작하는지 확인
✔️ 통합 테스트(Integration Test) → 여러 모듈이 함께 동작할 때 정상 작동하는지 검증
✔️ E2E 테스트(End-to-End Test) → 실제 사용자 환경에서 애플리케이션이 정상적으로 동작하는지 확인

이번 글에서는 Jest, Cypress, Playwright를 활용한 웹 애플리케이션 테스트 및 품질 보증(QA) 전략을 설명하겠습니다.


1. 웹 애플리케이션 테스트의 중요성

✔️ 코드 안정성 확보 → 예상치 못한 오류를 사전에 발견
✔️ 릴리즈 품질 보장 → 기능이 예상대로 작동하는지 검증
✔️ 회귀 테스트(Regression Test) 가능 → 기존 기능이 새로운 코드로 인해 깨지지 않도록 방지
✔️ 자동화 테스트 도입 → 테스트 실행 시간을 줄이고 QA 과정 최적화

테스트를 적용하면 개발 속도와 코드 품질을 동시에 향상 가능!


2. 단위 테스트(Unit Test) – Jest 활용

2-1. Jest란?

✔️ Facebook에서 개발한 JavaScript 테스팅 프레임워크
✔️ React, Node.js, Vue 등 다양한 환경에서 사용 가능
✔️ 테스트 실행 속도가 빠르고 직관적인 API 제공


2-2. Jest 설치 및 설정

(1) Jest 패키지 설치

npm install --save-dev jest

(2) Jest 설정 파일 추가 (package.json)

"scripts": {
  "test": "jest"
}

2-3. Jest 단위 테스트 작성

📌 테스트할 함수 (math.js)

function add(a, b) {
  return a + b;
}

module.exports = add;

📌 테스트 코드 (math.test.js)

const add = require("./math");

test("adds 1 + 2 to equal 3", () => {
  expect(add(1, 2)).toBe(3);
});

(3) 테스트 실행

npm test

Jest를 활용하면 빠르고 직관적인 단위 테스트 작성 가능!


3. 통합 테스트(Integration Test) – Supertest + Jest

3-1. 통합 테스트 개념

✔️ 여러 개의 모듈이 올바르게 상호작용하는지 확인
✔️ 백엔드 API가 기대한 대로 응답을 반환하는지 검증


3-2. Supertest를 활용한 API 테스트

(1) Supertest 설치

npm install --save-dev supertest

(2) Express API 예제 (server.js)

const express = require("express");
const app = express();

app.get("/api/hello", (req, res) => {
  res.json({ message: "Hello, world!" });
});

module.exports = app;

(3) Supertest 기반 API 테스트 (server.test.js)

const request = require("supertest");
const app = require("./server");

test("GET /api/hello returns a message", async () => {
  const response = await request(app).get("/api/hello");
  expect(response.status).toBe(200);
  expect(response.body.message).toBe("Hello, world!");
});

Supertest를 사용하면 API 응답을 검증하는 통합 테스트 구현 가능!


4. E2E 테스트(End-to-End Test) – Cypress 활용

4-1. Cypress란?

✔️ 브라우저에서 직접 실행되는 E2E(End-to-End) 테스트 프레임워크
✔️ UI 요소를 실제 사용자처럼 조작하며 테스트 수행 가능
✔️ 백그라운드에서 네트워크 요청을 감시하고 API 응답 테스트 가능


4-2. Cypress 설치 및 설정

(1) Cypress 설치

npm install --save-dev cypress

(2) Cypress 실행

npx cypress open

✅ Cypress GUI가 실행되면 테스트를 시각적으로 확인 가능!


4-3. Cypress E2E 테스트 작성

📌 테스트할 웹 페이지 (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Test Page</title>
</head>
<body>
  <h1>Hello, Cypress!</h1>
  <button id="clickMe">Click Me</button>
  <p id="result"></p>

  <script>
    document.getElementById("clickMe").addEventListener("click", () => {
      document.getElementById("result").innerText = "Button Clicked!";
    });
  </script>
</body>
</html>

📌 Cypress 테스트 코드 (cypress/integration/test.spec.js)

describe("UI 테스트", () => {
  it("버튼 클릭 시 텍스트 변경", () => {
    cy.visit("http://localhost:3000");
    cy.contains("Hello, Cypress!");
    cy.get("#clickMe").click();
    cy.get("#result").should("have.text", "Button Clicked!");
  });
});

Cypress를 활용하면 실제 사용자의 인터랙션을 자동으로 테스트 가능!


5. Playwright를 활용한 크로스 브라우저 테스트

5-1. Playwright란?

✔️ Microsoft에서 개발한 강력한 E2E 테스트 프레임워크
✔️ Chrome, Firefox, Edge, Safari 등 다양한 브라우저 테스트 지원
✔️ 모바일 환경 테스트도 가능


5-2. Playwright 설치

npm install --save-dev @playwright/test

5-3. Playwright 테스트 코드 (playwright.test.js)

const { test, expect } = require("@playwright/test");

test("웹 페이지 로딩 테스트", async ({ page }) => {
  await page.goto("http://localhost:3000");
  await expect(page.locator("h1")).toContainText("Hello, Cypress!");
});

Playwright를 활용하면 크로스 브라우저 및 모바일 테스트 자동화 가능!


6. 테스트 적용 전후 비교

6-1. 적용 전

  • 수동 테스트 진행 → 많은 시간이 소요됨
  • 테스트 자동화 부족 → 새로운 코드가 기존 기능을 깨뜨릴 위험 존재
  • 브라우저 호환성 검증 어려움

6-2. 적용 후

✔️ Jest로 단위 테스트 실행 → 개별 함수 및 모듈 검증 가능
✔️ Supertest로 API 테스트 구현 → 백엔드 API 응답을 자동으로 검증
✔️ Cypress로 E2E 테스트 적용 → 사용자 인터페이스 테스트 자동화
✔️ Playwright로 크로스 브라우저 테스트 수행 → 여러 브라우저에서 동작 검증

자동화 테스트를 적용하면 개발 속도 및 코드 안정성을 동시에 확보 가능!


7. 마무리 및 다음 글 예고

이번 글에서는 Jest, Cypress, Playwright를 활용한 웹 애플리케이션 테스트 및 품질 보증(QA) 전략을 살펴봤습니다.
다음 글에서는 웹 애플리케이션 배포 자동화 – GitHub Actions, Docker, Kubernetes 활용을 소개하겠습니다.

다음 글 예고: "웹 애플리케이션 배포 자동화 – GitHub Actions, Docker, Kubernetes 활용" 🚀

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함
반응형