/
marsela13
/
practic
Обзор
Документация
Войти
/
marsela13
/
practic
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/conftest.py
143 строки
5 KB
marsela13
Upload files to "tests"
25 дек 2025, 15:34
25 дек 2025, 15:34
00b2246
Код
Авторство
О чём код?
""" Конфигурация pytest для проекта Network Scanner GUI. Содержит фикстуры и настройки для всех тестов. """ import sys import os import tempfile from pathlib import Path from unittest.mock import Mock, MagicMock, patch import pytest # Добавление пути к проекту в PYTHONPATH project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root)) @pytest.fixture def temp_dir(): """Создание временной директории для тестов.""" with tempfile.TemporaryDirectory() as tmpdir: yield tmpdir @pytest.fixture def sample_scan_results(): """Пример результатов сканирования для тестирования.""" return [ { 'ip': '192.168.1.1', 'hostname': 'router.local', 'status': 'Online', 'open_ports': [80, 443, 22], 'timestamp': '2024-01-15T10:30:00.000000' }, { 'ip': '192.168.1.100', 'hostname': 'printer.local', 'status': 'Online', 'open_ports': [80, 443], 'timestamp': '2024-01-15T10:30:05.000000' }, { 'ip': '192.168.1.150', 'hostname': '', 'status': 'Online', 'open_ports': [], 'timestamp': '2024-01-15T10:30:10.000000' } ] @pytest.fixture def mock_scanner(): """Создание мок-объекта NetworkScanner.""" scanner = Mock() scanner.max_threads = 50 scanner.timeout = 1.0 scanner.results = [] scanner.is_cancelled = False # Моки методов scanner.ping_host = Mock(return_value=True) scanner.get_hostname = Mock(return_value='test.local') scanner.scan_port = Mock(return_value=True) scanner.scan_ports = Mock(return_value=[80, 443]) scanner.scan_single_host = Mock(return_value={ 'ip': '192.168.1.1', 'hostname': 'test.local', 'status': 'Online', 'open_ports': [80, 443], 'timestamp': '2024-01-15T10:30:00.000000' }) scanner.scan_network = Mock(return_value=[]) scanner.export_to_json = Mock(return_value=True) scanner.export_to_csv = Mock(return_value=True) scanner.cancel_scan = Mock() scanner.set_progress_callback = Mock() return scanner @pytest.fixture def valid_ip_ranges(): """Корректные диапазоны IP для тестирования.""" return [ '192.168.1.1', # Одиночный IP '192.168.1.1-10', # Сокращенный диапазон '192.168.1.1-192.168.1.10', # Полный диапазон '192.168.1.0/24', # CIDR нотация '10.0.0.0/16', # Большая подсеть '172.16.0.1-172.16.0.50', # Диапазон в другой подсети ] @pytest.fixture def invalid_ip_ranges(): """Некорректные диапазоны IP для тестирования.""" return [ '999.999.999.999', # Некорректный IP '192.168.1.0/33', # Некорректная маска CIDR '192.168.1.300-400', # Некорректный диапазон 'not-an-ip', # Не IP строка '192.168.1.', # Неполный IP '192.168.1.1-', # Незавершенный диапазон '/24', # Только маска '192.168.1.1/0', # Нулевая маска ] @pytest.fixture def common_ports(): """Стандартные порты для тестирования.""" return [21, 22, 23, 25, 53, 80, 110, 111, 135, 139, 143, 443, 445, 993, 995, 1723, 3306, 3389, 5900, 8080] @pytest.fixture def qapplication(): """Фикстура для создания QApplication (требуется для GUI тестов).""" from PyQt5.QtWidgets import QApplication # Создаем приложение только если его еще нет app = QApplication.instance() if app is None: app = QApplication([]) return app @pytest.fixture(autouse=True) def cleanup_after_tests(): """Автоматическая очистка после каждого теста.""" yield # Очистка временных файлов import glob for temp_file in glob.glob('test_*.json') + glob.glob('test_*.csv'): try: os.remove(temp_file) except: pass