JavaRush /Курсы /Модуль 2: Fullstack /Тестирование и отладка приложения

Тестирование и отладка приложения

Модуль 2: Fullstack
18 уровень , 7 лекция
Открыта

8.1 Тестирование фронтенда

На этом этапе мы рассмотрим, как провести тестирование и отладку нашего многоконтейнерного приложения. Тестирование поможет выявить и устранить ошибки, а также убедиться в корректной работе всех компонентов системы.

Для тестирования фронтенда на ReactJS мы будем использовать библиотеку Jest и React Testing Library.

Установка Jest и React Testing Library

Шаг 1. Установка зависимостей:

Terminal

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('renders Task List heading', () => {
  render(<TaskList />);
  const headingElement = screen.getByText(/Task List/i);
  expect(headingElement).toBeInTheDocument();
});

Шаг 5. Запуск тестов

Для запуска тестов используйте команду:

Terminal

npm test

8.2 Тестирование бекенда

Для тестирования бекенда на Flask мы будем использовать библиотеку unittest.

Установка зависимостей:

Terminal

cd ../backend
pip install Flask-Testing

Написание тестов для эндпоинтов

Создайте директорию tests и файл test_routes.py в директории backend:

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': 'Test Task',
            'description': 'Test 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. Написание интеграционного теста:

Создайте файл test_integration.py в директории tests:

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. Просмотрите дашборды: Используйте созданные дашборды для отслеживания производительности и состояния сервисов.
3
Задача
Модуль 2: Fullstack, 18 уровень, 7 лекция
Недоступна
Тестирование API регистрации
Тестирование API регистрации
3
Задача
Модуль 2: Fullstack, 18 уровень, 7 лекция
Недоступна
Просмотр логов контейнеров
Просмотр логов контейнеров
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ