CodeGym /행동 /Docker SELF /애플리케이션 테스트 및 디버깅

애플리케이션 테스트 및 디버깅

Docker SELF
레벨 24 , 레슨 2
사용 가능

8.1 프론트엔드 테스트

이번 단계에서는 우리가 만든 멀티 컨테이너 애플리케이션을 테스트하고 디버깅하는 방법을 살펴볼 거야. 테스트를 통해 에러를 찾고 수정하며, 시스템의 모든 컴포넌트가 잘 작동하는지 확인할 수 있어.

ReactJS 프론트엔드 테스트를 위해 Jest와 React Testing Library를 사용할 거야.

Jest와 React Testing Library 설치

1단계. 의존성 설치:

터미널

cd frontend
npm install --save-dev jest @testing-library/react @testing-library/jest-dom

2단계. Jest 설정:

jest.config.js 파일을 frontend 디렉토리에 생성해봐:

Javascript

module.exports = {
  setupFilesAfterEnv: ['<rootDir>/src/setupTests.js'],
  testEnvironment: 'jsdom',
};

3단계. setupTests.js 파일 생성:

setupTests.js 파일을 frontend/src 디렉토리에 생성해:

Javascript

import '@testing-library/jest-dom/extend-expect';

4단계. 컴포넌트 테스트 작성

TaskList 컴포넌트를 위한 테스트 파일을 frontend/src 디렉토리에 작성해봐:

Javascript

import React from 'react';
import { render, screen } from '@testing-library/react';
import TaskList from './TaskList';

test('Task List 헤딩 렌더링 확인', () => {
  render(<TaskList />);
  const headingElement = screen.getByText(/Task List/i);
  expect(headingElement).toBeInTheDocument();
});

5단계. 테스트 실행

테스트를 실행하려면 다음 명령어를 사용해봐:

터미널

npm test

8.2 백엔드 테스트

Flask에서 백엔드를 테스트하기 위해 unittest 라이브러리를 사용할 거야.

종속성 설치:

Terminal

cd ../backend
pip install Flask-Testing

엔드포인트에 대한 테스트 작성

백엔드 디렉토리에 tests 디렉토리와 test_routes.py 파일을 만들어:

Python

import unittest
from app import app, db
from app.models import User, Task

class BasicTests(unittest.TestCase):

    def setUp(self):
        app.config['TESTING'] = True
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
        self.app = app.test_client()
        db.create_all()

    def tearDown(self):
        db.session.remove()
        db.drop_all()

    def test_user_registration(self):
        response = self.app.post('/register', json={
            'username': 'testuser',
            'password': 'testpassword'
        })
        self.assertEqual(response.status_code, 201)

    def test_task_creation(self):
        self.app.post('/register', json={
            'username': 'testuser',
            'password': 'testpassword'
        })
        access_token = self.app.post('/login', json={
            'username': 'testuser',
            'password': 'testpassword'
        }).json['access_token']

        response = self.app.post('/tasks', json={
            'title': '테스트 작업',
            'description': '테스트 설명',
            'owner_id': 1,
            'status': '완료되지 않음'
        }, headers={'Authorization': f'Bearer {access_token}'})
        self.assertEqual(response.status_code, 201)

if __name__ == "__main__":
    unittest.main()

테스트 실행

테스트를 실행하려면 다음 명령을 사용해:

Terminal

python -m unittest discover

8.3 통합 테스트

통합 테스트는 시스템 구성 요소 간의 상호 작용을 확인하는 거야.

테스트 환경 설정

통합 테스트를 위해 Docker Compose를 사용할 거야. 테스트 환경에서 모든 서비스를 시작할 수 있게 도와줘.

1단계. 테스트를 위한 Docker Compose 파일 생성:

프로젝트의 루트 디렉토리에 docker-compose.test.yml 파일을 만들어:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3001:3000"
    networks:
      - task-network

  backend:
    build: ./backend
    ports:
      - "5001:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data

networks:
  task-network:
    driver: bridge

volumes:
  db-data:

2단계. 테스트 환경 시작:

테스트 환경에서 모든 서비스를 시작하려면 다음 명령을 사용해:

Terminal

docker compose -f docker-compose.test.yml up --build

통합 테스트 작성

통합 테스트는 다양한 도구를 사용해서 쓸 수 있어. 그 중 하나는 Selenium을 사용해서 사용자 인터페이스 자동화를 테스트하는 방법이야.

1단계. Selenium 설치:

Terminal

pip install selenium

2단계. 통합 테스트 작성:

tests 디렉토리에 test_integration.py 파일을 만들어:

Python

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

def test_frontend():
    driver = webdriver.Chrome()
    driver.get("http://localhost:3001")
    assert "Task List" in driver.title
    driver.close()

if __name__ == "__main__":
    test_frontend()

3단계. 통합 테스트 실행:

통합 테스트를 실행하려면 다음 명령을 사용해:

Terminal

python tests/test_integration.py

8.4 디버깅

디버깅을 위해 컨테이너 로그와 모니터링 도구를 사용할 수 있어.

컨테이너 로그 확인

로그를 확인하려면 다음 명령어를 사용해:

Terminal

docker compose logs

모니터링 도구 사용

이전에 설정한 Prometheus와 Grafana를 사용해 메트릭과 서비스 상태를 모니터링해.

  1. Grafana 웹 인터페이스로 이동: 브라우저를 열고 http://localhost:3033로 이동해.
  2. 대시보드 확인: 생성된 대시보드를 사용하여 서비스의 성능과 상태를 추적해봐.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION