/
CW3
/
The_Project
Обзор
Документация
Войти
/
CW3
/
The_Project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_log_parser.py
123 строки
4 KB
CW3
Initial project setup with structure and CI/CD
28 дек 2025, 12:40
28 дек 2025, 12:40
5cacb7a
Код
Авторство
О чём код?
""" Тесты для парсера логов LMS """ import pytest import pandas as pd import os from src.data.log_parser import LMSLogParser, generate_sample_logs_csv class TestLMSLogParser: """Тесты для класса LMSLogParser""" def test_initialization(self): """Тест инициализации парсера""" parser = LMSLogParser('data/sample_logs.csv') assert parser.log_file_path == 'data/sample_logs.csv' assert parser.df is None assert parser.event_counts is None def test_create_sample_data(self): """Тест создания синтетических данных""" parser = LMSLogParser('') df = parser._create_sample_data(num_records=50) assert len(df) == 50 assert 'student_id' in df.columns assert 'event_type' in df.columns assert 'course_id' in df.columns assert 'timestamp' in df.columns assert 'description' in df.columns # Проверяем, что все event_types допустимы valid_event_types = parser.EVENT_TYPES.keys() assert all(event in valid_event_types for event in df['event_type'].unique()) def test_load_logs_file_not_found(self): """Тест загрузки логов при отсутствии файла""" parser = LMSLogParser('non_existent_file.csv') df = parser.load_logs() # Должен создать синтетические данные assert df is not None assert len(df) > 0 def test_categorize_events(self): """Тест категоризации событий""" parser = LMSLogParser('') parser.load_logs() # Создает синтетические данные event_counts = parser.categorize_events() assert isinstance(event_counts, dict) assert len(event_counts) > 0 # Проверяем, что все ключи - допустимые типы событий valid_event_types = parser.EVENT_TYPES.keys() assert all(event in valid_event_types for event in event_counts.keys()) def test_get_student_activity(self): """Тест получения активности студента""" parser = LMSLogParser('') df = parser.load_logs() # Получаем ID первого студента student_id = df['student_id'].iloc[0] student_activity = parser.get_student_activity(student_id) assert isinstance(student_activity, pd.DataFrame) assert len(student_activity) > 0 assert (student_activity['student_id'] == student_id).all() def test_get_course_activity(self): """Тест получения активности по курсу""" parser = LMSLogParser('') df = parser.load_logs() # Получаем первый курс course_id = df['course_id'].iloc[0] course_activity = parser.get_course_activity(course_id) assert isinstance(course_activity, pd.DataFrame) assert len(course_activity) > 0 assert (course_activity['course_id'] == course_id).all() def test_save_parsed_logs(self, tmp_path): """Тест сохранения логов""" # Создаем временный файл temp_file = tmp_path / "test_logs.csv" parser = LMSLogParser('') parser.load_logs() # Сохраняем логи parser.save_parsed_logs(str(temp_file)) # Проверяем, что файл создан assert temp_file.exists() # Проверяем содержимое saved_df = pd.read_csv(temp_file) assert len(saved_df) == len(parser.df) assert all(col in saved_df.columns for col in parser.df.columns) def test_generate_sample_logs_csv(tmp_path): """Тест генерации CSV файла с логами""" temp_file = tmp_path / "sample_logs.csv" df = generate_sample_logs_csv(str(temp_file), num_records=100) assert temp_file.exists() assert len(df) == 100 # Проверяем, что файл можно загрузить loaded_df = pd.read_csv(temp_file) assert len(loaded_df) == 100 assert 'student_id' in loaded_df.columns if __name__ == "__main__": pytest.main([__file__, "-v"])