CodeGym /课程 /Docker SELF /应用程序的测试和调试

应用程序的测试和调试

Docker SELF
第 24 级 , 课程 2
可用

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:

在 frontend 文件夹中创建文件 jest.config.js

Javascript

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

步骤 3. 创建文件 setupTests.js

在 frontend/src 文件夹中创建文件 setupTests.js

Javascript

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

步骤 4. 为组件编写测试

frontend/src 文件夹中为组件 TaskList 创建测试文件:

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': '测试任务',
            '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 "任务列表" 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 的 web 界面: 打开浏览器并访问 http://localhost:3033
  2. 查看仪表板: 使用创建的仪表板跟踪服务的性能和状态。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION