System WAPRO Network Mock posiada zintegrowane testy E2E, które automatycznie weryfikują poprawność działania wszystkich komponentów po uruchomieniu środowiska Docker Compose.
scripts/start.sh - Uruchomienie z testamiGłówny skrypt startowy, który:
./scripts/start.sh
Funkcje:
scripts/test-e2e.sh - Tylko testySkrypt dedykowany tylko do testowania (bez restartu kontenerów):
./scripts/test-e2e.sh
Zastosowanie:
# Uruchomienie z testami
make start
# Tylko testy E2E
make test-e2e
# Status środowiska
make status
Testy wykonywane:
saPrzykład wyniku:
💾 Testowanie MSSQL WAPROMAG Database:
Czekam na MSSQL Server Port (localhost:1433)... ✓
Testuję MSSQL WAPROMAG... ✓
Testy wykonywane:
/healthPrzykład wyniku:
🖥️ Testowanie RPI Mock Server:
Czekam na RPI GUI Port (localhost:8080)... ✓
Czekam na RPI API Port (localhost:8081)... ✓
Testuję RPI GUI Interface (http://localhost:8080)... ✓ (HTTP 200)
Testuję RPI API Health (http://localhost:8081/health)... ✓ (HTTP 200)
Testy wykonywane:
/api/statusPrzykład wyniku:
🖨️ Testowanie ZEBRA Printer 1:
Testuję ZEBRA Printer 1 Web UI (http://localhost:8091)... ✓ (HTTP 200)
Testuję ZEBRA Printer 1 ZPL Socket (localhost:9100)... ✓
Testuję ZEBRA Printer 1 Status API (http://localhost:8091/api/status)... ✓ (valid JSON)
✅ Wszystkie testy przeszły pomyślnie
Testy wykonywane:
/api/statusPrzykład wyniku:
🖨️ Testowanie ZEBRA Printer 2:
Testuję ZEBRA Printer 2 Web UI (http://localhost:8092)... ✓ (HTTP 200)
Testuję ZEBRA Printer 2 ZPL Socket (localhost:9101)... ✓
Testuję ZEBRA Printer 2 Status API (http://localhost:8092/api/status)... ✓ (valid JSON)
✅ Wszystkie testy przeszły pomyślnie
Testy wykonywane:
Uwaga: Te testy są wykonywane tylko jeśli usługi są uruchomione (profil monitoring).
# Uruchomienie z monitoringiem
docker-compose --profile monitoring up -d
./scripts/test-e2e.sh
Testy wykonywane:
Po zakończeniu wszystkich testów wyświetlane jest szczegółowe podsumowanie:
═══════════════════════════════════════════════════════════
📈 PODSUMOWANIE TESTÓW E2E:
═══════════════════════════════════════════════════════════
Wszystkie testy: 14
Zaliczone: 14
Niezaliczone: 0
✅ Status: SUKCES
═══════════════════════════════════════════════════════════
01docker-compose logs <service_name>
1docker-compose ps
docker-compose logs
wait_for_service(host, port, service_name)Czeka maksymalnie 30 sekund na dostępność portu.
wait_for_service "localhost" "1433" "MSSQL Server Port"
test_http_endpoint(url, service_name, expected_status)Testuje endpoint HTTP i sprawdza kod odpowiedzi.
test_http_endpoint "http://localhost:8080" "RPI GUI" "200"
test_tcp_socket(host, port, service_name)Testuje dostępność socketu TCP.
test_tcp_socket "localhost" "9100" "ZEBRA Socket"
test_api_endpoint(url, service_name)Testuje endpoint API i waliduje format JSON.
test_api_endpoint "http://localhost:8091/api/status" "ZEBRA Status"
test_zebra_printer(web_port, socket_port, printer_name)Kompleksowy test drukarki ZEBRA (web + socket + API).
test_zebra_printer "8091" "9100" "ZEBRA Printer 1"
test_mssql()Test połączenia z bazą danych MSSQL.
test_mssql
curl - testowanie HTTP endpointsnc (netcat) - testowanie socketów TCPjq - walidacja JSON (opcjonalne, ale zalecane)docker - dostęp do kontenerówsudo apt-get install curl netcat-openbsd jq docker.io
apk add curl netcat-openbsd jq
name: E2E Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup environment
run: ./scripts/setup.sh
- name: Start services with E2E tests
run: ./scripts/start.sh
- name: Upload test results
if: always()
uses: actions/upload-artifact@v3
with:
name: test-results
path: test-results/
e2e_tests:
stage: test
image: docker:latest
services:
- docker:dind
script:
- ./scripts/setup.sh
- ./scripts/start.sh
artifacts:
paths:
- test-results/
when: always
# Tylko MSSQL
docker exec wapromag-mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "WapromagPass123!" -Q "SELECT 1"
# Tylko RPI Server
curl -v http://localhost:8080/health
# Tylko ZEBRA Printer
echo -e "\n" | nc -v localhost 9100
# Wszystkie usługi
docker-compose logs -f
# Konkretna usługa
docker-compose logs -f rpi-server
docker-compose restart rpi-server
./scripts/test-e2e.sh
Zawsze uruchamiaj testy po zmianach - Użyj ./scripts/start.sh zamiast docker-compose up -d
Sprawdzaj logi przy błędach - Każdy nieudany test powinien być zdiagnozowany z logów
Używaj health checków - Docker Compose health checks są komplementarne do testów E2E
Timeout jest Twoim przyjacielem - Jeśli test nie przeszedł z timeout, usługa prawdopodobnie się nie uruchomiła
Testuj integrację - Nie tylko pojedyncze komponenty, ale także komunikację między nimi
Aby dodać nowy test:
scripts/start.sh lub scripts/test-e2e.shTOTAL_TESTSPASSED_TESTS i FAILED_TESTSPrzykład:
# ============================================================================
# TEST X: NOWY KOMPONENT
# ============================================================================
echo ""
echo "🔧 Testowanie Nowego Komponentu:"
TOTAL_TESTS=$((TOTAL_TESTS + 1))
if test_http_endpoint "http://localhost:9999" "Nowy Komponent"; then
PASSED_TESTS=$((PASSED_TESTS + 1))
else
FAILED_TESTS=$((FAILED_TESTS + 1))
fi
Q: Dlaczego testy nie przechodzą od razu po docker-compose up?
A: Kontenery potrzebują czasu na inicjalizację. Funkcja wait_for_service() czeka do 30 sekund.
Q: Co zrobić jeśli test przeszedł ale usługa nie działa?
A: Sprawdź logi (docker-compose logs) - może być problem z aplikacją mimo że port jest otwarty.
Q: Czy mogę uruchomić testy bez restartu środowiska?
A: Tak! Użyj ./scripts/test-e2e.sh zamiast ./scripts/start.sh.
Q: Jak dodać custom timeout?
A: Edytuj parametr max_attempts w funkcji wait_for_service().
Q: Czy testy E2E działają na Windows?
A: Tak, ale potrzebujesz WSL2 lub Git Bash z narzędziami (curl, nc).
W przypadku problemów:
make health dla szybkiej diagnostykimake logs