CodeGym /Kurslar /Docker SELF /Tətbiqin testləşdirilməsi və debugging

Tətbiqin testləşdirilməsi və debugging

Docker SELF
Səviyyə , Dərs
Mövcuddur

8.1 Frontend test edilməsi

Bu mərhələdə biz çoxcontainerli tətbiqimizi necə test edib və debaq edə biləcəyimizi araşdıracağıq. Test prosesi səhvləri tapıb düzəltməyə yardım edəcək, həm də sistemin bütün komponentlərinin düzgün işlədiyindən əmin olmağa imkan verəcək.

ReactJS üzərində frontend test etmək üçün biz Jest və React Testing Library kitabxanalarından istifadə edəcəyik.

Jest və React Testing Library quraşdırılması

Addım 1. Asılılıqların quraşdırılması:

Terminal

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

Addım 2. Jest-in sazlanması:

jest.config.js faylını frontend direktoriya daxilində yaradın:

Javascript

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

Addım 3. setupTests.js faylının yaradılması:

setupTests.js faylını frontend/src direktoriya daxilində yaradın:

Javascript

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

Addım 4. Komponentlər üçün testlərin yazılması

TaskList komponenti üçün test faylını frontend/src direktoriya daxilində yaradın:

Javascript

import React from 'react';
import { render, screen } from '@testing-library/react';
import TaskList from './TaskList';
    
test('Task List başlığını göstərir', () => {
  render(
   
       
   
       
   );
  const headingElement = screen.getByText(/Task List/i);
  expect(headingElement).toBeInTheDocument();
});

Addım 5. Testlərin işə salınması

Testləri işə salmaq üçün bu əmri icra edin:

Terminal

npm test

8.2 Backend test edilməsi

Flask-də backend-i test etmək üçün unittest kitabxanasından istifadə edəcəyik.

Asılılıqların quraşdırılması:

Terminal

cd ../backend
pip install Flask-Testing

Endpoint-lər üçün testlərin yazılması

tests adlı bir direktoriya və backend direktoriasında test_routes.py adlı bir fayl yaradın:

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):
        response = 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 Tapşırıq',
            'description': 'Test Təsvir',
            'owner_id': 1,
            'status': 'yerinə yetirilməyib'
        }, headers={'Authorization': f'Bearer {access_token}'})
        self.assertEqual(response.status_code, 201)
    
if __name__ == "__main__":
    unittest.main()

Testlərin işə salınması

Testləri işə salmaq üçün aşağıdakı komandadan istifadə edin:

Terminal

python -m unittest discover

8.3 İntegrasiya testləri

İntegrasiya testləri sistemin komponentləri arasındakı qarşılıqlı əlaqəni yoxlayır.

Test mühitinin qurulması

İntegrasiya testləri üçün biz bütün servisləri test mühitində qaldırmaq üçün Docker Compose istifadə edəcəyik.

Addım 1. Testlər üçün Docker Compose faylının yaradılması:

Dizaynın kök direktoriyasında docker-compose.test.yml faylını yaradın:

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:

Addım 2. Test mühitinin başladılması:

Bütün servisləri test mühitində başlatmaq üçün bu əmrdən istifadə edin:

Terminal

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

İntegrasiya testlərinin yazılması

İntegrasiya testlərini müxtəlif alətlərlə yaza bilərsiniz. Bir yanaşma - istifadəçi interfeysinin avtomatlaşdırılmış testləri üçün Selenium istifadə etməkdir.

Addım 1. Selenium-un qurulması:

Terminal

pip install selenium

Addım 2. İntegrasiya testinin yazılması:

tests direktoriyasında test_integration.py faylı yaradın:

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()

Addım 3. İntegrasiya testinin başladılması:

İntegrasiya testini başlatmaq üçün bu əmrdən istifadə edin:

Terminal

python tests/test_integration.py

8.4 Debugging

Debugging üçün container log-larını və monitoring alətlərini istifadə edə bilərsiniz.

Container log-larına baxış

Loglara baxmaq üçün bu əmri istifadə edin:

Terminal

docker compose logs

Monitoring alətlərindən istifadə

Əvvəlcədən qurulmuş Prometheus və Grafana vasitəsilə metrikləri və xidmətlərin vəziyyətini izləyin.

  1. Grafana-nın veb interfeysinə keçin:Brauzeri açın və http://localhost:3033 ünvanına gedin.
  2. Dashboard-lara baxış:
  3. Yaradılmış dashboard-ları istifadə edərək xidmətlərin performansı və vəziyyətini izləyin.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION