#!/bin/bash # 🧪 FRAMEWORK DE TESTS UNIFIÉ - VEZA # Script pour exécuter tous les tests de manière cohérente set -e # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Configuration TEST_RESULTS_DIR="test-results" COVERAGE_DIR="coverage" TIMEOUT=300 # 5 minutes # Fonction pour afficher les messages log_info() { echo -e "${BLUE}ℹ️ $1${NC}" } log_success() { echo -e "${GREEN}✅ $1${NC}" } log_warning() { echo -e "${YELLOW}⚠️ $1${NC}" } log_error() { echo -e "${RED}❌ $1${NC}" } # Fonction pour exécuter les tests Go run_go_tests() { local service=$1 local test_dir=$2 log_info "Exécution des tests Go pour $service..." if [ ! -d "$test_dir" ]; then log_warning "Répertoire $test_dir non trouvé, ignoré" return 0 fi cd "$test_dir" # Tests unitaires log_info "Tests unitaires..." go test -v -race -timeout=${TIMEOUT}s -coverprofile=coverage.out ./... 2>&1 | tee "$TEST_RESULTS_DIR/${service}_unit.log" # Tests d'intégration log_info "Tests d'intégration..." go test -v -tags=integration -timeout=${TIMEOUT}s ./... 2>&1 | tee "$TEST_RESULTS_DIR/${service}_integration.log" # Génération du rapport de couverture if [ -f "coverage.out" ]; then go tool cover -html=coverage.out -o "$COVERAGE_DIR/${service}_coverage.html" go tool cover -func=coverage.out > "$COVERAGE_DIR/${service}_coverage.txt" fi cd - > /dev/null log_success "Tests Go pour $service terminés" } # Fonction pour exécuter les tests Rust run_rust_tests() { local service=$1 local test_dir=$2 log_info "Exécution des tests Rust pour $service..." if [ ! -d "$test_dir" ]; then log_warning "Répertoire $test_dir non trouvé, ignoré" return 0 fi cd "$test_dir" # Tests unitaires et d'intégration cargo test --verbose --all-features 2>&1 | tee "$TEST_RESULTS_DIR/${service}_tests.log" # Tests de performance cargo test --release --verbose --all-features 2>&1 | tee "$TEST_RESULTS_DIR/${service}_perf.log" # Génération du rapport de couverture (si tarpaulin est installé) if command -v cargo-tarpaulin >/dev/null 2>&1; then cargo tarpaulin --out Html --output-dir "$COVERAGE_DIR" --name "${service}_coverage" fi cd - > /dev/null log_success "Tests Rust pour $service terminés" } # Fonction pour exécuter les tests JavaScript/TypeScript run_js_tests() { local service=$1 local test_dir=$2 log_info "Exécution des tests JS/TS pour $service..." if [ ! -d "$test_dir" ]; then log_warning "Répertoire $test_dir non trouvé, ignoré" return 0 fi cd "$test_dir" # Vérifier si Jest est configuré if [ -f "package.json" ] && grep -q "jest" package.json; then # Tests unitaires npm test -- --coverage --watchAll=false 2>&1 | tee "$TEST_RESULTS_DIR/${service}_tests.log" # Tests E2E si configurés if [ -f "e2e.config.js" ] || [ -f "cypress.config.js" ]; then npm run test:e2e 2>&1 | tee "$TEST_RESULTS_DIR/${service}_e2e.log" fi else log_warning "Jest non configuré pour $service, ignoré" fi cd - > /dev/null log_success "Tests JS/TS pour $service terminés" } # Fonction pour exécuter les tests de performance run_performance_tests() { log_info "Exécution des tests de performance..." # Tests de charge pour l'API if command -v k6 >/dev/null 2>&1; then log_info "Tests de charge avec k6..." k6 run --out json="$TEST_RESULTS_DIR/load_test_results.json" tests/performance/load_test.js 2>&1 | tee "$TEST_RESULTS_DIR/load_test.log" fi # Tests de stress if command -v wrk >/dev/null 2>&1; then log_info "Tests de stress avec wrk..." wrk -t12 -c400 -d30s http://localhost:8080/health 2>&1 | tee "$TEST_RESULTS_DIR/stress_test.log" fi log_success "Tests de performance terminés" } # Fonction pour exécuter les tests de sécurité run_security_tests() { log_info "Exécution des tests de sécurité..." # Scan de vulnérabilités Go if command -v gosec >/dev/null 2>&1; then log_info "Scan de sécurité Go..." gosec -fmt json -out "$TEST_RESULTS_DIR/gosec_report.json" ./... 2>&1 | tee "$TEST_RESULTS_DIR/gosec.log" fi # Scan de vulnérabilités Rust if command -v cargo-audit >/dev/null 2>&1; then log_info "Scan de sécurité Rust..." cargo audit --json > "$TEST_RESULTS_DIR/cargo_audit.json" 2>&1 | tee "$TEST_RESULTS_DIR/cargo_audit.log" fi # Scan de vulnérabilités npm if command -v npm-audit >/dev/null 2>&1; then log_info "Scan de sécurité npm..." npm audit --json > "$TEST_RESULTS_DIR/npm_audit.json" 2>&1 | tee "$TEST_RESULTS_DIR/npm_audit.log" fi log_success "Tests de sécurité terminés" } # Fonction pour générer le rapport global generate_report() { log_info "Génération du rapport global..." local report_file="$TEST_RESULTS_DIR/test_report.html" cat > "$report_file" << 'HTMLEOF'
Généré le $(date)