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ı:
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:
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:
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:
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:
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ı:
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:
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:
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:
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:
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ı:
pip install selenium
Addım 2. İntegrasiya testinin yazılması:
tests direktoriyasında test_integration.py faylı yaradın:
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:
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:
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.
- Grafana-nın veb interfeysinə keçin:Brauzeri açın və http://localhost:3033 ünvanına gedin.
- Dashboard-lara baxış: Yaradılmış dashboard-ları istifadə edərək xidmətlərin performansı və vəziyyətini izləyin.
GO TO FULL VERSION